Automatizando o comando "sudo su - user"

5

Eu quero automatizar

sudo su - user 

de um script. Deve então pedir uma senha.

    
por sam 09.02.2011 / 12:11

3 respostas

7

Vou tentar adivinhar o que você pediu.

Se você quiser usar sudo su - user sem uma senha, você deve (se tiver os privilégios) fazer o seguinte no seu arquivo sudoers:

<youuser>  ALL = NOPASSWD: /bin/su - <otheruser>

onde:

  • <yourusername> é seu nome de usuário: D (saumun89, por exemplo)
  • <otheruser> é o usuário que você deseja alterar para

Em seguida, coloque no script:

sudo /bin/su - <otheruser>

Fazendo exatamente isso, os comandos subseqüentes não serão executados por <otheruser> , ele gerará um novo shell. Se você quiser executar outro comando a partir do script como esse outro usuário, use algo como:

 sudo -u <otheruser> <command>

E no arquivo sudoers:

<yourusername>  ALL = (<otheruser>) NOPASSWD: <command>

Obviamente, uma linha mais genérica como:

<yourusername> ALL = (ALL) NOPASSWD: ALL

Vai fazer as coisas, mas concede a permissão para fazer qualquer coisa como qualquer pessoa.

    
por 09.02.2011 / 12:37
3

Você pode usar o comando

 echo "your_password" | sudo -S [rest of your parameters for sudo]

(Claro que sem [e])

Por favor, note que você deve proteger seu script de acesso de leitura de usuários não autorizados. Se você quiser ler a senha de um arquivo separado, você pode usar

  sudo -S [rest of your parameters for sudo] < /etc/sudo_password_file

(ou seja qual for o nome do arquivo de senha, contendo senha e quebra de linha única).

Da página de manual do sudo:

   -S          The -S (stdin) option causes sudo to read the password from
               the standard input instead of the terminal device.  The
               password must be followed by a newline character.
    
por 09.02.2011 / 13:46
1

A maneira mais fácil é fazer com que o usuário não tenha que digitar uma senha.

Você pode fazer isso executando visudo e alterando a linha que parece:

someuser  ALL=(ALL) ALL

para

someuser  ALL=(ALL) NOPASSWD: ALL

No entanto, se for apenas para um script, seria mais seguro restringir o acesso sem senha apenas a esse script e remover o (ALL) , para que ele possa ser executado apenas como raiz, não como usuário, por exemplo

Cmnd_Alias THESCRIPT = /usr/local/bin/scriptname

someuser  ALL=NOPASSWD: THESCRIPT

Execute man 5 sudoers para ver todos os detalhes na página de manual do sudoers .

    
por 09.02.2011 / 12:26

Tags