Системный администратор
رفتن به کانال در Telegram
Канал для системных администраторов. Linux, Windows, Active Directory, GPO, PowerShell. Виртуализация Hyper-V, VMWare. Облака Azure, AWS. По всем вопросам @evgenycarter
نمایش بیشتر2 023
مشترکین
-124 ساعت
-257 روز
-9530 روز
آرشیو پست ها
Cron — лучшие практики
Планировщик задач cron(8) существует с 7 версии Unix, а его синтаксис crontab(5) знаком даже тем, кто нечасто сталкивается с системным администрированием Unix. Это стандартизированный, довольно гибкий, простой в настройке и надёжно работающий планировщик, которому пользователи и системные пакеты доверяют управление важными задачами.
У простоты cron(8), как и многих старых Unix-инструментов, есть недочёт: программа полагается на то, что пользователь хотя бы примерно знает, как всё работает, и в состоянии правильно реализовать в нём какую-то проверку безопасности.
По сути, единственное, что делает планировщик, — это пытается запустить задачу в определённое время и прислать результат на электронную почту. Для простых и незначительных задач пользователей таких возможностей вполне достаточно.
Но для более важных системных задач стоит обернуть вокруг cron(8) и вызываемых им задач дополнительную инфраструктуру. Если вам хочется отслеживать выполняемые задачи, то существует несколько способов повысить надёжность работы с cron(8).
Rus https://habr.com/ru/companies/skillfactory/articles/656423/
Eng https://blog.sanctum.geek.nz/cron-best-practices/
👉@i_linux
Команда findmnt
Это простая утилита командной строки, используемая для отображения списка подключенных файловых систем или поиска файловой системы в /etc/fstab, /etc/mtab или /proc/self/ mountinfo.
Для отображения списка подключенных файловых систем, выполните в командной строке следующую команду.
По умолчанию команда findmnt отображает файловые системы в древовидном формате.
# findmnt
Чтобы отобразить информацию в виде обычного списка, используйте параметр -l, как показано ниже
# findmnt -l
Можно выбрать отображение файловых систем только определенного типа, используя параметр командной строки -t, за которым следует тип файловой системы, такой как XFS или EXT4.
# findmnt --fstab -t xfs или # findmnt --fstab -t ext4
Поиск файловой системы, используя точку монтирования.
Например, следующая команда отображает все файловые системы /etc/fstab, где каталогом точки монтирования является /mnt/external/disk2.
# findmnt --fstab /mnt/external/disk2 # this prints bind mounts where /mnt/external/disk2 is a source
или # findmnt --fstab --target /mnt/external/disk2
Выводим все файловые системы /etc/fstab и преобразовываем теги LABEL = и UUID = в реальные имена устройств, добавьте ключ – –evaluate
# findmnt --fstab --evaluate
Отобразить только точку монтирования, в которой смонтирована файловая система с меткой «/ boot» или «/», используйте следующую команду.
# findmnt -n --raw --evaluate --output=target LABEL=/boot или # findmnt -n --raw --evaluate --output=target LABEL=/
Findmnt также позволяет отслеживать действия по монтированию, размонтированию, перемонтированию и перемещению каталога, например, в /mnt/test.
# findmnt --poll --mountpoint /mnt/test
Если вы хотите больше информации в выводе, используйте ключ –verbose.
# findmnt --real --verbose
👉@i_linuxПодборка скриптов PowerShell для работы с Azure, Active Directory, SCCM, SCSM, Exchange ...
Пример скрипта
function Get-LocalUser {
<#
.SYNOPSIS
This script can be list all of local user account.
.DESCRIPTION
This script can be list all of local user account.
The function is using WMI to connect to the remote machine
.PARAMETER ComputerName
Specifies the computers on which the command . The default is the local computer.
.PARAMETER Credential
A description of the Credential parameter.
.EXAMPLE
Get-LocalUser
This example shows how to list all of local users on local computer.
.NOTES
Francois-Xavier Cat
lazywinadmin.com
@lazywinadmin
.LINK
https://github.com/lazywinadmin/PowerShell
#>
PARAM
(
[Alias('cn')]
[String[]]$ComputerName = $Env:COMPUTERNAME,
[String]$AccountName,
[System.Management.Automation.PsCredential]$Credential
)
$Splatting = @{
Class = "Win32_UserAccount"
Namespace = "root\cimv2"
Filter = "LocalAccount='$True'"
}
#Credentials
If ($PSBoundParameters['Credential']) { $Splatting.Credential = $Credential }
Foreach ($Computer in $ComputerName) {
TRY {
Write-Verbose -Message "[PROCESS] ComputerName: $Computer"
Get-WmiObject @Splatting -ComputerName $Computer | Select-Object -Property Name, FullName, Caption, Disabled, Status, Lockout, PasswordChangeable, PasswordExpires, PasswordRequired, SID, SIDType, AccountType, Domain, Description
}
CATCH {
Write-Warning -Message "[PROCESS] Issue connecting to $Computer"
}
}
}
https://github.com/lazywinadmin/PowerShell
👉@i_linuxКонвертация PFX в CRT и KEY
Для ECDSA:
openssl pkcs12 -in certificate_ECDSA.pfx -out certificate_ECDSA.key -nodes -nocerts
openssl pkcs12 -in certificate_ECDSA.pfx -out certificate_ECDSA.crt -nokeys
Если pfx запаролен, будет запрошен Import Password.
Для RSA:
openssl pkcs12 -in certificate_RSA.pfx -clcerts -nokeys -out certificate_RSA.crt
openssl pkcs12 -in certificate_RSA.pfx -nocerts -out certificate_RSA-encrypted.key
openssl rsa -in certificate_RSA-encrypted.key -out certificate_RSA.key
Если pfx запаролен, будет запрошен Import Password. Ключ сперва сохраняется в зашифрованном виде, для этого требуется задать PEM pass, который затем нужно указать при расшифровке ключа.
👉@i_linuxПростое копирование ssh ключей между серверами c использованием утилиты ssh-copy-id
Традиционно администраторы решают задачу копирования ssh ключей между серверами путем копирования содержимого файла /root/.ssh/id_rsa.pub с сервера server1 на server2 в файл /root/.ssh/authorized_keys. Копируют обычно из одного терминала в другой, но есть более изящное решение — это использование утилиты ssh-copy-id, которая позволяет скопировать содержимое id_rsa.pub сервера источник (в нашем случае server1) на сервер приемник (server2) в нужный нам authorized_keys не открывая консоль сервера приемника (server2).
Исходные данные: 2 сервера с Debian (server1 и server2).
Задача: Организовать вход по ssh ключу с сервера server1 на server2 с правами root.
Итак сделаем все по порядку:
1. Генерируем публичный открытый и закрытый ключи, под пользователем root на server1:
ssh-keygen -t rsa
Если на сервере уже есть эти ключи, то он выдаст предупреждение, где нужно будет либо подтвердить замену старых ключей либо отказаться.
Мы создаем ключи впервые, поэтому предупреждения не будет, будет выведена примерно такая информация:
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): <-- ENTER
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): <-- ENTER
Enter same passphrase again: <-- ENTER
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
Вы можете защитить приватный ключ паролем и тогда чтобы попасть на сервер server2 по ssh ключу нужно будет ввести этот пароль, я настоятельно рекомендую для доступа с уровнем root ввести пароль на приватный ключ.
Ключи сгенерированы, мы можем проверить под пользователем root выполнив команду
cat ~/.ssh/id_rsa.pub
В ответ увидим примерно:
ssh-rsa AAAAB3Nz.....ywWmpl root@server1
Теперь нужно передать публичный ключ id_rsa.pub пользователя root на server2, для этого на server1 выполняем:
ssh-copy-id -i ~/.ssh/id_rsa.pub root@server2
Вводим пароль root от сервера server2 и ключ будет передан и записан в нужный файл authorized_keys
Важное уточнение: Чтобы передать публичный ключ на server2 под root нужно чтобы пользователю root было разрешен вход по ssh на server2, обычно при базовой установке Debian/Ubuntu вход под root по ssh разрешен, это настраивается директивой PermitRootLogin в файле /etc/ssh/sshd_config
PermitRootLogin yes — Вход под root по ssh разрешен.
PermitRootLogin no — Вход под root по ssh запрещен.
PermitRootLogin without-password — Вход под root по ssh разрешен только по ssh ключам.
PermitRootLogin forced-commands-only — Вход под root по ssh разрешен только по ssh ключам и только для выполнения заранее определенной команды, сама команда прописывается в /root/.ssh/authorized_keys в формате:
command="rsync" ssh-rsa AAAAB3N……. root@server2
После изменения PermitRootLogin не забудьте перезапустить службу sshd командой:
service sshd restart
👉@i_linuxШпаргалка по часто используемым командам systemctl
1. Посмотреть статус службы. Покажет статус службы на примере сети network
systemctl status network
2. Запустить сервис. Запустит сервис баз данных на примере mysql
systemctl start mysql
3. Остановить службу. Остановит сервис времени ntpd
systemctl stop ntpd
4. Перезапустить службу. Перезапустит веб-сервер nginx
systemctl restart nginx
5. Включить автозапуск службы. Разрешит автозапуск веб-сервера apache
systemctl enable apache
6. Отключить автозапуск службы. Запретит автозапуск брандмауэра firewalld
systemctl disable firewalld
7. Выполнить команду на удаленной системе. Остановит cron на компьютере с IP-адресом 192.168.0.15, подключившись под учетной записью root
systemctl --host root@192.168.0.15 stop cron
8. Перезагрузить сервер. Перезагрузит локальный сервер
systemctl reboot
9. Проверка работы сервиса. Выполняется с помощью опции is-active. В данном примере мы проверим работу службы docker.
systemctl is-active docker
а) Если сервис запущен, мы увидим:
active
б) Если не запущен:
failed
... или:
inactive
в) Если такого сервиса нет в системе:
unknown
... или:
inactive
Если сервис не работает или его нет в системе, команда вернет код ошибки, таким образом конструкция:
systemctl is-active docker && docker run hello-world
... приведет к выполнению команды docker run hello-world только в том случае, если сервис docker работает.
👉@i_linuxКоманды Linux: Пользователи и группы
groupadd group_name — создать новую группу с именем group_name
groupdel group_name — удалить группу group_name
groupmod -n new_group_name old_group_name — переименовать группу old_group_name в new_group_name
useradd -c "Nome Cognome" -g admin -d /home/user1 -s /bin/bash user1 — создать пользователя user1, назначить ему в качестве домашнего каталога /home/user1, в качестве shell'а /bin/bash, включить его в группу admin и добавить комментарий Nome Cognome
useradd user1 — создать пользователя user1
userdel -r user1 — удалить пользователя user1 и его домашний каталог
usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1 — изменить атрибуты пользователя
passwd — сменить пароль
passwd user1 — сменить пароль пользователя user1 (только root)
chage -E 2005-12-31 user1 — установить дату окончания действия учётной записи пользователя user1
pwck — проверить корректность системных файлов учётных записей. Проверяются файлы /etc/passwd и /etc/shadow
grpck — проверяет корректность системных файлов учётных записей. Проверяется файл/etc/group
newgrp [-] group_name — изменяет первичную группу текущего пользователя. Если указать «-», ситуация будет идентичной той, в которой пользователь вышил из системы и снова вошёл. Если не указывать группу, первичная группа будет назначена из /etc/passwd
👉@i_linuxCCNA 200-301
How to Create Layer 3 Ether Channel On Cisco Switch
How to Configure IP Routing with Layer 3 Switch SVI
How to Convert IPv6 Address to IPv6 EUI-64 Format
How to Configure IPv6 routing using Link Local IPv6 address
How to Configure Cisco Wireless Access Point
👉@i_linux
Протоколы семейства TCP/IP. Теория и практика
В сети можно найти огромное количество материала о том, как функционируют сети на базе стека протоколов TCP/IP, а также как писать компьютерные программы с сетевыми возможностями. При рассмотрении компьютерных сетей часто углубляются в описание физических основ и структур данных, передаваемых по сети, а при рассмотрении сетевого программирования основное внимание уделяют интернет-сокетам.
Но при изучении и исследовании хочется большего, например, поэкспериментировать с пакетами сетевых протоколов. Многие сетевые протоколы реализованы в ядре операционной системы, и что-либо изменить может оказаться сложной задачей, так как это требует навыков в написании драйверов для операционной системы. Но использование специализированных библиотек позволяет работать с протоколами на низком уровне из пространства пользователя.
В ходе работы над статьёй я написал небольшое приложение, которое послужит отправной точкой для понимания компьютерных сетей и семейства протоколов TCP/IP. С приложением можно экспериментировать, получая дополнительные знания.
Приложение — простое и понятное и, надеюсь, упростит изучение материалов статьи. Ведь именно радость первой победы даёт мотивацию, достаточную для того, чтобы потратить гораздо больше времени на изучение темы.
В статье изложены наиболее важные с моей точки зрения понятия, которые должен знать любой программист, хоть как-то сталкивающийся с компьютерными сетями. Так что без теоретических сведений не обошлось.
Приложение доступно на GitHub.
https://habr.com/ru/companies/ruvds/articles/759988/
👉@i_linux
MikroTik Scripting
Lesson 1 - Development environment
Lesson 2 - Hello World
Lesson 3 (Part 1): Probe 1 - Temperature Checker
Lesson 3 (Part 2): Probe 1 - Temperature Checker
Lesson 04 (Part 1): Probe 2 - Interface Utilization Monitor
Lesson 04 (Part 2): Probe 2 - Interface Utilization Monitor
Lesson 05 (Part 1): Probe 3 - Web Monitor
Lesson 05 (Part 2): Probe 3 - Web Monitor
Lesson 06 (Part 1): Telegram Reporter
Lesson 06 (Part 2): Telegram Reporter
Lesson 06 (Part 3): Telegram Reporter
источник
👉@i_linux
Вывод cron всех пользователей
Вывод задач в cron для текущего пользователя осуществляется просто:
crontab -l
Список задач другого пользователя (например, oracle) можно посмотреть так:
crontab -u oracle -l
Но иногда требуется посмотреть список задач в cron для всех пользователей, сделать это можно следующей командой:
for user in $(cut -d':' -f1 /etc/passwd); do crontab -u $user -l; done
Если это требуется не единожды, а постоянно, можно написать небольшой скрипт, для этого в файле ~/.bashrc прописываем:
# Цвета вывода
red='\e[0;31m'
RED='\e[1;31m'
green='\e[0;32m'
GREEN='\e[1;32m'
NC='\e[0m'
# Определение функции вывода задач cron всех пользователей
function allcrontab() {
for user in $(cut -d':' -f1 /etc/passwd); do
usercrontab=$(crontab -l -u ${user} 2>/dev/null)
if [ -n "${usercrontab}" ]; then
echo -e "${RED}====== Start crontab for user ${NC}${GREEN}${user}${NC} ${RED}======${NC}"
crontab -l -u ${user} | sed '/ *#/d; /^ *$/d'
echo -e "${RED}====== End crontab for user ${NC}${GREEN}${user}${NC} ${RED}========${NC}\n"
fi
done
}
Выполнив source ~/.bashrc или просто перелогинившись в консоли, можем выполнить команду allcrontab и получить красивый вывод списка задач cron всех пользователей в системе.
👉@i_linuxПолезные bash/shell/perl скрипты для Linux/Unix администраторов
Это сборник полезных bash/shell/perl скрипты для Linux/Unix администраторов.
Все скрипты рассортированы по категориям сервисов и программ. Например: dns, dhcp, samba, ispconfig, other и т.д.
Большинство скриптов были найдены на просторах Интернет, некоторые написаны мной.
Все права и копирайты сохранены.
https://github.com/CHERTS/linux-scripts/blob/master/README.ru.md
👉@i_linux
Объяснение Traceroute / Демо на Windows, Linux, macOS
Понимает ли Элон Маск, как работает Интернет? Может ли он правильно объяснить traceroute и tracert? Ну... давайте посмотрим... Я покажу, как несколько операционных систем: Windows 11, MacOS, Linux используют traceroute.
Различия есть, в том числе и в том, что Windows использует ICMP, а macOS и Linux - UDP и ICMP.
0:00 Introduction
0:08 Elon Musk Babylon Bee interview video
1:11 How trace route works
1:40 What is ping?
1:48 Internet Control Message Protocol (ICMP)
2:32 How trace route (tracert) works on Windows
3:50 What is a router?
4:10 Wireshark packet captures
5:21 Time To Live (TTL)
10:18 Domain lookup using Whois
10:55 Time To Live (TTL) (cont'd)
12:10 Trace route phone application
13:43 Submarine cable map
15:22 Traceroute on MacOS
18:34 UDP explanation
19:56 Traceroute on Linux
21:42 Conclusion
PS
Видео на английском, у кого сложности, смотрим через yandex браузер с синхр. переводом.
источник
👉@i_linux
Осторожно данное видео может вызвать психологическое расстройство 😎
👉@i_linux
GoAccess
Анализатор веб-журналов в режиме реального времени, который работает в терминале на системах *nix или через ваш браузер.
Предоставляет быструю и цельную статистику HTTP для системных администраторов, которым требуется визуальный отчет сервера на лету
https://github.com/allinurl/goaccess
👉@i_linux
DHCP сервер
DHCP (англ. Dynamic Host Configuration Protocol — протокол динамической настройки узла) — сетевой протокол, позволяющий сетевым устройствам автоматически получать IP-адрес и другие параметры, необходимые для работы в сети TCP/IP. Данный протокол работает по модели «клиент-сервер». Для автоматической конфигурации компьютер-клиент на этапе конфигурации сетевого устройства обращается к так называемому серверу DHCP и получает от него нужные параметры. Сетевой администратор может задать диапазон адресов, распределяемых сервером среди компьютеров. Это позволяет избежать ручной настройки компьютеров сети и уменьшает количество ошибок. Протокол DHCP используется в большинстве сетей TCP/IP.
DHCP является расширением протокола BOOTP, использовавшегося ранее для обеспечения бездисковых рабочих станций IP-адресами при их загрузке. DHCP сохраняет обратную совместимость с BOOTP.
источник
👉@i_linux
Как заставить пользователя изменить пароль при следующем входе в систему
Существует несколько способов.
Использование команды passwd
sudo passwd --expire [username]
Использование команды chage
sudo chage --lastday 0 [username]
Срок действия паролей
chage -l
Будет выведена следующая информация:
Когда пароль был последний раз изменен;
Дата окончания действия пароля;
Сколько дней осталось до окончания действия пароля;
Когда учетная запись пользователя будет закончена (можно, пожалуйста, далее мы будем говорить «заэкспайрится»?)
Минимальное количество дней между итерацией смены пароля;
Максимальное количество дней между итерацией смены пароля;
Заставляем пользователя менять пароль каждые 90 дней
sudo chage -M 90
Задаем срок жизни учетной записи (до 12 июня 2023)
sudo chage -E 2023-06-12 serg
sudo chage -E 2023-06-12 oleg
Сколько времени на смену пароля?
В примере даем Борису 10 дней на смену пароля с момента как пароль заэкспайрился
sudo chage -I 10 boris
Уведомление о смене пароля заранее
Через 25 дней истекает срок годности пароля Бориса
sudo chage -W 25 boris
Защищаемся от частой смены паролей пользователя
Минимальное количество дней между сменой паролей
sudo chage -m 25 boris
Удалить ограничение в днях
sudo chage -m 0 sergey
👉@i_linux