Этот пользователь в настоящее время недоступен, но разрешите ему запустить скрипт

Этот пользователь в настоящее время недоступен, но разрешите ему запустить скрипт

Я создал специального пользователя в /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/sudoersusing 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.

Вам не нужно использовать suwith sudo.

Поэтому не смешивайте suс sudo: используйте sudo -u secure '/home/someuser/secure.script'.

Связанный контент