Автентифікація PAM Linux та інтеграція LDAP керівництво

Управління користувачами та групами в Linux: облікові записи, дозволи та автентифікація

Вступ

Управління користувачами та групами є фундаментальним для безпеки Linux та багатокористувацьких середовищ. Цей комплексний посібник охоплює створення облікових записів користувачів, управління групами, налаштування дозволів, доступ sudo та системи автентифікації, включаючи PAM, LDAP та Kerberos.

Ми розглянемо архітектуру автентифікації користувачів, дозволи файлів для співпраці, обмеження ресурсів та корпоративні рішення автентифікації. Кожен розділ включає практичні команди, приклади конфігурації та кращі практики для продакшн середовищ.

Серія Linux Administration

📚 Переглянути повний посібник Linux Administration - Опануйте всі 7 частин з нашим комплексним шляхом навчання.

Це Частина II нашого комплексного 7-частинного посібника з адміністрування Linux:

  1. ← Частина I: Файлова система та управління процесами
  2. Частина II: Аутентифікація користувачів та LDAP ← Ви тут
  3. Частина III: Фаєрвол UFW та мережі
  4. Частина IV: systemd та SSH Hardening
  5. Частина V: Поштовий сервер Postfix
  6. Частина VI: Віртуалізація QEMU KVM
  7. Частина VII: Сховище LVM та RAID

Архітектура системи користувачів Linux

Потік автентифікації користувача

   Authentication System   

   valid   

   invalid   

  User Login  

  PAM  

  Pluggable Auth  

  /etc/passwd  

  User database  

  /etc/shadow  

  Encrypted passwords  

  /etc/group  

  Group database  

  User Shell  

  bash, zsh  

  Access Denied  

Ключові файли:

  • /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

Створення облікових записів користувачів

Процес створення користувача

   Account Creation   

  adduser command  

  Assign UID/GID  

  Create home dir  

  /home/username  

  Copy skeleton  

  /etc/skel/*  

  Set password  

  Update files  

  /etc/passwd, shadow  

  User Ready  

Створення користувачів:

# 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

Управління групами

Архітектура груп

   Group Membership   

  User: john  

  Primary Group  

  john GID:1000  

  Supplementary  

  docker GID:999  

  Supplementary  

  sudo GID:27  

  File Permissions  

  Group access  

Управління групами:

# 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

Налаштування групової співпраці

Дозволи для спільного каталогу

   Developer Users   

   Permission Configuration   

  /shared/project  

  drwxrws---  

  Owner: root  

  Group: developers  

  SGID bit 2000  

  Inherit group  

  alice  

  bob  

  New files inherit  

  developers 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 System   

   allowed   

   denied   

  User: alice  

  sudo command  

  /etc/sudoers  

  Authentication  

  Execute as root  

  Permission Denied  

Надання доступу 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 System   

  Application  

  login, ssh, sudo  

  auth  

  Authentication  

  account  

  Account mgmt  

  password  

  Password update  

  session  

  Session setup  

  Backend  

  LDAP, Kerberos, Unix  

Конфігурація 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 System   

  Linux Client  

  NSS  

  Name Service Switch  

  PAM  

  Auth module  

  LDAP Client  

  ldap-utils  

  LDAP Server  

  Active Directory, OpenLDAP  

  User Database  

  cn, uid, groups  

Встановлення та налаштування 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 System   

   1. Request TGT   

   2. Return TGT   

   3. Request service ticket   

   4. Return service ticket   

   5. Access with ticket   

  Client  

  KDC  

  Key Distribution Center  

  AS  

  Authentication Server  

  TGS  

  Ticket Granting Server  

  Service  

  SSH, NFS, etc.  

Встановлення 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

Кращі практики для продакшн середовищ

  1. Управління обліковими записами:

    • Використовуйте сильні політики паролів (PAM pwquality)
    • Впроваджуйте закінчення терміну дії паролів (рекомендується 90 днів)
    • Швидко відключайте невикористовувані облікові записи
    • Використовуйте сервісні облікові записи з /sbin/nologin для демонів
  2. Управління дозволами:

    • Дотримуйтесь принципу найменших привілеїв
    • Використовуйте групи для командних дозволів, а не окремих користувачів
    • Встановлюйте SGID на спільних каталогах
    • Регулярно аудитуйте дозволи
  3. Доступ sudo:

    • Надавайте мінімальні необхідні права sudo
    • Використовуйте /etc/sudoers.d/ для організованих конфігурацій
    • Логуйте команди sudo (Defaults log_output)
    • Вимагайте паролі для чутливих операцій
  4. Автентифікація:

    • Використовуйте централізовану автентифікацію (LDAP/AD) для кількох серверів
    • Впроваджуйте MFA для привілейованих облікових записів
    • Використовуйте SSH ключі замість паролів
    • Увімкніть SELinux або AppArmor
  5. Моніторинг:

    • Відстежуйте спроби входу (/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 показує політику. Впроваджуйте регулярну ротацію паролів для безпеки.