Работа с пользователями

Данные о пользователях

  • ОС Linux идентифицирует пользователей с помощью UID (User ID).
  • Пользователь с UID 0 - это root, администратор (суперпользователь) системы.
  • Каждый пользователь состоит в какой-либо группе пользователей (primary group, main group).
  • Каждый пользователь может состоять в любом количестве дополнительных групп пользователей (secondary groups, supplementary groups).
  • ОС Linux идентифицируют группы пользователей с помощью GID (Group ID).

Команда id показывает UID, GID, и дополнительные группы пользователя.

Файлы, хранящие информацию о пользователях Linux:

  • /etc/passwd - сведения о пользователях

    • имя пользователя
    • пароль пользователя. В ранних версиях Linux и UNIX пароли хранились в незашифрованном виде
    • UID пользователя
    • GID основной группы пользователя
    • описание пользователя - опциональная строка с общей информацией о пользователе (ФИО, контактные данные и т.п.)
    • домашний каталог
    • оболочка

      • путь к оболочке (например /bin/bash)
      • несуществующий путь или /bin/false или /bin/nologin блокируют интерактивную работу пользователя. Эти значения используются для ограничения прав приложений.
  • /etc/group - сведения о группах пользователей, а также о том, в каких дополнительных группах состоит пользователь.

    • имя группы
    • пароль группы. В ранних версиях Linux и UNIX пароли хранились в незашифрованном виде
    • GID группы
    • члены группы
  • /etc/shadow - криптографические хеши паролей пользователей
  • /etc/gshadow - криптографические хеши паролей групп пользователей
  • /etc/skel - шаблон для создания домашнего каталога пользователя

Команды для управления пользователями

  • useradd - добавление пользователя
  • userdel - удаление пользователя
  • usermod - модификация пользователя
  • adduser - интерактивное добавление пользователя
  • passwd - смена пароля пользователя
  • chsh - изменение оболочки пользователя
  • groupadd - добавление группы
  • groupmod - изменение группы
  • groupdel - удаление группы
  • addgroup - интерактивное добавление группы.
  • gpasswd - смена пароль группы

Стандартная система прав доступа к файлам

Для назначения прав доступа к файлам служит программа chmod

Права:

  • Read - 4
  • Write - 2
  • eXecute - 1 (выполнение программы или вход в каталог)

Субъекты:

  • владелец файла (User)
  • группа файла (Group)
  • остальные (Other)

Примеры:

chmod 777 test

chmod 644 test — типичная маска для обычных файлов

chmod 664 test — типичная маска для обычных файлов

chmod 755 test — типичная маска для каталогов и исп.файлов

chmod 775 test — типичная маска для каталогов и исп.файлов

Модифицирующий синтаксис chmod:

  • Субъект
    • all (a)
    • user (u)
    • group (g)
    • other (o)
  • Действие
    • разрешить (+)
    • запретить (-)
    • назначить (=)
  • Право
    • read (r)
    • write (w)
    • execute (x) — разрешает запуск программы либо вход в каталог

Примеры:

chmod +x test_file

chmod o-x test_file

umask - 644, 755 — показывает / изменяет маску прав доступа для вновь создаваемых файлов

Специальные права доступа:

  • SUID (4) - при запуске программы она работает от владельца
  • SGID (2) - при запуске программы она работает от группы
  • Sticky (1) - внутри каталога удалить файл/каталог может только его владелец

Альтернативные системы ограничения прав доступа

ACL - Access Control List - списки доступа к файлам, обеспечивающие точную настройку прав доступа

Mandatory Access Control (MAC) — система мандатного управления доступом:

  • SELinux (RHEL, AlmaLinux, Oracle, Amazon Linux)
  • AppArmor (Ubuntu, SLES, Debian)
  • другие (Astra Linux Special Edition, МСВС, и др.)

Команды su и sudo

su — войти в систему от имени другого пользователя.

sudo — выполнить команду от имени суперпользователя (или другого пользователя).

Конфигурационный файл: /etc/sudoers и /etc/sudoers.d/*

visudo — вариант текстового редактора для файл sudoers, который проверяет файл на корректность перед записью.

  • sudo -l — запрос возможностей текущего пользователя
  • sudo -l -U — запрос возможностей определенного пользователя
  • sudo -i — залогинится под другим пользователем (=su)
  • sudo -i -u <пользователь> — залогинится под другим пользователем (=su)

Общий вид правил в sudoers:

USER PLACE=(RUNAS) COMMAND

USER PLACE=(RUNAS) NOPASSWD: COMMAND

где:

USER и RUNAS - имя пользователя, UID или USER_ALIAS

PLACE - имя хоста, имя домена, IP адрес, PLACE_ALIAS

COMMAND - исполняемый файл или COMMAND_ALIAS. Разрешается перечислить несколько команд через запятую

Команды:

  • whoami - определение имени текущего пользователя
  • id - определение сведений о пользователе
  • groups - перечень групп пользователя
  • chmod — изменяет права доступа к файлу
  • chown — изменяет владельца файла
  • chgrp — изменяет группу файла
  • chage - назначение времени устаревания пароля
  • chsh - смена оболочки пользователя путем выбор из файла /etc/shells
  • newgrp - залогинится в новую группу
  • login - начать сессию пользователя в системе
  • who / w / users - кто сейчас работает
  • last — история аутентификации пользователей
  • su - запустить оболочку от имени другого пользователя. Если текущий пользователь root, то пароль не запрашивается. В остальных случаях запрашивается пароль целевого пользователя.
  • sudo - выполнить одно действие от другого пользователя. Не установлен по-умолчанию в Debian, ArchLinux, CentOS, Fedora.

Дополнительные сведения

Хеш-функции позволяют поставить в соответствие каким-либо данным (ключ) значение фиксированной длины (хеш). По хешу невозможно однозначно определить ключ.

На практике хеш-функции используются для:

  • определения целостности данных
  • в цифровых подписях
  • при передаче данных
  • при хранении данных на ненадежном носителе
  • хеш-таблиц - специальных структурах данных, позволяющих упростить и ускорить доступа к данным в программном обеспечении
  • для создания функций формирования ключа

Широко известные хеш-функции:

  • MD5
  • RIPEMD-160
  • SHA-1
  • SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512)
  • SHA-3 (Keccak, SHA3-224, SHA3-256, SHA3-384, SHA3-512)
  • Whirlpool
  • BLAKE2
  • Blowfish

Функция формирования ключа (key derivation function, KDF) — это функция, формирующая один или несколько секретных ключей на основе секретного значения и случайного (псевдослучайного) значения.

Входным секретным значением может быть:

  • пароль
  • закрытый ключ асимметричного шифрования

Случайное (псевдослучайного) значение в функциях формирования ключа не является секретным и часто называется «соль». Использование соли позволяет предотвратить атаки с помощью rainbow-table.

Функции формирования ключа используются для: аутентификации пользователей формирования ключей шифрования симметричного шифрования (например AES)

Часто использующиеся функции формирования ключа:

  • bcrypt
  • PBKDF2
  • scrypt
  • argon2

Функции формирования ключа часто используют параметры позволяющие регулировать необходимые трудоемкость количество памяти степень параллелизма для их реализации. Это позволяет предотвратить атаки типа bruteforce.