Пользователи в Linux
Основу управления правами доступа в Linux и уровнем привилегий в Linux составляют именно пользователи. Изначально, еще при проектировании системы существовал пользователь root
, которому позволено выполнять любые действия и другие пользователи, права которых настраиваются с помощью вступления их в группы Linux и установки прав на каталоги.
Список всех пользователей
В операционной системе Linux есть специальный файл в котором хранится информация обо всех пользователях. Это /etc/passwd
. Записи в файле имеют следующий синтаксис:
имя_пользователя пароль ид ид_группы группа домашний_каталог оболочка
Вместо пароля записывается буква X
это было сделано для безопасности. Все пароли пользователей хранятся теперь в другом файле. Остается только набрать команду и вы узнаете список пользователей linux:
cat /etc/passwd
В файле /etc/passwd
слишком много лишних данных, если вам нужны только имена пользователей, можно отфильтровать вывод:
sed 's/:.*//' /etc/passwd
Пользователи с ID
меньше 1000
системные, они были созданы во время установки некоторых сервисов для более безопасной их работы. Этих пользователей трогать не следует.
Команда ID номера пользователей в системе
Для того чтобы понять под каким пользователем вы сейчас работаете выполните команду:
id
У меня вывод следующий:
uid=1000(vadik) gid=1000(vadik) группы=1000(vadik),4(adm),24(cdrom),27(sudo),30(dip),33(www-data),46(plugdev),122(lpadmin),134(lxd),135(sambashare),999(docker)
В выводе мы видим что пользователь vadik
имеет:
- User id (uid) = 1000
- Входит в группу vadik, которая имеет group id (gid) = 1000
- Также он входит в другие группы
- У каждой группы есть номер (gid)
Для системы номер пользователя или группы важнее чем его имя.
- uid user id, номер пользователя
- gid group id, номер группы
Если команде id передать в качестве параметра имя пользователя, то мы увидим информацию по этому пользователю. Если не указывать имя пользователя то увидим информацию по текущему пользователю.
Например, uid для суперпользователя root всегда = 0:
id root
Вывод команды:
uid=0(root) gid=0(root) группы=0(root)
Когда система проверяет, разрешено ли какое-либо действие для данного пользователя, то система смотрит именно на uid и на gid пользователя а не на его имя.
Команда su смена текущего пользователя
Текущий пользователь этот тот пользователь под которым вы работаете.
Создавать пользователей в системе может только суперпользователь root. Он может делать с системой все что пожелает. Подобный пользователь root есть в любом дистрибутиве GNU/Linux.
Для того чтобы переключиться на работу под другим пользователем нужно воспользоваться командой su. В качестве аргумента команде su нужно передать имя пользователя на которого мы хотим переключиться. Помимо имени пользователя можно использовать ключ - без него некоторые переменные среды останутся от предыдущего пользователя. Поэтому правильное переключение на пользователя root будет следующим:
su - root
В Ubuntu, по умолчанию, нельзя переключиться на пользователя root. Мы даже при установке системы не задавали пароль для этого пользователя. В Ubuntu по умолчанию настроена утилита sudo, которая позволяет выполнять команды от имени суперпользователя. И эта утилита позволит нам переключиться на пользователя root не вводя его пароль:
sudo su - root
sudo работает не для всех пользователей, а только для тех кто входит в группу sudo.
Команда useradd создание пользователя
Вся информация о пользователях находится в файле /etc/passwd
. Мы могли бы создать пользователя linux просто добавив его туда, но так делать не следует, поскольку для этой задачи существуют специальная команда useradd
.
Синтаксис
useradd опции имя_пользователя
Опции
-b
базовый каталог для размещения домашнего каталога пользователя, по умолчанию /home;-c
комментарий к учетной записи;-d
домашний каталог, в котором будут размещаться файлы пользователя;-e
дата, когда учетная запись пользователя будет заблокирована, в формате ГГГГ-ММ-ДД;-f
заблокировать учетную запись сразу после создания;-g
основная группа пользователя;-G
список дополнительных групп;-k
каталог с шаблонами конфигурационных файлов;-l
не сохранять информацию о входах пользователя в lastlog и faillog;-m
создавать домашний каталог пользователя, если он не существует;-M
не создавать домашнюю папку;-N
не создавать группу с именем пользователя;-o
разрешить создание пользователя linux с неуникальным идентификатором UID;-p
задать пароль пользователя;-r
создать системного пользователя, не имеет оболочки входа, без домашней директории и с идентификатором до SYS_UID_MAX;-s
командная оболочка для пользователя;-u
идентификатор для пользователя;-D
отобразить параметры, которые используются по умолчанию для создания пользователя. Если вместе с этой опцией задать еще какой-либо параметр, то его значение по умолчанию будет переопределено.
Посмотреть какие параметры будут применены для пользователя по умолчанию:
useradd -D
Создание минимального пользователя с минимальными настройками:
sudo useradd имя_пользователя
Создание пользователя и директории по умолчанию в каталоге /home
:
sudo useradd -m имя_пользователя
Посмотреть данные о пользователе:
sudo id имя_пользователя
Команда passwd задать пароль пользователю
Пароли выделены в отдельный файл /etc/shadow
. Этот файл можно открыть только с правами суперпользователя, пароли здесь хранятся в зашифрованном виде, поэтому узнать пароль не получиться, а поменять вручную будет сложно.
Синтаксис
sudo passwd опции имя_пользователя
Опции
-d
удалить пароль пользователя, после этого он не сможет войти-e
сделать пароль устаревшим-i
через сколько дней после того, как пароль устарел, отключить аккаунт, если пользователь не сменил пароль-l
запретить пользователю входить в систему-n
минимальное количество дней между сменами пароля-S
отобразить информацию об аккаунте-u
отменяет действие параметра-l
-x
максимальное количество дней, пока пароль можно использовать.-w
количество дней, после которых нужно предупреждать пользователя о том, что надо сменить пароль.
Вы можете сменить свой пароль, когда захотите. Для этого вам не нужно особых прав суперпользователя, только знать свой текущий пароль. Просто откройте терминал и выполните утилиту passwd
без параметров:
passwd
Если нужно поменять пароль для другого пользователя, придётся вопользоваться правами суперпользователя:
sudo passwd имя_пользователя
Удалить пароль для пользователя, тогда он не сможет войти в систему:
sudo passwd -d имя_пользователя
Изменить пароль для root
очень просто, точно так же, как и для любого другого пользователя. Только нужно иметь права суперпользователя:
sudo passwd root
Как поменять пароль группы
Наверное вы видели в своей системе файл /etc/gshadow
. Этот файл эквивалентен /etc/shadow
, только содержат пароли для групп. Вы не можете войти от имени группы, но зато, зная её пароль, можете получить доступ к предоставляемым ею функциям в отдельной командной оболочке с помощью команды newgrp.
.
Для установки пароля на группу используется утилита очень похожая на passwd gpasswd
:
sudo gpasswd имя_группы
Теперь попробуем получить полномочия группы, выводим список и входим в группу:
groups
Чтобы удалить пароль из группы, используется опция -r
:
sudo gpasswd -r имя_группы
Как заставить пользователя поменять пароль
Безопасность сервера - это одна из самых важных вещей. Часто причиной проблем с безопасностью становятся сами пользователи, которые недостаточно часто меняют пароли или делают их слишком простыми. Если вы администратор, у вас есть возможность заставить пользователей выполнять смену пароля время от времени, а также автоматически отсылать им предупреждения о том, что пора сменить пароль пользователя.
Всё это позволяет сделать утилита passwd
. Сначала давайте рассмотрим, как посмотреть информацию о пароле в passwd
. Для этого используется опция -S
:
passwd -S имя_пользователя
- Первое поле - имя пользователя
- Второе поле показывает одно из значений:
P
пароль установлен,L
пользователь заблокирован,NP
пароля нет 07/21/2016
дата последнего изменения пароля0
минимальное время до смены пароля99999
максимальное время действия пароля7
за сколько дней нужно предупреждать об истечении срока действия пароля-1
через сколько дней пароль нужно деактивировать
Например, через тридцать дней после смены, пароль пользователя станет устаревшим:
sudo passwd -x 30 имя_пользователя
За три дня до того, как пароль устареет, предупредим пользователя, что его нужно сменить:
sudo passwd -w 3 имя_пользователя
Если он этого не сделает в течении пяти дней, аккаунт нужно отключить:
sudo passwd -i 3 имя_пользователя
Пароль можно менять не чаще, чем раз в 10 дней:
sudo passwd -n 10 test
Смотрим теперь, что у нас получилось для пользователя:
sudo passwd -S test
Команды deluser и userdel удаление пользователя
Давайте рассмотрим, как удалить пользователя в терминале. Для этого используется команда deluser
в Debian
и производных системах, в RHEL
userdel
. Рассмотрим подробнее эти две утилиты.
Синтаксис deluser
deluser параметры пользователь
Параметы deluser
--system
удалять только если это системный пользователь--backup
делать резервную копию файлов пользователя--backup-to
папка для резервных копий--remove-home
удалять домашнюю папку--remove-all-files
удалять все файлы пользователя в файловой системе
Настройки команды deluser
находятся в файле /etc/deluser.conf
, среди прочих настроек там указанно что нужно делать с домашней папкой и файлами пользователя. Вы можете посмотреть и изменить эти настройки выполнив команду:
nano /etc/deluser.conf
Рассмотрим подробнее эти настройки:
REMOVE_HOME
удалять домашний каталог пользователяREMOVE_ALL_FILES
удалить все файлы пользователяBACKUP
выполнять резервное копирование файлов пользователяBACKUP_TO
папка для резервного копированияONLY_IF_EMPTY
удалить группу пользователя если она пуста
Эти настройки определяют поведение утилиты по умолчанию, когда выполняется удаление пользователя, конечно, их можно переопределить используя параметры для команды.
Синтаксис userdel
Утилита userdel
работает немного по-другому, файла настроек здесь нет, но есть опции, с помощью которых можно сообщить утилите что нужно сделать.
Синтаксис userdel
userdel параметры пользователь
Параметы userdel
-f, --force
принудительное удаление, даже если пользователь еще залогинен-r, --remove
удалить домашнюю директорию пользователя и его файлы в системе-Z
удалить все SELinux объекты для этого пользователя
Для удаления пользователя с сервера лучше использовать расширенный способ, который мы рассмотрим ниже. Когда пользователи используют сервер, они запускают различные программы и сервисы. Пользователь может быть правильно удален, только если он не залогинен на сервере и все программы, запущенные от его имени остановлены, ведь программы могут использовать различные файлы, принадлежащие пользователю, а это помешает их удалить. Соответственно тогда файлы пользователя будут удаленны не полностью и останутся засорять систему.
Блокировка учетной записи пользователя
Для блокировки учетной записи пользователя можно использовать утилиту passwd. Это запретит пользователю доступ к системе и предотвратит запуск новых процессов:
passwd --lock имя_пользователя
Уничтожить все запущенные процессы пользователя
Теперь давайте найдем все запущенные от имени пользователя процессы и завершим их:
pgrep -u имя_пользователя
Посмотреть подробнее, что это за процессы можно передав pid
, каждого из них в команду ps
, вот так:
ps -f --pid $(pgrep -u имя_пользователя)
Теперь, когда вы убедились, что там нет ничего важного, можно уничтожить все процессы:
Killall -9 -u имя_пользователя
Опция -9
говорит программе, что нужно отправить этим процессам сигнал завершения SIGKILL
, а -u
задает имя пользователя.
В основанных на Red Hat
системах, для использования killall
необходимо будет установить пакет psmisc
:
sudo yum install psmisc
Резервное копирование данных пользователя
Это вовсе не обязательно. Для этого можно использовать, например, утилиту tar
:
sudo tar jcvf /user-backups/имя_пользователя-backup.tar.bz2 /home/имя_пользователя
Удаление учетной записи пользователя
Теперь, когда все подготовлено, начинаем удаление пользователя. На всякий случай укажем явно, что нужно удалять файлы пользователя и домашнюю директорию.
Для Debian:
deluser --remove-home имя_пользователя
Для Red Hat:
userdel --remove имя_пользователя
Если нужно удалить все файлы, принадлежащие пользователю в системе используйте опцию --remove-all-files
, только будьте с ней осторожны, так и важные файлы можно затереть:
deluser --remove-all-files имя_пользователя
Теперь пользователь полностью удален, вместе со своими файлами и домашней директорией из вашей системы.