Управление пользователями в Linux
В своих прошлых постах блога я уже затрагивал тему пользователей в операционной системе Linux. Например в теме о правах доступа в Linux я затрагивал вопросы принадлежности пользователя к группе, а так же то, что пользователи и группы имеют свои UID и GID. Так же поднималась тема о сбросе пароля пользователя root. Сегодня я бы хотел систематизировать знания о базе локальных пользователей в Linux, о том, как управлять пользователями и о файлах, отвечающих за управление пользователями.
Linux – это многопользовательская операционная система. Каждый пользователь в Linux принадлежит одной основной группе и одной или нескольким дополнительным группам. В Linux, как и в большинстве других операционных системах работа с пользователями заключается в наборе следующих манипуляций: добавление пользователя/группы, удаление пользователя/группы, модификация настроек пользователя/группы. Данные манипуляции производятся с помощью команд: useradd, groupadd, userdel, groupdel, usermod, groupmod, а так же passwd, gpasswd, id. Более подробно: Описание команд управления пользователями Linux. Существуют так же и графические средства администрирования пользователями, обычно они расположены в оболочке X в разделе Администрирование – Пользователи и группы.
Особенности управления пользователями в Linux
Пример добавления пользователя с помощью шелла:
user-add-server:~# groupadd test user-add-server:~# useradd -c "Test Test" -g test -m test user-add-server:~# passwd test Введите новый пароль UNIX: Повторите ввод нового пароля UNIX: passwd: пароль успешно обновлён user-add-server:~# id test uid=1001(test) gid=1001(test) группы=1001(test) user-add-server:~# ls -ld /home/test/ drwxr-xr-x 2 test test 4096 Дек 16 10:24 /home/test/ user-add-server:~#
В примере мы добавляем группу для нового пользователя (groupadd), далее создаем нового пользователя с полным именем Test Test, имеющего основную группу test и логин test, далее задаем пароль для пользователя test (passwd test) и проверяем параметры созданного пользователя (id и созданный каталог пользователя /home/test/). В листинге видно, что UID и GID – более 1000. Данная особенность является признаком обычного пользователя. Значения ниже (меньше) 1000 (а в некоторых дистрибутивах – меньше 500) указывают на то, что пользователь является системным пользователем.
В соответствии с соглашением, системные пользователи обычно имеют id меньше, чем 100, а пользователь root имеет id, равный 0. Автоматическая нумерация обычных пользователей начинается со значения UID_MIN, установленного в файле /etc/login.defs, это значение обычно установлено в 500 или 1000.
Помимо учетных записей обычных пользователей и учетной записи пользователя root, обычно в системе бывает несколько учетных записей специального назначения для демонов, таких как FTP, SSH, mail, news и т.д. Такие учетные записи часто управляют файлами, но к ним невозможно получить доступ путем обычной регистрации в системе. Поэтому обычно они имеют login shell, определенный как /sbin/nologin или /bin/false, чтобы попытки зарегистрироваться в системе терпели неудачу.
В некоторых системах, команда(ы) добавления пользователей имеют расширенный функционал. То есть, для примера, команда useradd в дистрибутивах Fedora и Red Hat по умолчанию, для нового пользователя создает новую группу и для отмены данной функции, необходимо использовать опцию -n. Для уточнения таких вопросов, необходимо обратиться к документации дистрибутива.
При удалении пользователя, его каталог не удаляется. В результате можно получить интересную ситуацию:
user-add-server:~# userdel test user-add-server:~# groupdel test user-add-server:~# ls -ld /home/test/ drwxr-xr-x 2 1001 1001 4096 Дек 16 10:24 /home/test/ user-add-server:~# groupadd test123 user-add-server:~# useradd -c "Test Test" -g test123 -m test123 user-add-server:~# ls -ldn /home/test* drwxr-xr-x 2 1001 1001 4096 Дек 16 14:30 /home/test drwxr-xr-x 2 1001 1001 4096 Дек 16 14:29 /home/test123 user-add-server:~# ls -ld /home/test* user-add-server:~# ls -ld /home/test* drwxr-xr-x 2 test123 test123 4096 Дек 16 10:24 /home/test drwxr-xr-x 2 test123 test123 4096 Дек 16 14:25 /home/test123 user-add-server:~# passwd test123 Введите новый пароль UNIX: Повторите ввод нового пароля UNIX: passwd: пароль успешно обновлён user-add-server:~# su -l test123 test123@user-add-server:~$ pwd /home/test123 test123@user-add-server:/home/mc-sim$ ls /home/ mc-sim test test123 test123@user-add-server:~$ cd /home/mc-sim/ test123@user-add-server:/home/mc-sim$ ls -la итого 24 drwxr-xr-x 2 mc-sim mc-sim 4096 Ноя 15 12:31 . drwxr-xr-x 6 root root 4096 Дек 16 14:25 .. -rw------- 1 mc-sim mc-sim 99 Ноя 15 13:45 .bash_history -rw-r--r-- 1 mc-sim mc-sim 220 Окт 1 17:42 .bash_logout -rw-r--r-- 1 mc-sim mc-sim 3116 Окт 1 17:42 .bashrc -rw-r--r-- 1 mc-sim mc-sim 675 Окт 1 17:42 .profile test123@user-add-server:/home/mc-sim$ rm /home/mc-sim/.bash_logout rm: удалить защищенный от записи обычный файл `/home/mc-sim/.bash_logout'? y rm: невозможно удалить `/home/mc-sim/.bash_logout': Отказано в доступе test123@user-add-server:/home/mc-sim$ rm /home/test/.bashrc test123@user-add-server:/home/mc-sim$
В приведенном примере мы удаляем пользователя и группу test, созданную ранее. При этом каталог данного пользователя остался не тронутым. Как видно из листинга, права у каталога остались для id 1001. Далее мы создаем нового пользователя и группу, но уже с другим именем – test123. Данному пользователю присваивается UID и GID – ранее существующего пользователя test. Посмотрев список каталогов, начинающиеся на /home/test* с ключом -n и без него, видим, что получилось – каталог пользователя test стал принадлежать пользователю test123, о чем нам говорят права доступа -rw-r–r– test123 test123. Входим в систему под пользователем test123 и для проверки прав доступа, в каталоге /home/test пробуем удалить файл, а так же пробуем удалить файл из каталога третьего пользователя – mc-sim. Данный пример хорошо иллюстрирует, что в Linux все привязано к идентификаторам.
Управление базами данных пользователей и групп в Linux
Основные файлы, содержащие информацию о пользователях и группах, — это четыре файла в каталоге /etc.
/etc/passwd
файл паролей, содержащий основную информацию о пользователях
/etc/shadow
файл теневых шифрованных паролей, содержащий зашифрованные пароли
/etc/group
файл групп, содержащий основную информацию о группах и принадлежащих этим группам пользователях
/etc/gshadow
файл теневых групп, содержащий шифрованные пароли групп
Данные файлы редактировать обычным текстовым редактором крайне не рекомендуется. Они (файлы), обновляются при выполнении вышеуказанных команд, при этом при изменении – блокируются и синхронизируются.
Если все же есть острая необходимость в редактировании указанный файлов, то при помощи команды vipw можно безопасно редактировать файл /etc/passwd, а при помощи команды vigr безопасно редактировать файл /etc/group. Эти команды заблокируют необходимые файлы на то время, пока при помощи редактора vi будут производиться изменения. Если вы вносите изменения в файл /etc/passwd, команда vipw подскажет, что необходимо проверить, не нужно ли обновить и файл /etc/shadow. Подобным образом, если вы обновляете файл /etc/group при помощи команды vigr, вы получите подсказку, что необходимо обновить и файл /etc/gshadow. Если необходимо удалить администраторов группы, необходимо использовать команду vigr, поскольку команда gpasswd позволяет только добавлять администраторов.
Обращаю внимание, что в современных системах, файлы passwd и group не хранят пароли в открытом виде. Это сделано из соображений безопасности. Сами файлы passwd и group должны быть доступными для чтения для всех, а зашифрованные пароли — недоступными для чтения для всех. Поэтому зашифрованные пароли хранятся в теневых файлах, и эти файлы доступны для чтения только пользователю root. Необходимый доступ для изменения аутентификационных данных обеспечивается при помощи suid-программы, которая имеет полномочия пользователя root, но может быть запущена любым пользователем.
Файл /etc/passwd
user-add-server:~# cat /etc/passwd root:x:0:0:root:/root:/bin/bash lp:x:7:7:lp:/var/spool/lpd:/bin/sh sshd:x:101:65534::/var/run/sshd:/usr/sbin/nologin test123:x:1001:1001:Test Test:/home/test123:/bin/sh
Файл /etc/passwd содержит одну строку для каждого пользователя системы. Каждая строка содержит семь полей, разделенных двоеточиями (:), описание полей на примере пользователя root:
поле | значение | описание |
Имя пользователя | root | имя, используемое для входа в систему (логин) |
Пароль | x | пароль пользователя (если зашифрован, используется символ – x) |
id пользователя (UID) | 0 | Идентификатор пользователя |
id группы (GID) | 0 | Идентификатор группы |
Комментарий | root | Необязательное поле, используемое для описания пользователя. Например, для указания полного имени. Это поле может содержать несколько разделенных запятыми записей. |
Домашний каталог | /root | Абсолютный путь для домашнего каталога пользователя. |
Командная оболочка | /bin/bash | Программа, которая автоматически запускается при входе пользователя в систему. Обычно это интерактивный shell, такой как /bin/bash или /bin/sh, но это может быть и другая программа, не обязательно интерактивный shell. |
Файл /etc/group
user-add-server:~# cat /etc/group root:x:0: lp:x:7: ssh:x:103: test123:x:1001:
Файл /etc/group содержит одну строку для каждой группы системы.Каждая строка содержит четыре поля, разделенных двоеточиями (:), описание на примере группы root:
поле | значение | описание |
Имя группы | root | Имя группы |
Пароль | x | пароль группы (если зашифрован, используется символ – x) |
id группы (GID) | 0 | идентификатор группы |
Члены группы | Разделенный запятыми список членов группы, за исключением тех членов, для которых это группа является основной. |
Файл /etc/shadow
user-add-server:~# cat /etc/shadow | grep test test123:$1$.ArJtddq$H399O2dO6aDa99UmDjJ7/1:14959:0:99999:7:::
Файл /etc/shadow должен быть доступен для чтения только для пользователя root. Пароли могут быть зашифрованы при помощи DES, но чаще для шифрования используется MD5. Описание полей файла:
поле | значение | описание |
имя пользователя | test123 | имя, используемое для входа в систему (логин) |
Зашифрованный пароль | $1$.ArJtddq$H399O2dO6aDa99UmDjJ7/1 | Пароль в зашифрованном виде |
количество дней | 14959 | количество дней с 1 января 1970, после которых производилось последнее изменение пароля |
количество дней | 0 | количество дней до смены пароля |
количество дней | 99999 | количество дней, после которых пользователь должен сменить пароль |
количество дней | 7 | количество дней, после которых пользователь получает предупреждение о необходимости смены пароля |
количество дней | пусто | количество дней, после истечения срока действия пароля, после которых учетная запись блокируется |
количество дней | пусто | количество дней, с 1 января 1970, до которых действует учетная запись |
количество дней | пусто | зарезервированное поле |
Файл /etc/gshadow
Print-server:~# cat /etc/gshadow root:*:: lp:*:: ssh:!:: test123:!::
Файл /etc/gshadow содержит информацию о группах, состоит из четырех полей для каждой записи:
поле | значение | описание |
Имя группы | test123 | Имя группы |
Пароль | ! | Поле используется для хранения зашифрованного пароля, если у группы имеется пароль. Если группа не имеет пароля, здесь можно увидеть ‘x’, ‘!’ или ‘!!’. |
Администраторы | пусто | Разделенный запятыми список администраторов группы. |
Члены группы | пусто | Разделенный запятыми список членов группы. |
Вот такая ситуация с пользователями в Linux.
Подведу маленький итог:
Пользователи в Linux управляются командами указанными тут. Информация о пользователях и группах храниться в четырех файлах /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow. Данные файлы не редактируются стандартным редактором, только специальными командами управления пользователями и группами (useradd, userdel, usermod, groupadd, groupdel, groupmod, passwd и т.д.) или специальными командами редактирования (vipw, vigr и т.д.). Формат содержимого файлов представляет собой несколько строк, каждая из которых соответствует одному пользователю или группе.
До новых постов!
С Уважением, Mc.Sim!
Другие материалы в категории основы Linux
- Текстовый редактор VIM, основы работы
- ddrescue или спасаем данные с HDD
- Резервное копирование файлов сайта по ssh
- Седьмой релиз Debian
- Использование ramdisk в Linux (ramdisk, ramfs, tmpfs) или препарирование рамдисков
- SNMP протокол (основы)
- Установка антивирусного сканера ClamAV на Debian
- HOWTO использование backports в Debian
- Конспект установки Debian на сервер
- SSH сервер на Debian
подскажите пожалуйста как оповестить пользователя о входе в систему другого пользователя?
Доброго времени, думаю, лучший вариант будет занести в .bashrc каждого пользователя команду вроде mail. Чтобы было более понятно, нужно почитать это, это, и это.
Спасибо Mc.Sim, как все просто =), а я писал скрипт и выдергивал из команды last все шо нужно…
Пожалуйста!
Приходите еще!
Скажите пожалуйста, можно ли назначить для пользователя, основной группу – www-data? Чем это может грозить?
Нужно это для FTP. Apache работает от юзера www-data, добавил новый Vhost (apache2-mpm-itk), нового юзера site2, сделал для него основной группу www-data [33]. Чтобы можно было по фтп (vsftpd) заливать файлы в папку где лежит второй сайт (права/владелец – site2:www-data). Указал при создании юзера /var/www/site как домашнюю папку и на нее же Vhost от Apache нацелил.
Я все правильно сделал? Можно так делать?
Или нужно обязательно делать отдельного юзера со своей группой (с gid выше 1000) и в нее добавлять юзера www-data или юзера www-data в группу этого юзера?
Я думаю, что достаточно было просто назначить на папку /var/www/site права 640 для site2:www-data и не добавлять в группу www-data.
Так же, я бы этому пользователю указал шелл /bin/false для большей безопасности.
Скажите пожалуйста, можно удалить пользователя по идентификатору…?
примерно так это делается: смотрите имя пользователя примерно так grep ID_user /etc/passwd, удаляете того, кто вам не нужен.
Можно одной строкой
userdel -r `grep UID /etc/passwd | awk '{print $1}'`