Criei um usuário especial em /etc/passwd com:
secure:x:2000:2000:secure:/bin:/usr/sbin/nologin
Não quero permitir o login deste usuário (via console, ssh, ftp, de qualquer forma).
Ele serve apenas para executar um script via:
sudo su secure -c '/home/someuser/secure.script'
Mas isso me dá This user is currently not available.
. Como configurá-lo para poder executar o script desta forma, mas impedir qualquer login (console, ssh, ftp,...) deste usuário no sistema?
Percebi que quando digito /usr/sbin/nologin
na linha de comando, o computador responde com This account is currently not available.
.
Responder1
Este é um caso de uso típico para sudo
.
Você está misturando sudo
o que permite executar comandos como outro usuário e é altamente configurável (você pode especificar seletivamente qual usuário pode executar qual comando como qual usuário) e su
qual muda para outro usuário se você souber a senha (ou for root). su
sempre executa o shell escrito em /etc/passwd
, mesmo que su -c
seja usado. Por causa disso su
não é compatível com /usr/sbin/nologin
.
Você deveria usar
sudo -u secure /home/someuser/secure.script
Como sudo
é configurável você pode controlar quem pode usar este comando e se precisa digitar uma senha para executá-lo. Você precisa editar /etc/sudoers
usando visudo
para fazer isso. (Tenha cuidado ao editar /etc/sudoers e sempre use visudo para fazer isso. A sintaxe não é trivial e um erro pode bloquear seu acesso à sua conta root.)
Esta linha em sudoers permite que qualquer pessoa do grupo somegroup
execute o comando como secure
:
%somegroup ALL=(secure) /home/someuser/secure.script
Isso permite que qualquer pessoa do grupo somegroup
execute o comando secure
sem inserir uma senha:
%somegroup ALL=(secure) NOPASSWD: /home/someuser/secure.script
Isso permite user1
executar o comando secure
sem inserir uma senha:
user1 ALL=(secure) /home/someuser/secure.script
Responder2
Descobri que o principal problema é " /usr/sbin/nologin
" em /etc/passwd
Quando quero executar o su neste caso, ele deve ter -s /bin/bash
dentro, então por exemplo:su -s /bin/bash -c '/home/someuser/secure.script' secure
Responder3
su
está usando o shell especificado em /etc/passwd
.
Você não precisa usar su
with sudo
.
Portanto, não misture su
com sudo
: use sudo -u secure '/home/someuser/secure.script'
.