Sysadminium
322 subscribers
148 photos
1 video
1 file
398 links
Я делюсь своими знаниями системного администратора. Всё проверено на себе — иногда даже дважды.
Download Telegram
✅Группы в AD

👉Группы — это объекты для управления доступом и разрешениями. В AD есть два типа групп:
👉Security Groups (Группы безопасности)
Используются для назначения прав доступа к ресурсам (файлам, папкам, принтерам). Пользователи и компьютеры, включённые в эту группу, наследуют права, которые ей назначены. Security Group может использоваться и для рассылки почты, если нужно.
👉Distribution Groups (Группы рассылки)
Используются только для рассылки электронной почты (Exchange/Outlook). И не используются для назначения прав доступа.
👉Любые группы могут содержать пользователей, компьютеры и другие группы.

✅Взаимосвязь OU и Security Groups

👉Политики применяются к OU, а не к группам.
👉Права доступа назначаются группам, а не OU.
👉Пользователи могут находиться в любой OU, и принадлежать к любой группе.
👉Всё это позволяет гибко управлять политиками и доступом независимо друг от друга.

✅Пример:

👉OU: programmers - содержит всех программистов. GPO применяются к этой OU, и настраивают домашние папки и параметры рабочего стола каждого программиста.
👉Группа: programmers - используется чтобы все программисты получили доступ к общей сетевой папке.

✅Кстати, в AD - GPO наследуются вниз по иерархии OU (по умолчанию). Если к OU привязана политика, все объекты внутри этой OU и вложенных OU получают эту политику, если явно не запрещено наследование.
📌Univention Corporate Server (UCS)

Это сервер на базе Debian включающий в себя совместимый с Active Directory контроллер домена, реализованный с помощью Samba 4 и LDAP. Управляется UCS через встроенный web-интерфейс. На момент написания заметки последняя версия UCS 5.2.

Для установки предоставляется iso образ, для скачивания придётся заполнить анкету (оставить свой email).

Во время установки выбираем: Start with manual network settings. Запускается установщик похожий на установщик Debian. После установки в консоли нажимаем "Create a new UCS domain", придумываем имя домена, FQDN сервера, и пишем свой email для получения ключа активации UCS сервера. Он бесплатный, но требует активацию.

После подготовки контроллера домена из консоли переходим в web-интерфейс. Для логина используем имя Administrator, а пароль как у пользователя root.
👍2
Но это пока не полноценный контроллер домена, он работает без Samba и умеет обслуживать только Linux ПК. В web-интерфейсе из App Center устанавливаем приложение "Comprehensive Active Directory functions based on Samba". Это приложение установит и настроит Samba, что расширит возможности UCS для обслуживания Windows PC.

Для управления групповыми политиками из Windows 11 нужно использовать RSAT: средства управления групповыми политиками. Чтобы это сделать, переходим: "Настройки / Система / Дополнительные компоненты / Просмотреть компоненты / Просмотреть доступные функции / RSAT: средства управления групповыми политиками". После этого появится оснастка - gpmc.msc (Управление групповыми политиками).

А для управления пользователями нужно установить "Средства удалённого администрирования сервера: средства доменных служб Active Directory и служб облегченного доступа к каталогам". После этого появится - dsa.msc (Пользователи и компьютеры). Заметил особенность, что создать OU из этой оснастки не получится. Создавать OU нужно в UCS (web-интерфейсе). Для этого используется - LDAP directory.

UCS предоставляет возможность создать:
🔷Backup Directory Node (BDN) - это резервный контроллер домена, который можно превратить в основной. После установки, на него также нужно будет поставить приложение "Comprehensive Active Directory functions based on Samba".
🔷Replica Directory Node (RDN) - это облегченный вариант, что то вроде кэша контроллера домена, а не полноценный контроллер. Превратить его в основной не получится. Он призван снять нагрузку с основного контроллера домена. И кстати, он не поддерживает NLA для RDP подключений в отличии от BDN.

Для установки резервного контроллера домена, устанавливаем систему как обычно, только во время установки, в качестве DNS сервера укажем адрес первого UCS сервера. После установки и перезагрузки выбираем Join into an existing UCS domain, затем Backup Directory Node, а после ставим галочку Start join at the end of the installation и Search Primary Directory Node in DNS.

На резервный контроллер нужно будет также поставить "Comprehensive Active Directory functions based on Samba". Если при этом в App Center появится ошибка No repository to register, то нужно выполнить: ucr get repository/online/registered и apt update.

Для проверки что видны оба контроллера домена, на Windows клиенте выполняем команду:
nltest /dclist:<ваш домен>

✔️Должны быть видны оба контроллера домена.
📌Коды HTTP

Понимание HTTP-кодов ответа критически важно для диагностики проблем с веб-серверами, API, балансировщиками нагрузки и мониторингом инфраструктуры. Ниже приведены ключевые коды, с которыми DevOps-инженеры и Системные администраторы сталкиваются ежедневно.

🔷2xx — Успешные ответы
- 200 OK — Запрос успешно обработан. Ожидаемый ответ для большинства GET-запросов.
- 201 Created — Ресурс успешно создан (часто при POST-запросах к API).
- 204 No Content — Запрос успешен, но тело ответа пустое (часто используется в REST API).
👍2
🔷3xx — Перенаправления
- 301 Moved Permanently — Ресурс перемещён навсегда. Браузеры и поисковики кэшируют это.
- 302 Found (Moved Temporarily) — Временное перенаправление.
- 304 Not Modified — Когда клиент сообщает серверу, у меня в кэше страничка от такого-та числа, не изменилась ли она на сервере? И если страничка не изменилась, то сервер отвечает этим кодом. А если файл изменился, то ответит кодом 200 и пришлёт изменённую версию.

🔷4xx — Ошибки клиента
- 400 Bad Request — Сервер не понял запрос из-за неверного синтаксиса.
- 401 Unauthorized — Требуется аутентификация (обычно с заголовком WWW-Authenticate).
- 403 Forbidden — Доступ запрещён (например, права на файл веб-сервера).
- 404 Not Found — Запрашиваемый ресурс не найден.
- 429 Too Many Requests — Клиент превысил лимит запросов (часто при rate-limiting).

🔷5xx — Ошибки сервера
- 500 Internal Server Error — Общая ошибка на стороне сервера (например, ошибка в PHP/Python-скрипте).
- 502 Bad Gateway — Сервер (например, Nginx) не получил валидный ответ от upstream (например, от backend-приложения).
- 503 Service Unavailable — Сервер временно недоступен (часто при перегрузке или обслуживании).
- 504 Gateway Timeout — Upstream не ответил вовремя (проверяйте таймауты в Nginx/Apache и состояние backend-сервисов).

💡Советы для практики
👉Используйте curl -I для быстрой проверки кодов ответа: curl -I example.com.
👉Анализируйте логи веб-сервера (/var/log/nginx/access.log, /var/log/apache2/access.log) — там указаны HTTP-коды для каждого запроса.
👉Настройте алерты в Prometheus, Zabbix или Grafana на рост 5xx или 4xx.
👉При отладке 502/504 проверяйте:
- Доступность backend-сервиса (systemctl status myapp)
- Сетевую связность (telnet localhost 8080)
- Настройки прокси и таймаутов в Nginx (proxy_connect_timeout, proxy_read_timeout)

❗️Знание HTTP-кодов — не просто теория, а практический инструмент для быстрой диагностики и поддержания стабильности инфраструктуры.
👍7
📌Apt - что такое phased updates

👉Запускаем apt update и видим что есть 2-а обновления:

$ sudo apt update
(пропустил часть вывода команды)
2 packages can be upgraded. Run 'apt list --upgradable' to see them.


👉Хорошо, у нас есть 2-а обновления. Пробуем обновиться:

$ sudo apt dist-upgrade
(пропустил часть вывода команды)
The following upgrades have been deferred due to phasing:
libgtop-2.0-11 libgtop2-common
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.


👉Видим что оба обновления в состоянии to phasing. Такое сообщение означает что обновления для этих пакетов намеренно отложены системой управления пакетами apt, в рамках механизма, называемого phased updates (поэтапное обновление).
❗️Этот механизм используется в дистрибутивах на основе Debian/Ubuntu (начиная с Ubuntu 20.04). Служит он для того чтобы снизить риск массовых сбоев при обновлении пакетов. Вместо того чтобы сразу обновлять все системы, обновление сначала выпускаются лишь для части пользователей. Если в течении нескольких дней не поступает сообщений об ошибках, обновление постепенно распространяется на всё большее число систем, пока не достигнет 100%.

👉Чтобы посмотреть на какой процент устройств сейчас распространяется такое обновление выполним:

$ apt policy libgtop-2.0-11
libgtop-2.0-11:
Installed: 2.41.3-1build4
Candidate: 2.41.3-1ubuntu0.24.04.1
Version table:
2.41.3-1ubuntu0.24.04.1 500 (phased 30%)
500 http://ru.archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages
*** 2.41.3-1build4 500
500 http://ru.archive.ubuntu.com/ubuntu noble/main amd64 Packages
100 /var/lib/dpkg/status


❗️Из вывода видно что на 30% систем.
👍2
📌Авто-дополнение команд - bash

👉Чтобы в Ubuntu или Debian заработало авто-дополнение команд при нажатии Tab, нужно установить пакет bash-completion.

$ sudo apt update
$ sudo apt install bash-completion


❗️Убедитесь, что авто-дополнение подключено в вашем shell-конфиге - обычно в ~/.bashrc (обычно эти строки уже присутствуют в Ubuntu):

if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi


✅Эта проверка отключает загрузку bash-completion, если Bash в POSIX-режиме;
✅И проверяется два возможных расположения файла bash_completion.

После настройки применим конфигурацию:

. ~/.bashrc
👍5
🖍Эта статья — ваш первый шаг в мир Docker: вы узнаете, что такое контейнеры и образы, как происходит установка Docker на Linux, как запустить первый контейнер всего за пару команд. Просто, понятно и без воды — идеально для новичков!

👉Дополнительно в статье описываются основные команды Docker CLI.

Если тема вам интересна, то следом выпущу статью по сборке своих образов с помощью Dockerfile.

📌Статья: https://sysadminium.ru/docker-getting-started-installation-concepts/
👍12
📌NextCloud. Обновление информации о файлах созданных через консоль

👉В Nextcloud, если вы добавили новый файл или каталог напрямую на файловую систему (например, через scp, rsync или простое копирование), то веб-интерфейс не увидит его автоматически — потому что Nextcloud хранит метаданные файлов в своей базе данных, а не сканирует файловую систему в реальном времени.

Чтобы обновить информацию о файлах и каталогах из консоли, используйте встроенный инструмент - occ с командой files:scan.

⭐️Перейдите в директорию Nextcloud
Обычно это /var/www/nextcloud или /opt/nextcloud — зависит от вашей установки.
cd /var/www/nextcloud


⭐️Выполните сканирование
Замените username на имя пользователя, в чьём каталоге вы добавили новые файлы.
sudo -u www-data php occ files:scan username


❗️Дополнительно необходимо убедиться что права на файл принадлежат веб-серверу (www-data или nginx, в зависимости от вашего дистрибутива).
👍8
Попросил нейронку сгенерировать картинку Зайца DevOps. Как думаете, зачем ему гаечный ключ?😄
👍7
👉Stateful — отслеживает состояние соединений (в MikroTik этим занимается - connection tracking).
Можно разрешить сессии только в одну сторону, например:
- с компьютера админа можно ходить во все сети, но со всех сетей нельзя подключаться к компьютеру админа;
- пользователи могут выходить в интернет, но из интернета нельзя подключаться к компьютерам пользователей.

📍 Примеры Stateful для MikroTik:

- Firewall Filter / NAT / Mangle — используют connection tracking.
- Switch rules → redirect to CPU → Firewall — становятся stateful.
- VPN: SSTP, OpenVPN, WireGuard — stateful (есть установление и поддержание сессии).

💡Зачем это нужно знать? Бывает вы изучаете какой-нибудь новый инструмент (фаервол или что-то подобное). А в руководстве, статье, или другом источнике, говориться что этот инструмент Stateless, без объяснения того что это означает. Но вы то теперь знаете.
👍6
📌Stateless и Stateful - в компьютерных сетях.

Трафик в сети может быть Stateless (без установки соединения) или Stateful (с установленным соединением).

👉Stateless — не хранит состояния соединений.
Каждый пакет обрабатывается отдельно.
Если запретил в одну сторону — обратный трафик тоже не пройдёт.

📍 Примеры Stateless для MikroTik:

- Switch rules — фильтрация на уровне L2
- Route rules — политика маршрутизации
- Firewall Raw — фильтрация до connection tracking
- VPN: L2TP, GRE, IPIP — сами по себе stateless (зависят от нижнего уровня)
👍8
📌Настройка шрифтов и ClearType на RDP сервере

Поднял я как-то терминальный сервер Windows Server 2019 и тоже самое с Windows Server 2022. Там разместил 1С как RemoteApp приложение. Но пользователи стали жаловаться на плохие шрифты в 1С.

👉 Включаем сглаживание шрифтов

Для начала я разрешил сглаживание шрифтов в групповых политиках (которое до этого запрещал):

Конфигурация компьютера / Политики / Административные шаблоны / Компоненты Windows / Службы удалённых рабочих столов / Узел сеансов удалённых рабочих столов / Среда удалённых рабочих столов / Не разрешать сглаживание шрифтов: Отключена


Но этим шагом мы только разрешили использовать сглаживание шрифтов. А для того чтобы клиент использовал сжатие в ярлык remoteaap нужно добавить опцию:
enable font smoothing:i:1


Шрифты стали лучше, но недостаточно.
👍4
👉Включаем ClearType

Следующим шагом я настроил ClearType:

Панель управления / Шрифты / Настройка текста Clear Type / Включить "ClearType" и пройти мастер настройки


К сожалению второй шаг придётся проделать для каждого пользователя отдельно. Хотя для новых пользователей ClearType, в моём случае, оказался включенным.

👌После этого пользователи сказали что шрифты в 1С стали красивыми, к которым они привыкли.
👍5
📌Что такое DSCP

DSCP (Differentiated Services Code Point) — это поле в IP-заголовке (6 бит), с помощью которого помечают приоритет пакета в сети.

🔹 DSCP используется для управления качеством обслуживания (QoS) — чтобы важный трафик (например, голос, видео, управление) передавался быстрее и стабильнее, чем обычные данные.
👍7
🔹 Как работает:

1. Отправитель (компьютер, сервер, маршрутизатор) ставит DSCP-метку в IP-заголовке.
2. Коммутаторы и маршрутизаторы, поддерживающие QoS, читают эту метку.
3. В зависимости от значения DSCP пакет получает:
— приоритетную обработку в очередях;
— меньшую задержку;
— гарантированную полосу.

🔹Где используется:

— В корпоративных сетях — для приоритета VoIP и видеоконференций.
— В дата-центрах — для управления трафиком приложений.
— В сетях интернет-провайдеров — для классификации трафика абонентов.

🔹Примеры значений DSCP:

— 46 (Expedited Forwarding) - Голос, SIP, низкая задержка.
— 26 / 34 (AF31 / AF41) - Важные данные.
— 0 (CS0) - Обычный трафик (по умолчанию).

DSCP — это механизм маркировки пакетов для QoS, позволяющий сети различать важность трафика и обеспечивать нужное качество передачи.

❗️Важно помнить что некоторые коммутаторы могут обнулять или изменять метки DSCP:

— Неуправляемые - работают только на L2 и не трогают IP-заголовок;
— Управляемые:
—— Могут считывать DSCP-поле для приоритизации трафика.
——Могут обнулять или изменять DSCP-поле (при соответствующей настройке).
👍9
Команда find предназначена для поиска файлов по разным критериям. Критериями для поиска могут быть:
🔹имя файла, часть имени, или регулярное выражение;
🔹дата модификации файла;
🔹размер файла;
🔹тип файла;
🔹и другое.

Для поиска файла мы должны:
- указать каталог, с которого будем начинать поиск;
- указать критерии поиска.

👉Например, найдём файл в текущем каталоге с именем test.txt:
# find . -name test.txt
./test.txt


👉Одной из полезных опций является указание типа файла, который мы собираемся искать:
🔹-type f - обычный файл;
🔹-type d - каталог (директория).

# find /etc -type f -name pve
/etc/logrotate.d/pve

# find /etc -type d -name pve
/etc/pve
/etc/pve/nodes/pve
👍4
👉Еще одна очень полезная опция, но малоизвестная - -xdev. Эта опция заставляет пропускать точки монтирования. Это полезно, если вы хотите начать поиск от корня (/), но не хотите заходить в другие примонтированные файловые системы (например у вас в mnt примонтирован smb или nfs ресурс с огромным количеством файлов и вам нужно пропустить этот каталог).

# find / -xdev -name ssh      
/var/log/runit/ssh
/usr/share/doc/ssh
/usr/share/bash-completion/completions/ssh
/usr/share/runit/meta/ssh
/usr/bin/ssh
/usr/lib/apt/methods/ssh
/etc/default/ssh
/etc/init.d/ssh
/etc/sv/ssh
/etc/runit/runsvdir/default/ssh
/etc/ssh


👉Для того чтобы найти изменённые в течении текущего дня файлы используется опция -mtime -1. Или можете указать любое количество дней (например 10: -mtime -10).

# find /root -mtime -1
/root
/root/.cache/proxmox-backup
/root/.cache/proxmox-backup/repo-list
/root/test
/root/test/script.sh
/root/test/test_dir
/root/test/test_dir/info.txt
/root/test/test_dir/home_work.txt
/root/test/test_dir/my_script.sh
/root/test/secret.txt
/root/test/test.txt
/root/test/test.sh
/root/.bash_history


👉Можем уменьшить период изменения файлов и указывать его не в днях, а в минутах. Для этого используется опция -cmin -10 (файлы изменённые 10 минуту назад).

# find /root -cmin -10
/root/.cache/proxmox-backup
/root/.cache/proxmox-backup/repo-list
/root/.bash_history


👉Также, очень часто требуется найти файлы определённого размера. Для этого существует опция: -size 50M. Но часто ищут файлы в диапазоне размеров, например: -size +50M -size -100M (файлы больше 50 и меньше 100 MB).

# find / -xdev -size +60M -size -100M
/usr/share/kvm/edk2-aarch64-code.fd
/usr/share/kvm/edk2-arm-vars.fd
/usr/share/kvm/edk2-arm-code.fd


👉Команда find по умолчанию выводит найденные файлы на экран терминала. Но можно это действие переопределить:
🔹-print (выводит файлы на терминал, используется по умолчанию);
🔹-delete (удаляет найденные файлы);
🔹-ls (выводит подробную информацию о файле, такую как размер, права и т.п.);
🔹-printf (можем сами указать, какую информацию о файле нужно получить, например -printf '%s\t%p\n' - размер в байтах, табуляция, путь к файлу);

# find / -xdev -size +60M -size -100M -printf '%s byte - %p\n'
67108864 byte - /usr/share/kvm/edk2-aarch64-code.fd
67108864 byte - /usr/share/kvm/edk2-arm-vars.fd
67108864 byte - /usr/share/kvm/edk2-arm-code.fd


👉Кроме этого find умеет исключать каталоги из поиска. Для этого используется: -path /proc -prune -o .... Этим самым мы исключаем каталог и все его подкаталоги из поиска.

# find / -xdev -path /opt -prune -o -name test -print
/usr/share/javascript/mathjax/test
/usr/bin/test
/usr/lib/python3/dist-packages/systemd/test
/usr/lib/python3.11/test
/root/test


🔹Здесь мы исключаем все примонтированные каталоги (-xdev) - это желательно выполнять всегда, при поиске от корня.
🔹И исключаем из поиска каталог opt - -path /opt -prune -o ....

👉И самый сложный пример. Когда нам нужно исключить из поиска несколько каталогов. Здесь нужно комбинировать условия в скобках, и при этом экранировать скобки \( ... \), а затем указать -prune -o ....

# find / -xdev \( -path /proc -o -path /sys -o -path /dev -o -path /opt \) -prune -o -name test -print
/usr/share/javascript/mathjax/test
/usr/bin/test
/usr/lib/python3/dist-packages/systemd/test
/usr/lib/python3.11/test
/root/test

🔹Здесь -xdev - применяется ко всему выражению поиска.
🔹То что нужно исключить (левая часть) - \( -path /proc -o -path /sys -o -path /dev -o -path /opt \) -prune.
🔹Правая часть отделяется от левой с помощью - -o.
🔹То что нужно найти (правая часть) - -name test.
🔹Так как мы в левой части указали действие (-prune), то в правой части тоже нужно указать действие (-print).

Последний пример действительно сложный, но часто про это спрашивают (про исключения нескольких каталогов) на собеседованиях для позиций Linux администраторов или DevOps инженеров.
👍9
👉С помощью утилиты curl мы можем обращаться на специальные ресурсы, чтобы получить информацию о своём внешнем ip-адресе:

$ curl icanhazip.com
$ curl 2ip.ru
$ curl ifconfig.me
$ curl ident.me
$ curl eth0.me
$ curl ipinfo.io/ip


А с помощью последнего ресурса (ipinfo.io) можем получить ещё больше информации о своём или чужом адресе:

✅
$ curl ipinfo.io
{
# здесь будет информация о вашем ip адресе
}


✅
$ curl ipinfo.io/8.8.8.8
{
"ip": "8.8.8.8",
"hostname": "dns.google",
"city": "Mountain View",
"region": "California",
"country": "US",
"loc": "37.4056,-122.0775",
"org": "AS15169 Google LLC",
"postal": "94043",
"timezone": "America/Los_Angeles",
"readme": "https://ipinfo.io/missingauth",
"anycast": true
}
👍8
👉Из статьи вы узнаете что такое образ Docker и из чего он состоит. Как создавать свои образы с помощью файла Dockerfile.И как выкладывать собственные образы в репозиторий Docker Hub.
👉Статья поможет вам сэкономить ваше время если вы только начинаете изучать Docker.

📌Статья: https://sysadminium.ru/creating-docker-images/
👍2