- How can I create a non-login user?
- 8 Answers 8
- Работа с пользователями в Linux
- Получение информации о пользователях
- Создание
- Ключи (опции)
- Редактирование
- Удаление
- Блокировка
- Работа с группами
- Список пользователей
- Примеры работы с учетными записями
- useradd
- usermod
- chage
- Возможные ошибки
- sudo must be owned by uid 0 and have the setuid bit set
- Creating a user who cannot get an interactive shell
- 5 Answers 5
How can I create a non-login user?
I’d like to create a user and a group both called subversion on a RHEL 5 system. I looked at the man page for useradd and I guess the command would be just be.
However, not sure how to avoid creating a home dir. Also, I don’t want it to be a user that can log in to the system. The main purpose is just to provide an owner for a SVN repository.
8 Answers 8
You can use the -M switch (make sure it’s a capital) to ensure no home directory will be created:
then lock the account to prevent logging in:
This isn’t a particularly strong answer, the user created by this means still has a shell. And you did not even warn the OP that this was the case. Retrospectively that would be usermod -s /bin/false subversion , or with —shell /bin/false to useradd
@beak actually only the root user would be able to su to the locked account, but why bother if the person has gained root access already? And setting the shell doesn’t do much when a user can run su -s /bin/bash username and bypass that.
thanks for taking the time to have the discussion, you are of course correct; but it pains me to see non-login users with shells defined, it strikes me as lazy, and incase someone is unfamiliar with the system, it’s nice that they can’t accidentally do something unintended; hackers are a different breed, if they already got a shell on the machine, I think it’s basically game over
You can use the following command:
For more info, check manual pages with this command:
You will find in this documentation the following flag that can be used for your purpose.
-r, --system create a system account
The -r flag will create a system user — one which does not have a password, a home dir and is unable to login.
this command will even create a group for the user called the same. So the «subversion» user will be in the «subversion» group. Great for when you later want to do «sudo chown -R subversion:subversion /path/to/folder»
@c4il But the only one that can login into them is root, right? I mean, they don’t have a password, so I would expect only root to be able to log into them.
Another solution to create a system user, using adduser :
adduser --system --no-create-home --group yourusername
You can remove —group if you don’t need group yourusername, and —no-create-home if you do need a home for this user.
As mentionned by py4on in comments, on some systems one may need to use the —disabled-login option in order to, well, disable login for this user. It seems to be the default behaviour under Debian, though.
Beware that the numeric ID of the user will be of a system account. You can fix the uid using the —uid option, though.
Finally, note that on some systems (e.g. Fedora) adduser is a symlink to useradd , in which case this answer is not valid.
Работа с пользователями в Linux
Обновлено: 20.04.2023 Опубликовано: 05.12.2016
В данной инструкции рассказывается о работе с пользователями Linux через терминал (с применением командной строки).
Получение информации о пользователях
1. Список пользователей можно посмотреть в файле /etc/passwd командой:
Данная команда вернет всех пользователей, в том числе служебных. Для отображения только учетных записей пользователей можно ввести команду:
2. Проверить существование пользователя и увидеть его идентификатор можно с помощью команды id:
Мы должны увидеть что-то на подобие:
uid=1001(username) gid=1001(username) groups=1001(username),27(sudo)
* учетная запись username существует, она находится в основной группе username и дополнительной sudo. Ее идентификатор 1001.
3. Также мы можем получить строку о пользователе из файла /etc/passwd:
* наш пользовател username имеют идентификатор пользователя и группы 1001, его домашняя директория /home/username, командная оболочка /bin/sh.
Создание
* опции не являются обязательными при создании пользователя.
* в данном примере создается учетная запись dmosk.
Для учетной записи стоит сразу создать пароль:
* после ввода, система попросит ввести пароль дважды.
Ключи (опции)
Ключ | Описание и примеры |
---|---|
-b | Задает базовый каталог для домашнего каталога useradd dmosk -b /var/home |
-c | Создает комментарий для описания учетной записи useradd dmosk -c «Пользователя для управления системой» |
-d | Полный путь к домашнему каталогу пользователя useradd dmosk -d /home/newuser |
-D | Позволяет показать или изменить настройки по умолчанию, которые будут применяться при последующем создании пользователей useradd dmosk -Ds /bin/bash |
-e | Дата, после которой учетная запись устареет. useradd dmosk -e 2017-12-31 |
-f | Число дней, после которого учетная запись с устаревшим паролем будет заблокирована useradd dmosk -f 0 |
-g | Задает основную группу useradd dmosk -g altternativegroup |
-G | Задает дополнительные группы useradd dmosk -G wheel |
-k | Путь к источнику скелета (файлы с шаблонами для нового пользователя) useradd dmosk -k /var/skel |
-m | При создании пользователя создать домашний каталог useradd dmosk -m |
-M | Не создавать домашний каталог useradd dmosk -M |
-N | Не создавать основную группу с таким же именем, как у пользователя useradd dmosk -N |
-o | Разрешает создание учетной записи с повторяющимся UID useradd dmosk -u 15 -o |
-p | Задает пароль useradd dmosk -p pass |
-r | Системная учетная запись (без домашнего каталога и с идентификаторами в диапазоне SYS_UID_MIN — SYS_UID_MAX из файла /etc/login.defs) useradd dmosk -r |
-R | Каталог, в который выполняется chroot useradd dmosk -R /var/chroot/home |
-s | Путь до оболочки командной строки useradd dmosk -s /bin/csh |
-u | Задает UID useradd dmosk -u 666 |
-U | Имя группы будет таким же, как у пользователя useradd dmosk -U |
Актуальный список ключей можно получить командой useradd -h.
Редактирование
* эта команда добавит пользователя dmosk в группу wheel
Удаление
Блокировка
1. Можно заблокировать пользователя, не удаляя его из системы:
Чтобы разблокировать пользователя, вводим:
2. В некоторых системах Linux может использоваться pam-модуль tally. Он осуществляет подсчет количества неудачных попыток входа в систему. Также он может блокировать доступ при превышении данного количества.
Чтобы посмотреть счетчик для пользователя, вводим команду:
Для сброса счетчика (и блокировки, если она есть) вводим:
pam_tally2 —user=admin —reset
Работа с группами
4. Добавление пользователя в группу:
Выполняется через команду usermod:
Выполняется с помощью gpasswd:
Список пользователей
Посмотреть список пользователей можно в файле /etc/passwd:
Мы увидим что-то на подобие:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
.
Как правило, большая часть данных пользователей является системными — их UID меньше 1000 и больше 60000.
Более функциональная команда для отображения содержимого файла passwd — getent:
Можно найти пользователя по идентификатору:
Получить список не системных пользователей:
Получить только список логинов не системных учетных записей:
Примеры работы с учетными записями
Рассмотрим несколько утилит, с помощью которых можно управлять учетными записями в Linux.
useradd
1. Создать пользователя, добавить его в группу и создать домашнюю директорию:
useradd dmosk -G printer -m
2. Создать учетную запись с возможностью получения привилений суперпользователя (командой sudo su):
3. Создать пользователя с определенными UID и GID (соответственно идентификаторы пользователя и группы):
useradd dmosk -u 900 -g 950
* группа с используемым идентификатором (в данном примере 950) уже должна быть создана заранее с использованием команды groupadd.
4. Создать пользователя и указать путь к домашней директории:
useradd dmosk -d /home/newdmosk
5. Создать учетную запись без возможности входа в систему:
useradd dmosk -s /sbin/nologin
usermod
1. Потребовать сменить пароль при следующем входе в систему:
2. Поменять пользователю основную группу:
usermod dmosk -g kdonewgroup
3. Задать пользователю дополнительную группу с правами root:
4. Добавить пользователя в группу:
* в данном примере мы добавим пользователя dmosk в группу group.
5. Сменить домашнюю директорию:
usermod -d /var/www/dmosk dmosk
* данной командой мы меняем для пользователя dmosk домашнюю директорию на /var/www/dmosk.
chage
1. Автоматическая блокировка учетной записи:
* данной командой мы указали, что учетная запись dmosk перестанет действовать после 1 мая 2023 года.
Чтобы посмотреть информацию о дате окончания срока действия учетной записи вводим:
Сделать учетную запись бессрочной:
Возможные ошибки
sudo must be owned by uid 0 and have the setuid bit set
При попытке получить привилении командой:
. система возвращает ошибку:
sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set
Причина: эта ошибка возникает, когда утилита sudo не имеет правильных прав доступа на вашей системе. В частности, она происходит, когда владелец файла /usr/bin/sudo не является пользователем root или когда установлен неправильный бит setuid на файле.
Решение: убедитесь, что вы вошли в систему с учетной записью, имеющей права администратора. Это можно сделать, войдя напрямую под пользователем root.
Выполняем команду, чтобы проверить права файла sudo:
Если владелец не является пользователем root, выполните следующую команду, чтобы изменить владельца файла:
chown root:root /usr/bin/sudo
Убедитесь, что установлен правильный бит setuid на файле sudo, выполнив следующую команду:
Creating a user who cannot get an interactive shell
What are interactive and non-interactive shell? Questions: Create a user john who should not get an interactive shell. How can we do this?
5 Answers 5
The /etc/passwd file has as the last item on a user’s line the program to be run upon login. For normal users this is typically set to /bin/sh or other shell (e.g. bash, zsh).
Traditionally, identities that are used to own processes or files or other resources have their «shell» set to /bin/false as in
syslog:x:101:102::/home/syslog:/bin/false
The pseudo-user syslog owns /var/log/syslog and is the only UID which has write permission for that file, but one cannot log in as user syslog as there is no command interpreter to be run.
Regarding the question you are trying to answer:
Create a user john who should not get an interactive shell.
The question means «Create a user named john who won’t be able to log in and run commands from a shell». Interactive describe the way the shell works: the user types something, and the shell does something accordingly (there is a kind of communication between the user and the shell). The word «interactive» doesn’t really add any information to the question, because as long as there is a user typing commands, the shell session is interactive.
There is also the non-interactive mode, where the user saves a series of commands they want to run in a file (called a shell script), and executes the file afterwards. Some commands behave differently depending on whether the shell is run interactively or non-interactively. You can read more here (this document is for bash , but the same concept applies for other shells).
On how to create such a user, if you skim through man useradd there is an option to set the login shell, -s or —shell . You can also create a user normally, in anyway you want (which I assume you know already?), then edit /etc/passwd like in msw’s answer.