Como especificar a opção '-i' sudo em um arquivo sudoers para o apt-get?

3

Na estação de trabalho de usuário único, configurei sudoers(5) para que alguns comandos possam ser executados sem senha. Especificamente, este é um exemplo de uma entrada:

$ cat /etc/sudoers.d/apt-get 
my_user_name ALL=(ALL) NOPASSWD: /usr/bin/apt-get

No entanto, preciso executar esse comando como sudo -i apt-get install (ou seja, com a opção -i ).

É possível modificar de alguma forma o arquivo de configuração, de modo que -i (ou alguma outra sudo opção) estaria implícito mesmo se eu corresse simplesmente como sudo apt-get install (ou seja, sem -i )?

(O SO é o Ubuntu 14.04, mas acho que essa questão não é específica de uma distribuição Linux em particular.)

    
por Alexander Pozdneev 01.09.2017 / 11:07

2 respostas

1

Como @muru apontado em um comentário , o shell de login (ou seja, sudo -i ) não é necessário em este cenário (ou seja, sudo apt-get ... ). A opção always_set_home sudoers file seria suficiente (ela redefiniria $HOME para a raiz da home).

A entrada do arquivo sudoers deve ter esta aparência:

$ sudo cat /etc/sudoers.d/apt-get
Defaults!/usr/bin/apt-get always_set_home
my_user_name ALL=(ALL) NOPASSWD: /usr/bin/apt-get
    
por 18.12.2017 / 09:31
1

Suponho que o seu shell raiz interativo é /bin/bash (mas cuidado, talvez o seu /etc/passwd defina outra coisa, por exemplo, /bin/dash ).

Então, o que você realmente quer é executar um shell de login raiz em sudo . Como eu comentei, eu acredito que você geralmente não precisa disso. E você também pode desfazer algumas variáveis de ambiente ou defini-las para os padrões apropriados, através de seu arquivo /etc/sudoers.d/apt-get .

Mas Invocação de Bash diz que

-l

Make this shell act as if it had been directly invoked by login. When the shell is interactive, this is equivalent to starting a login shell with exec -l bash. When the shell is not interactive, the login shell startup files will be executed. exec bash -l or exec bash --login will replace the current shell with a Bash login shell. See Bash Startup Files, for a description of the special behavior of a login shell.

e mais tarde

A login shell is one whose first character of argument zero is -, or one invoked with the --login option.

Então, você provavelmente poderia escrever um script de shell (ou um programa wrapper em C) que chama bash com -l ou --login e ter essa coisa mencionada em /etc/sudoers.d/apt-get

Talvez a execução de /bin/bash -l -c "/usr/bin/apt-get $*" seja suficiente.

Observe também que sudoers(5) menciona env_reset e env_keep

Talvez você queira apenas remover algumas variáveis de ambiente, como DBUS_SESSION_BUS_ADDRESS ....

(Eu posso estar errado e nunca tentei isso)

    
por 01.09.2017 / 11:23

Tags