Executa comandos como outro usuário sem senha - o sudo falha?

0

Eu faço logon no meu servidor como userA , esse usuário tem um bash shell, tudo funciona bem com ele.

Então, para os propósitos de um programa, eu tive que fazer sudo adduser --system --home=/home/userB --group userB ; este usuário aparentemente não tem senha, a julgar pelo conteúdo de /etc/passwd e /etc/shadow :

$ grep userB /etc/passwd
userB:x:Z08:WW9::/home/userB:/bin/false
$ sudo grep userB /etc/shadow
userB:*:16XXX:0:YYYYY:7:::

Além disso, não há arquivos /home/userB/.profile nem /home/userB/.bash* no diretório inicial userB .

Agora, enquanto estou logado como userA , gostaria de executar comandos como userB , em particular inspecionar o $PATH que userB vê. Então, tentei editar via EDITOR=/usr/bin/nano sudo visudo e adicionar uma das userA lines:

...
# User privilege specification
root    ALL=(ALL:ALL) ALL
#userA      ALL=(userB) NOPASSWD: /bin/bash
userA       ALL = (userB) NOPASSWD: ALL
...

... depois salve o arquivo, saia do shell remoto, faça o login novamente como userA . Então eu tento rodar:

$ sudo -iu userB; echo $?
1
$ sudo -S -u userB -i /bin/bash -l -c 'echo $HOME'; echo $?
1
$ sudo -i -u userB echo \$HOME; echo $?
1

... e claramente, nada funciona - e não há erro também. Então pensei em strace de um desses comandos e, de fato, recebi um erro:

$ strace sudo -iu userB
...
write(2, "sudo: effective uid is not 0, is"..., 140sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges?
) = 140
exit_group(1)                           = ?
+++ exited with 1 +++

No entanto, nosuid não é um problema nesta partição raiz, eu acho:

$ mount | grep '/ '
/dev/sdaX on / type ext4 (rw,errors=remount-ro)

Então, agora eu realmente não tenho ideia do que fazer. É possível ter userA neste caso executando comandos (por exemplo, imprimir a variável de ambiente $HOME ) como userB - e se sim, como posso fazê-lo funcionar?

    
por sdbbs 13.09.2016 / 17:34

2 respostas

1

Na% man_de% manpage:

-i, --login
             Run the shell specified by the target user's password data-
             base entry as a login shell. 

Seu userB tem sudo como o shell, então esse é o comando que é executado.

% /bin/false ; echo $? 
1

Para corrigir isso, você precisa alterar o shell do userB para /bin/false (ou /bin/bash ou o que você preferir) ou não use o /bin/sh flag to sudo. Você precisa de um shell de login?

    
por 13.09.2016 / 18:14
2

A opção -i no sudo tenta criar um shell de login, que por sua vez inicia o shell escolhido pelo usuário. Você definiu isso como /bin/false no seu /etc/passwd :

$ grep userB /etc/passwd
userB:x:Z08:WW9::/home/userB:/bin/false

Tente executar:

sudo -u userB ls

Se isso funcionar, tudo estará funcionando como você o configurou. Se você quiser um shell interativo, use -s , que não chamará o shell de login do usuário.

Se você quiser um shell de login completo, você deve alterar o shell do usuário com

sudo chsh -s /bin/bash userB
    
por 13.09.2016 / 18:04