Пользователи в 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 имя_пользователя
Теперь пользователь полностью удален, вместе со своими файлами и домашней директорией из вашей системы.