Как добавить и удалить новых пользователей в CentOS

Введение

Когда вы устанавливаете свежую версию ОС CentOS или любой другой Linux, то вам изначально доступен только один пользователь с именем root. root - это суперпользователь, который имеет полный доступ ко всем параметрами и конфигурациям ОС. Использовать учетную запись root рекомендуется
только в особых случаях, т.к. это способствует случайному совершению деструктивных и необратимых ошибок, исправить которые будет крайне сложно. Чтобы этого избежать рекомендуется создать на сервере как минимум еще одного пользователя и наделить его правами root, а использовать права root лишь тогда когда это потребуется при помощи команды - sudo.

Создание новых учетных записей также потребуется когда к серверу необходимо предоставить доступ другим лицам.

Как создать нового пользователя

Чтобы быстро добавить нового пользователя с логином, например username, выполните следующую команду.

sudo adduser username

При создании логина пользователя в CentOS можно использовать не более 32 знаков (a-z,A-Z,0-9,_,-). Имя логина не может начинаться с цифры. Хорошей практикой принято считать использование не более 8 символов, это позволит добиться большей совместимости со старыми программами, которые не принимают логины пользователей с количеством символов больше 8.

При создании пользователя создается также домашняя директория и отдельная группа пользователей, которые будут названы по имени пользователя.

Команда adduser представляет собой perl-скрипт, позволяющий создавать пользователей в более удобной форме. Аналогом данной команды является - useradduseradd является более низкоуровневой по отношению к системе, а также уступает команде adduser в некоторых возможностях.

Как создать пароль к учетной записи.

Чтобы создать зашифрованный пароль используйте команду passwd, а в качестве аргумента передайте имя пользователя для которого создается пароль.

sudo passwd username

Если вдруг пользователь забыл свой пароль, то этой же командой можно установить новый пароль, а старый пароль будет сброшен.

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

sudo chfn username

При создании новой учетной записи все необходимые параметры можно указать в одной команде. Допустим мы хотим создать пользователя, у которого будут указаны следующие параметры:

  • Логин: johndoe
  • Имя пользователя: John Doe
  • Имя домашней директории: /home/Johnny
  • Пароль: klsKWR23 (пароль необходимо передавать в зашифрованном виде)
  • Группа: wheel (группа пользователей с правами root, в Ubuntu эта группа называется sudo)

В этом случае создание учетной записи будет выглядеть так.

adduser johndoe -c "John Doe" -d /home/Johnny -G wheel -p "$(python -c 'import crypt; print(crypt.crypt("klsKWR23", crypt.mksalt(crypt.METHOD_SHA512)))')"

Чтобы не усложнять себе жизнь самостоятельным шифрованием пароля, лучше его создать отдельно с помощью команды passwd.

Как создать множество новых пользователей из списка

В linux можно создавать сразу несколько пользователей за раз с помощью команды newusers.  Для этого  вам понадобится список пользователей в текстовом файле. Формат списка должен совпадать с форматом записи файла /etc/passwd (подробнее о нем далее в статье). Единственное отличие это указание реального пароля во втором параметре. Учтите, что команда newusers не создает в домашнем каталоге стандартные файлы для всех пользователей, определенные в каталоге /etc/skel.

Для примера возьмем следующий список пользователей (students.txt), которых необходимо добавить в систему.

janedoe:DSsdf34l:3000:3000:Jane Doe,Southern Office,777-777,676-676:/home/janedoe:/bin/bash
johndoe:rTH421lp:3001:3001:John Doe,Eastern Office,888-888,878-878:/home/johndoe:/bin/bash

Теперь создадим пользователей из списка.

newusers students.txt

Как изменить информацию  о пользователе

Для редактирования данных об учетной записи используется команда usermod. Посмотрим какие данные можно изменить с помощью usermod.

Изменение полного имени.

usermod -c "New Full Name" username

Изменение логина. Имя директории и остальные данные не изменятся.

usermod -l newusername oldusername

Изменение домашней директории.

usermod -d /home/newdirectoryname username

С остальными возможностями команды usermod можно ознакомится в мануале команды.

Как заблокировать учетную запись

Блокировка учетной записи не позволит пользователю зайти в свою учетную запись. В файле /etc/passwd в поле пароля появиться знак !!, который символизирует о блокировки пароля.

passwd -l username

Также важно изменить оболочку пользователя на /sbin/nologin в ней указано сообщение о недоступности учетной записи.

usermod -s /sbin/nologin username

[root@centos ~]# passwd -l johndoe
Locking password for user johndoe.
passwd: Success
[root@centos ~]# usermod -s /sbin/nologin johndoe
[root@centos ~]# su -l johndoe
Last login: Sat May 27 21:25:29 MSK 2017 on :4
Last failed login: Thu Jun 21 19:51:12 MSK 2018 from :0 on :0
There were 6 failed login attempts since the last successful login.
This account is currently not available.

Для разблокировки воспользуйтесь следующей командой.

passwd -u username

Также верните прежнюю оболочку.

usermod -s /bin/bash username

[root@centos ~]# passwd -u johndoe
Unlocking password for user johndoe.
passwd: Success
[root@centos ~]# usermod -s /bin/bash johndoe
[root@centos ~]# su -l johndoe
Last login: Tue Jun 26 23:03:02 MSK 2018 on pts/0
[johndoe@centos ~]

Как удалить пользователей

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

Для полноценного удаления пользователя желательно выполнить все представленные ниже шаги.

#Шаг 1: Удаление прав пользователя

Убедитесь что в файле /etc/sudoers у удаленного пользователя не осталось записей о правах.

Например если удаленный пользователь имел права root, то найдите и удалите запись:

username ALL=(ALL) ALL

#Шаг 2: Найти и удалить все процессы пользователя

Узнаем идентификаторы процессов, которые были запущены пользователем.

pgrep -u username

[root@centos ~]# pgrep -u johndoe
3973
4518

Узнаем название запущенных процессов по их идентификаторам.

ps -f --pid $(pgrep -u username)

[root@centos ~]# ps -f --pid $(pgrep -u johndoe)
johndoe 3973 8 22:13 ? Sl 0:01 /usr/lib64/firefox/plugin-container
johndoe 4518 1 1 22:13 ? Dl 0:00 /usr/bin/gedit --gapplication-service

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

killall -9 -u username

Если у вас не оказалось команды killall, то установите пакет psmisc с помощью yum.
yum install psmisc

#Шаг 3: Сохранение файлов пользователя (back up)

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

tar jcvf /user-backups/username-homedir-backup.tar.bz2 /home/username

[root@centos ~]# tar jcvf /user-backups/johndoe-homedir-backup.tar.bz2 /home/johndoe
tar: Removing leading `/' from member names
/home/johndoe/
/home/johndoe/.bash_logout
/home/johndoe/.bash_profile
/home/johndoe/.bashrc
/home/johndoe/.mozilla/
/home/johndoe/.mozilla/extensions/
/home/johndoe/.mozilla/plugins/
/home/johndoe/.cache/
[root@centos ~]# ls /user-backups/
johndoe-homedir-backup.tar.bz2

#Шаг 4: Удаление пользователя и его домашнего каталога

Чтобы удалить учетную запись пользователя достаточно выполнить команду.

userdel username

Чтобы удалить еще и домашний каталог пользователя нужно добавить флаг -r.

userdel -r username

Список пользователей - /etc/passwd

Список всех созданных пользователей хранится в текстовом файле - /etc/passwd

cat /etc/passwd

Открыть список пользователей можно также следующей командой.

getent passwd

Формат данных в файле /etc/passwd выглядит следующим образом.

Формат записи файла - /etc/passwd

  1. Логин пользователя: используется для входа в учетную запись. Длина логина не должна превышать 32 символа.
  2. Пароль: если вместо пароля стоит символ "x", то это означает, что пароль зашифрован и хранится в файле /etc/shadow. Сам хеш пароля создается при создании пароля с помощью команды passwd
  3. Идентификатор пользователя (UID): при создании нового пользователя ему присваивается идентификатор - 32 битовое целое число (UID). Для пользователя root всегда используется идентификатор со значением 0. Идентификаторы в пределах 1-9 зарезервированы для предопределенных аккаунтов. UID в пределах 100-999 зарезервированы для прочих системных аккаунтов.
  4. Идентификатор основной группы (GID): - 32 битовое целое число. Учетная может принадлежать одной основной группе. Доступные группы и пользователей, которые к ним причислены можно увидеть в файле /etc/group.
  5. Контактная информация: добавляется с помощью команды chfn.
    5.1 Полное имя пользователя
    5.2 Рабочий адрес
    5.3 Рабочий номер телефона
    5.4 Домашний номер телефона
  6. Домашняя директория пользователя: полный путь директории в которую попадет пользователь после входа в учетную запись. Если директория не будет указана, то по умолчанию домашней директорией становится корень - /.
  7. Командная оболочка: полный путь к файлу командной оболочки. Изменить оболочку можно с помощью команды chsh.

Данные о паролях пользователей - /etc/shadow

В файле /etc/shadow хранятся пароли пользователей в зашифрованном виде, а также дополнительные параметры, отвечающие за безопасность учетной записи пользователя.

Формат файла /etc/shadow выглядит следующим образом.

  1. Имя пользователя (логин)
  2. Пароль в зашифрованном виде: если стоит !!, то пароль не был создан. Формат пароля - $id$salt$hash. $id показывает каким методом был зашифрован пароль:
    $1 - MD5.
    $2a - Blowfish.
    $2y - Blowfish.
    $5 - SHA-256.
    $6 - SHA-512 (наиболее предпочтительный).
  3. Количество прошедших дней (начиная с 01.01.1970) после последнего изменения пароля.
  4. Количество дней, до смены пароля (0 означает, что менять пароль можно в любой день).
  5. Срок использования пароля в днях (число дней до следующей смены пароля)
  6. Количество дней, в течении которых пользователь будет получать уведомления о смене пароля.
  7. Число дней после окончания срока действия пароля, когда пользователь еще может войти в свою учетную запись. Если пароль не сменить, после данного срока, то аккаунт будет заблокирован.
  8. Количество дней (начиная с 01.01.1970), после которых пароль будет заблокирован.
  9. Зарезервировано для использования в будущем.

Чтобы перевести число прошедших дней от 01.01.1970 (например 17701) в обычную дату (19.06.2018) воспользуйтесь командой.

date --date=@$((17701*86400))

Группы пользователей

В Linux нескольких пользователей можно объединять в группы. Чаще всего группы используются для наделения членов группы определенными правами и организации совместного доступа к файлам.

По умолчанию при создании нового пользователя создается новая группа с таким же именем, что и у пользователя. Так сделано потому что права на запись, чтение, выполнение и т.п. привязываются не к пользователю, а к группе в которой он состоит.

Любой пользователь может состоять в одной или нескольких группах. Группы различаются на главные и вторичные. Главная (primary) группа всегда одна и к ней привязываются пользовательские процессы, а также файлы и папки, которые создал пользователь.

Узнать к каким группам принадлежит тот или иной пользователь.

groups username

или

lid username

Узнать группы текущего пользователя.

groups

Узнать идентификаторы групп пользователя.

id username

Узнать идентификаторы текущего пользователя.

id

Узнать какие пользователи состоят в группе.

sudo lid -g groupname

Создание новой группы пользователей.

sudo addgroup groupname

Удаление группы пользователей

sudo delgroup groupname

Добавление пользователя в группу.

sudo gpasswd -a username groupname

Удаление пользователя из группы.

sudo gpasswd -d username groupname

Список групп - /etc/group

Список групп хранится в файле - /etc/group. Чтобы просмотреть все имеющиеся в системе группы можно просто заглянуть внутрь /etc/group.

cat /etc/group

или воспользоваться следующей командой.

getent group

Формат записи данных в файле /etc/group.

Формат записи файла - /etc/group

  1. Имя группы.
  2. Пароль группы: если стоит x, значит пароль зашифрован и хранится в файле - /etc/gshadow.
  3. Идентификатор группы (GID): 32 битовое число.
  4. Список пользователей, которые состоят в группе.

Полезные команды относящиеся к учетным записям

whoami

- узнать имя текущего пользователя

vipw

- перейти к редактированию файла /etc/passwd в редакторе по умолчанию.

vipw -s

- перейти к редактированию файла /etc/shadow в редакторе по умолчанию.

vipw -g

- перейти к редактированию файла /etc/group в редакторе по умолчанию.

visudo

- перейти к редактированию файла /etc/sudoers в редакторе по умолчанию.

Файлы и каталоги, полезные в работе с учетными записями

Файлы

  • /etc/sudoers - настройки прав пользователей.
  • /etc/login.defs - параметры конфигурации для adduser.
  • /etc/passwd - информация о пользователях системы.
  • /etc/shadow - информация о зашифрованных паролях для всех пользователей.
  • /etc/group - информация о группах пользователей.
  • /etc/gshadow - информация о паролях для групп.
  • /etc/default/useradd - значения по умолчанию при создании учетной записи
  • /etc/shells - список доступных командных оболочек.

Каталоги

  • /etc/skel - здесь хранятся данные, которые будут скопированы в домашнюю директорию нового пользователя при его создании. В файле .bash_profile можно настроить оболочку bash для всех новых пользователей (добавить алиасы, настроить цветовую схему, параметры по умолчанию и т.п.).