Я создал специального пользователя в /etc/passwd с помощью:
secure:x:2000:2000:secure:/bin:/usr/sbin/nologin
Я не хочу разрешать вход этого пользователя в систему (через консоль, ssh, ftp, любым другим способом).
Он предназначен только для запуска одного скрипта через:
sudo su secure -c '/home/someuser/secure.script'
Но он мне дает This user is currently not available.
. Как настроить его так, чтобы можно было запускать скрипт таким образом, но запретить любой вход (консоль, ssh, ftp,...) этого пользователя в систему?
Я заметил, что когда я печатаю /usr/sbin/nologin
в командной строке, компьютер отвечает This account is currently not available.
.
решение1
Это типичный вариант использования sudo
.
Вы смешиваете sudo
, который позволяет запускать команды от имени другого пользователя и имеет широкие возможности настройки (вы можете выборочно указать, какой пользователь может запускать какую команду от имени какого пользователя) и su
который переключается на другого пользователя, если вы знаете пароль (или являетесь пользователем root). su
всегда запускает оболочку, написанную на /etc/passwd
, даже если su -c
используется. Из-за этого su
несовместим с /usr/sbin/nologin
.
Вам следует использовать
sudo -u secure /home/someuser/secure.script
Поскольку sudo
это настраиваемый, вы можете контролировать, кто может использовать эту команду и нужно ли ему/ей вводить пароль для ее запуска. Вам нужно отредактировать /etc/sudoers
using visudo
, чтобы сделать это. (Будьте осторожны при редактировании /etc/sudoers и всегда используйте visudo, чтобы сделать это. Синтаксис нетривиален, и одна ошибка может заблокировать вам доступ к учетной записи root.)
Эта строка в sudoers позволяет любому члену группы somegroup
выполнить команду как secure
:
%somegroup ALL=(secure) /home/someuser/secure.script
Это позволяет любому члену группы somegroup
выполнить команду secure
без ввода пароля:
%somegroup ALL=(secure) NOPASSWD: /home/someuser/secure.script
Это позволяет user1
выполнить команду secure
без ввода пароля:
user1 ALL=(secure) /home/someuser/secure.script
решение2
Я обнаружил, что основная проблема заключается в том, что « /usr/sbin/nologin
» в /etc/passwd
этом случае, когда я хочу выполнить su, он должен иметь -s /bin/bash
внутри, например:su -s /bin/bash -c '/home/someuser/secure.script' secure
решение3
su
использует оболочку, указанную в /etc/passwd
.
Вам не нужно использовать su
with sudo
.
Поэтому не смешивайте su
с sudo
: используйте sudo -u secure '/home/someuser/secure.script'
.