Управление пользователями в Linux

Декабрь 16th, 2010 Рубрики: Linux, основы Linux

добавление, удаление, просмотр пользователей в 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!




Теги: , , , ,

8 комментариев к “Управление пользователями в Linux”

  1. Май 3rd, 2011 at 01:25
    1

    подскажите пожалуйста как оповестить пользователя о входе в систему другого пользователя?

    • Май 4th, 2011 at 15:56
      2

      Доброго времени, думаю, лучший вариант будет занести в .bashrc каждого пользователя команду вроде mail. Чтобы было более понятно, нужно почитать это, это, и это.

  2. Май 5th, 2011 at 02:34
    3

    Спасибо Mc.Sim, как все просто =), а я писал скрипт и выдергивал из команды last все шо нужно…

    • Май 5th, 2011 at 09:51
      4

      Пожалуйста!
      Приходите еще!

  3. JustSoul
    Март 24th, 2013 at 03:22
    5

    Скажите пожалуйста, можно ли назначить для пользователя, основной группу — 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 в группу этого юзера?

    • Март 24th, 2013 at 20:17
      6

      Я думаю, что достаточно было просто назначить на папку /var/www/site права 640 для site2:www-data и не добавлять в группу www-data.
      Так же, я бы этому пользователю указал шелл /bin/false для большей безопасности.

  4. ruslan
    Апрель 23rd, 2016 at 19:18
    7

    Скажите пожалуйста, можно удалить пользователя по идентификатору…?

    • Август 4th, 2016 at 21:33
      8

      примерно так это делается: смотрите имя пользователя примерно так grep ID_user /etc/passwd, удаляете того, кто вам не нужен.
      Можно одной строкой
      userdel -r `grep UID /etc/passwd | awk '{print $1}'`

Написать комментарий