Por que posso mudar para um usuário, mas não executar um script

2

Se eu tentar mudar para um usuário usando o comando sudo su - kshitiz . Funciona bem e muda sem pedir uma senha.

Mas se eu tentar executar um script como esse usuário, ele me pedirá uma senha.

sudo -u kshitiz bash << EOF
> cat /home/ri/secret.txt
> EOF

Por que isso acontece?

Atualização:

User ksh may run the following commands on this host:
    (root) NOPASSWD: /bin/su - kshitiz
    
por Kshitiz Sharma 10.06.2016 / 18:18

3 respostas

2

O problema é que você tem uma configuração sudo que permite executar um shell de login, mas não executar diretamente um programa arbitrário.

Se o usuário tiver uma conta restrita, ou seja, se o shell de login do usuário for um programa que executa apenas alguns comandos específicos, essa é uma restrição de segurança; permitir que você execute o bash ignoraria essa restrição de segurança.

Se o shell de login do usuário for um shell de comando comum, como o bash, essa configuração será tola, pois você poderá executar comandos arbitrários de qualquer maneira. Você apenas tem que executar o comando exato requerido via sudo , e desde que ele executa um shell, passe os comandos que você quer executar para aquele shell.

sudo /bin/su - kshitiz <<'EOF'
cat /home/ri/secret.txt
EOF
    
por 11.06.2016 / 14:56
6

Conforme você determinou, sudo está configurado para permitir somente sudo su - kshitiz , então seu segundo comando está fadado a falhar.

De qualquer forma, você não está passando pelas mesmas transições de usuário.

sudo su - kshitiz

executa su - kshitiz como root ; se você puder sudo a root sem senha, isso não solicitará uma senha, pois su - as root altera os usuários sem solicitar uma senha.

sudo -u kshitiz

pede ao sudo para alternar para kshitiz diretamente, o que requer sua própria configuração se você não quiser pedir uma senha.

Se o usuário tiver permissão para executar qualquer coisa,

sudo su - kshitiz -c bash ...

funcionaria. Você também pode configurar sudo para permitir

sudo -u kshitiz ...

sem senha.

    
por 10.06.2016 / 18:31
-1

Certifique-se de que / etc / sudoers não esteja usando secure_path ou env_reset. Você também pode tentar usar:

sudo -E -u user   # -E overrides env_reset.

Eu não entendo o uso generalizado de "sudo su .." é redundante.

  • sudo -i: executa um shell de login interativo (leia /root/.bashrc e
  • /root/.profile) sudo -s: executa um shell interativo não-login (lê /root/.bashrc)
por 10.06.2016 / 21:17

Tags