- Вступ
- Серія Linux Administration
- Архітектура системи користувачів Linux
- Розуміння /etc/passwd
- Розуміння /etc/shadow
- Створення облікових записів користувачів
- Зміна облікових записів користувачів
- Видалення облікових записів користувачів
- Управління групами
- Налаштування групової співпраці
- Налаштування доступу sudo
- Обмеження ресурсів
- PAM (Pluggable Authentication Modules)
- Автентифікація LDAP
- Автентифікація Kerberos
- Кращі практики для продакшн середовищ
- Усунення типових проблем
- Висновок
- Часті запитання
Вступ
Управління користувачами та групами є фундаментальним для безпеки Linux та багатокористувацьких середовищ. Цей комплексний посібник охоплює створення облікових записів користувачів, управління групами, налаштування дозволів, доступ sudo та системи автентифікації, включаючи PAM, LDAP та Kerberos.
Ми розглянемо архітектуру автентифікації користувачів, дозволи файлів для співпраці, обмеження ресурсів та корпоративні рішення автентифікації. Кожен розділ включає практичні команди, приклади конфігурації та кращі практики для продакшн середовищ.
Серія Linux Administration
📚 Переглянути повний посібник Linux Administration - Опануйте всі 7 частин з нашим комплексним шляхом навчання.
Це Частина II нашого комплексного 7-частинного посібника з адміністрування Linux:
- ← Частина I: Файлова система та управління процесами
- Частина II: Аутентифікація користувачів та LDAP ← Ви тут
- Частина III: Фаєрвол UFW та мережі →
- Частина IV: systemd та SSH Hardening
- Частина V: Поштовий сервер Postfix
- Частина VI: Віртуалізація QEMU KVM
- Частина VII: Сховище LVM та RAID
Архітектура системи користувачів Linux
Потік автентифікації користувача
Ключові файли:
/etc/passwd- інформація про облікові записи користувачів (публічна) (документація passwd: https://man7.org/linux/man-pages/man5/passwd.5.html)/etc/shadow- зашифровані паролі (тільки root) (документація shadow: https://man7.org/linux/man-pages/man5/shadow.5.html)/etc/group- інформація про групи/etc/gshadow- зашифровані паролі груп (рідко використовується)
Розуміння /etc/passwd
Структура файлу паролів
Кожен рядок у /etc/passwd містить 7 полів, розділених двокрапкою:
username:x:UID:GID:comment:home_directory:shell
Приклад:
john:x:1000:1000:John Doe,Room 123,555-1234:/home/john:/bin/bash
Розбір полів:
| Поле | Приклад | Опис |
|---|---|---|
| Ім'я користувача | john |
Ім'я для входу (1-32 символи, рекомендується малі літери) |
| Пароль | x |
x = пароль у /etc/shadow, * = відключено |
| UID | 1000 |
ID користувача (0 = root, 1-999 = системні, 1000+ = користувачі) |
| GID | 1000 |
ID первинної групи |
| Коментар (GECOS) | John Doe,Room 123,555-1234 |
Повне ім'я, офіс, телефон тощо |
| Домашній каталог | /home/john |
Домашній каталог користувача |
| Оболонка | /bin/bash |
Оболонка входу (/sbin/nologin = без входу) |
Перегляд файлу passwd:
# Show all users
cat /etc/passwd
# Show specific user
grep john /etc/passwd
# Show only usernames
cut -d: -f1 /etc/passwd
# Show users with UID >= 1000 (regular users)
awk -F: '$3 >= 1000' /etc/passwd
Розуміння /etc/shadow
Структура файлу shadow
Файл /etc/shadow зберігає зашифровані паролі з підвищеною безпекою:
username:$6$salt$hash:lastchange:min:max:warn:inactive:expire:
Приклад:
john:$6$rounds=5000$xyz$abc123...:19000:0:99999:7:14::
Розбір полів:
| Поле | Опис |
|---|---|
| Ім'я користувача | Ім'я для входу |
| Пароль | Зашифрований ($6$ = SHA-512, $5$ = SHA-256, $1$ = MD5) |
| Остання зміна | Дні з 1970-01-01, коли пароль був змінений останній раз |
| Мін. днів | Мінімальна кількість днів до можливості зміни пароля |
| Макс. днів | Максимальна кількість днів до обов'язкової зміни пароля |
| Днів попередження | Дні до закінчення терміну для попередження користувача |
| Неактивний | Дні після закінчення терміну до відключення облікового запису |
| Закінчення | Дата закінчення облікового запису (дні з 1970-01-01) |
Команди старіння пароля:
# View password aging info
chage -l john
# Set password expiry (90 days)
chage -M 90 john
# Force password change on next login
chage -d 0 john
# Set account expiration date
chage -E 2025-12-31 john
# Disable password expiration
chage -M 99999 john
Створення облікових записів користувачів
Процес створення користувача
Створення користувачів:
# Interactive user creation (Debian/Ubuntu)
sudo adduser john
# Low-level user creation (all distros)
sudo useradd -m -s /bin/bash -c "John Doe" john
# useradd options:
# -m: create home directory
# -s: set shell
# -c: comment/full name
# -d: specify home directory
# -g: primary group
# -G: supplementary groups
# -u: specify UID
# -e: expiration date
# Create system user (no home, no login)
sudo useradd -r -s /sbin/nologin nginx
# Create user with specific UID and groups
sudo useradd -u 2000 -g developers -G docker,sudo -m alice
Налаштування за замовчуванням:
# View default settings
cat /etc/default/useradd
# Modify defaults
sudo useradd -D -s /bin/zsh # change default shell
sudo useradd -D -e 2025-12-31 # set default expiration
Зміна облікових записів користувачів
Команди зміни користувача
# Change username
sudo usermod -l newname oldname
# Change home directory (and move files)
sudo usermod -d /home/newhome -m john
# Change default shell
sudo usermod -s /bin/zsh john
# OR
sudo chsh -s /bin/zsh john
# Lock account (disable login)
sudo usermod -L john
sudo passwd -l john
# Unlock account
sudo usermod -U john
sudo passwd -u john
# Change user comment/GECOS info
sudo usermod -c "John Doe, DevOps Engineer" john
# OR
sudo chfn john
# Add user to supplementary groups
sudo usermod -aG docker,sudo john
# Remove user from group
sudo gpasswd -d john docker
# Set account expiration
sudo usermod -e 2025-12-31 john
# Disable account expiration
sudo usermod -e "" john
Видалення облікових записів користувачів
# Delete user (keep home directory)
sudo deluser john
# Delete user and home directory
sudo deluser --remove-home john
# Delete user, home, and all files owned by user
sudo deluser --remove-all-files john
# Low-level deletion
sudo userdel john # keep home
sudo userdel -r john # remove home
sudo userdel -rf john # force remove
# Find and remove orphaned files
sudo find / -user 1000 -exec rm -rf {} \; # if UID was 1000
Управління групами
Архітектура груп
Управління групами:
# Create group
sudo addgroup developers
sudo groupadd developers
# Create group with specific GID
sudo groupadd -g 3000 developers
# Add user to group
sudo adduser john developers # Debian/Ubuntu
sudo usermod -aG developers john # All distros
# Remove user from group
sudo gpasswd -d john developers
# Change group name
sudo groupmod -n newname oldname
# Change group GID
sudo groupmod -g 3500 developers
# Delete group
sudo delgroup developers
sudo groupdel developers
# View user's groups
groups john
id john
# View group members
getent group developers
grep developers /etc/group
Налаштування групової співпраці
Дозволи для спільного каталогу
Налаштування спільних каталогів:
# Create shared directory
sudo mkdir /shared/project
# Set group ownership
sudo chgrp developers /shared/project
# Set permissions: owner rwx, group rwx, others none
sudo chmod 770 /shared/project
# Set SGID bit (new files inherit group)
sudo chmod g+s /shared/project
# Final permissions: drwxrws---
# Verify SGID is set (s in group execute position)
ls -ld /shared/project
# Alternative: use ACLs for more granular control
sudo setfacl -m g:developers:rwx /shared/project
sudo setfacl -d -m g:developers:rwx /shared/project # default for new files
Пояснення SGID (Set Group ID):
- При встановленні на каталозі: нові файли/каталоги успадковують групу каталогу
- Представлений як
sу позиції виконання групи:drwxrws--- - Числове значення:
2000(напр.,chmod 2770)
Налаштування доступу sudo
Архітектура sudo
Надання доступу sudo:
# Method 1: Add user to sudo group (Debian/Ubuntu)
sudo usermod -aG sudo alice
# Method 2: Add user to wheel group (RHEL/CentOS)
sudo usermod -aG wheel alice
# Method 3: Edit sudoers file (use visudo!) (документація sudo: https://www.sudo.ws/docs/man/sudoers.man/)
sudo visudo
# Grant full sudo access to user
alice ALL=(ALL:ALL) ALL
# Grant sudo without password
alice ALL=(ALL:ALL) NOPASSWD:ALL
# Grant specific commands only
alice ALL=(ALL) /usr/bin/systemctl, /usr/bin/apt
# Grant to group
%developers ALL=(ALL:ALL) ALL
# Allow user to run commands as specific user
alice ALL=(www-data) /usr/bin/php
# Set sudo timeout (default 15 min)
Defaults timestamp_timeout=30
# Require password for every sudo command
Defaults timestamp_timeout=0
Файли конфігурації sudo:
# Main sudo config
/etc/sudoers
# Drop-in configs (recommended)
/etc/sudoers.d/
# Create custom sudoers file
sudo visudo -f /etc/sudoers.d/developers
# Example /etc/sudoers.d/developers:
%developers ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
%developers ALL=(ALL) /usr/bin/docker
Обмеження ресурсів
Налаштування ресурсів користувача
# View current limits
ulimit -a
# View limits for specific user
sudo -u john bash -c 'ulimit -a'
# Set limits in /etc/security/limits.conf
sudo vim /etc/security/limits.conf
# Examples:
alice soft nofile 4096 # soft limit: max open files
alice hard nofile 8192 # hard limit: max open files
@developers soft nproc 100 # max processes for developers group
@developers hard nproc 200
* soft core 0 # disable core dumps for all users
* hard memlock unlimited # unlimited locked memory
# Limit types:
# core - core file size
# data - max data size
# fsize - max file size
# memlock - max locked memory
# nofile - max open files
# nproc - max processes
# cpu - max CPU time (minutes)
# as - address space (virtual memory)
Моніторинг ресурсів користувача:
# Show processes for user
ps -u alice
# Show resource usage
top -u alice
# Show open files
lsof -u alice
# Count open files
lsof -u alice | wc -l
PAM (Pluggable Authentication Modules)
Архітектура PAM
Конфігурація PAM:
# PAM config directory
ls /etc/pam.d/
# Common PAM configs (документація PAM: http://www.linux-pam.org/Linux-PAM-html/Linux-PAM_SAG.html)
/etc/pam.d/common-auth # authentication
/etc/pam.d/common-account # account restrictions
/etc/pam.d/common-password # password policies
/etc/pam.d/common-session # session setup
# Service-specific configs
/etc/pam.d/login
/etc/pam.d/sshd
/etc/pam.d/sudo
# Example /etc/pam.d/sshd:
auth required pam_unix.so
auth required pam_env.so
account required pam_unix.so
password required pam_unix.so
session required pam_unix.so
session optional pam_motd.so
Автентифікація LDAP
Архітектура інтеграції LDAP
Встановлення та налаштування LDAP:
# Install LDAP client packages (документація OpenLDAP: https://www.openldap.org/doc/admin24/)
sudo apt install ldap-utils libpam-ldap libnss-ldap nscd
# Configure LDAP authentication
sudo dpkg-reconfigure ldap-auth-config
# Configuration prompts:
# - LDAP server URI: ldap://ldap.example.com
# - Distinguished name: dc=example,dc=com
# - LDAP version: 3
# - Admin account: cn=admin,dc=example,dc=com
# Edit NSS configuration
sudo vim /etc/nsswitch.conf
# Add ldap to these lines:
passwd: files systemd ldap
group: files systemd ldap
shadow: files ldap
# Test LDAP connection
ldapsearch -x -H ldap://ldap.example.com -b dc=example,dc=com
# View LDAP users
getent passwd
getent group
# Clear NSCD cache after changes
sudo nscd -i passwd
sudo nscd -i group
Конфігурація клієнта LDAP:
# /etc/ldap/ldap.conf
BASE dc=example,dc=com
URI ldap://ldap.example.com
TLS_CACERT /etc/ssl/certs/ca-certificates.crt
Автентифікація Kerberos
Архітектура Kerberos
Встановлення Kerberos:
# Install Kerberos client (документація Kerberos: https://web.mit.edu/kerberos/krb5-latest/doc/)
sudo apt install krb5-user libpam-krb5
# Install Kerberos server (KDC)
sudo apt install krb5-kdc krb5-admin-server
# Configure realm
sudo vim /etc/krb5.conf
# Example krb5.conf:
[libdefaults]
default_realm = EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = false
[realms]
EXAMPLE.COM = {
kdc = kdc.example.com
admin_server = kdc.example.com
}
[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM
Використання Kerberos:
# Obtain ticket-granting ticket (TGT)
kinit alice@EXAMPLE.COM
# List current tickets
klist
# Renew ticket
kinit -R
# Destroy tickets (logout)
kdestroy
# SSH with Kerberos
ssh -K alice@server.example.com
Кращі практики для продакшн середовищ
-
Управління обліковими записами:
- Використовуйте сильні політики паролів (PAM pwquality)
- Впроваджуйте закінчення терміну дії паролів (рекомендується 90 днів)
- Швидко відключайте невикористовувані облікові записи
- Використовуйте сервісні облікові записи з
/sbin/nologinдля демонів
-
Управління дозволами:
- Дотримуйтесь принципу найменших привілеїв
- Використовуйте групи для командних дозволів, а не окремих користувачів
- Встановлюйте SGID на спільних каталогах
- Регулярно аудитуйте дозволи
-
Доступ sudo:
- Надавайте мінімальні необхідні права sudo
- Використовуйте
/etc/sudoers.d/для організованих конфігурацій - Логуйте команди sudo (
Defaults log_output) - Вимагайте паролі для чутливих операцій
-
Автентифікація:
- Використовуйте централізовану автентифікацію (LDAP/AD) для кількох серверів
- Впроваджуйте MFA для привілейованих облікових записів
- Використовуйте SSH ключі замість паролів
- Увімкніть SELinux або AppArmor
-
Моніторинг:
- Відстежуйте спроби входу (
/var/log/auth.log) - Моніторте використання sudo
- Налаштуйте сповіщення про невдалі спроби автентифікації
- Регулярно проводьте аудит активності користувачів
- Відстежуйте спроби входу (
Усунення типових проблем
Користувач не може увійти:
# Check account status
sudo passwd -S alice
sudo chage -l alice
# Check shell exists
grep alice /etc/passwd
ls -l /bin/bash
# Check home directory
ls -ld /home/alice
# Unlock if locked
sudo passwd -u alice
sudo usermod -U alice
Відмовлено у доступі до спільного каталогу:
# Check user groups
groups alice
# Check directory permissions
ls -ld /shared/project
# Check if SGID is set
stat /shared/project | grep Access
# Add user to group
sudo usermod -aG developers alice
# User must logout/login for group change
Sudo не працює:
# Check sudo group membership
groups alice
# Verify sudoers syntax
sudo visudo -c
# Check sudo logs
sudo cat /var/log/auth.log | grep sudo
Висновок
Управління користувачами та групами в Linux охоплює створення облікових записів, налаштування дозволів, доступ sudo та корпоративні системи автентифікації. Розуміння файлів passwd/shadow, дозволів груп, біт SGID та централізованої автентифікації з LDAP та Kerberos є важливим для безпечних багатокористувацьких середовищ.
Обирайте відповідні методи автентифікації: локальні облікові записи для малих систем, LDAP для централізованого управління та Kerberos для корпоративного SSO. Впроваджуйте найменші привілеї, моніторте доступ та підтримуйте безпеку через регулярні аудити та політики паролів.
Часті запитання
П: Яка різниця між /etc/passwd та /etc/shadow?
/etc/passwd зберігає інформацію про облікові записи користувачів (ім'я, UID, GID, домашня директорія, shell) і доступний для читання всім. /etc/shadow зберігає захешовані паролі, правила старіння паролів та доступний тільки root. Розділення покращує безпеку, тримаючи хеші паролів захищеними. Використовуйте passwd для зміни паролів; ніколи не редагуйте файли безпосередньо.
П: Як працюють дозволи груп у Linux?
Групи надають спільний доступ кільком користувачам. Основна група (у /etc/passwd) є групою за замовчуванням для створення файлів. Додаткові групи (у /etc/group) надають додаткові дозволи. Користувачі можуть належати до кількох груп; newgrp переключає поточну групу. Групові дозволи файлів застосовуються до всіх членів. Використовуйте groups для перегляду членства.
П: Що таке sudo та як його налаштувати?
sudo дозволяє користувачам виконувати команди з привілеями іншого користувача (зазвичай root) без обміну паролями. Налаштовується через /etc/sudoers за допомогою visudo. Надайте повний доступ за допомогою user ALL=(ALL:ALL) ALL або конкретні команди user ALL=/usr/bin/systemctl. Використовуйте групу %sudo для групового доступу. Логується в /var/log/auth.log для аудиту. Обов'язково використовуйте visudo для перевірки синтаксису.
П: Як працює автентифікація LDAP у Linux?
LDAP надає централізоване управління користувачами для кількох систем. Налаштуйте клієнтів Linux з sssd або nslcd для запиту облікових записів користувачів з LDAP-сервера. nsswitch.conf визначає порядок пошуку (files ldap). PAM обробляє автентифікацію проти LDAP. Користувачі входять на будь-якого клієнта з одними обліковими даними. Централізує керування користувачами, групами та паролями.
П: Що таке SUID, SGID та sticky bit?
SUID (Set User ID, 4xxx) виконує файли як власник (passwd потребує SUID root). SGID (Set Group ID, 2xxx) виконує як група або успадковує групу директорії. Sticky bit (1xxx) на директоріях дозволяє тільки власникам видаляти файли (/tmp використовує 1777). Встановлюйте за допомогою chmod: chmod u+s file (SUID), chmod g+s dir (SGID), chmod +t dir (sticky).
П: Як працює автентифікація Kerberos?
Kerberos забезпечує автентифікацію SSO за допомогою квитків часу. Користувачі отримують Ticket Granting Ticket (TGT) від KDC при вході. TGT обмінюється на сервісні квитки для доступу до ресурсів без повторного введення паролів. Квитки закінчуються (зазвичай 10 годин). Використовує kinit для отримання квитків, klist для перегляду. Вимагає синхронізації часу; NTP критичний.
П: Як керувати паролями користувачів з passwd та chage?
passwd змінює паролі користувачів: passwd username (root може змінювати будь-який, користувачі свій власний). passwd -l блокує облікові записи, -u розблоковує. chage керує старінням паролів: chage -M 90 user встановлює максимальний вік 90 днів, -E 2024-12-31 встановлює термін дії облікового запису. chage -l показує політику. Впроваджуйте регулярну ротацію паролів для безпеки.