Executando um programa como outro usuário sem digitar uma senha

3

Estou tentando marcar meu tráfego da Internet do navegador com um DSCP por selecionar os pacotes com um determinado proprietário . Para fazer isso eu tenho que iniciar meu navegador com um usuário fictício.

Eu inicio meu navegador ligando um comando terminal a um atalho de teclado. Então, por enquanto, sempre foi chromium-browser .

Os passos que tomei até agora:

Crie um novo usuário :

 sudo useradd <dummy user>
 sudo passwd <dummy user>
 sudo mkdir /home/<dummy user>
 sudo chown <dummy user> /home/<dummy user>
 sudo chgrp <dummy user> /home/<dummy user>

Permitir que o novo usuário acesse X

xhost +

Execute o comando como o novo usuário

Eu inicio um terminal como o usuário original (não raiz) e executo o seguinte comando:

su <dummy user> -c chromium-browser

depois de digitar a senha do usuário fictício, posso executar o navegador chromium como o usuário fictício. O Chromium será totalmente novo e não terá minhas configurações antigas, pois usa o diretório inicial do usuário fictício recém-criado.

Agora eu não quero ter que digitar uma senha em qualquer estágio, então eu olhei em como trabalhar com o sudoers .

De forma rápida, é possível executar um comando como outro usuário sem solicitar a senha, alterando o arquivo sudoers. Eu ainda não descobri exatamente como, mas acho que depende de sudo -u . Que também permite que você execute um comando como outra pessoa. Antes de começar a adaptar o arquivo sudoers, quis testar essa estrutura. Então eu corri:

sudo -u <dummy user> chromium-browser

E recebi o seguinte erro:

[0906/012127:ERROR:nss_util.cc(90)] Failed to create /home/<user>/.pki/nssdb directory.
[0906/012127:ERROR:nss_util.cc(90)] Failed to create /home/<user>/.pki/nssdb directory.
Home directory /home/<user> not ours.

onde <user> é meu nome de usuário. Então, ele tenta acessar o diretório home de meus usuários domésticos.

Espero que alguém possa me ajudar a descobrir isso. Tenho a sensação de que estou na direção certa, mas preciso de alguém, deixe-me ver o que estou fazendo de errado. Também qualquer ajuda sobre como alterar o arquivo sudoers seria apreciada.

Obrigado antecipadamente!

    
por Hoogendijk 06.09.2013 / 02:13

1 resposta

5

De acordo com o sudo manual:

    By default, sudo does not modify HOME

Isso significa que, quando você executar sudo -u <dummy user> <command> , o HOME não será alterado e apontará para o diretório inicial do usuário chamado. Mais precisamente, todo o ambiente permanece inalterado, e o comando é executado, portanto, no ambiente do usuário que invocou sudo . Apenas uid é alterado e quando o comando tenta escrever em $HOME , ele não tem permissão correta.

Para executar o comando como <dummy user> sem solicitar a senha e ter o ambiente correto, você deve criar um arquivo simples:

    sudo visudo -f /etc/sudoers.d/myOverrides 

com esta diretiva:

    <user> ALL= NOPASSWD:/bin/su

Isso permite que <user> execute o comando su como root sem solicitar a senha ( <user> password) e executando su como root doesn ' Não é necessário digitar a senha do usuário alvo ( <dummy user> neste caso).

   sudo su - <dummy user> -c /path/to/chromium-browser

Outra abordagem melhor, altere /etc/sudoers.d/myOverrides com:

   <user> ALL= (<dummy user>) NOPASSWD:/path/to/chromium-browser

isso permite que <user> execute /path/to/chromium-browser como <dummy user> sem solicitar a senha.

   sudo -u <dummy user> -i /path/to/chromium-browser

onde opção -i, de acordo com o manual do sudo :

  

A opção -i (simular login inicial) executa o shell especificado no   passwd (5) entrada do usuário alvo como um shell de login. Isso significa que   Arquivos de recursos específicos de login, como .profile ou .login, serão lidos   pela casca. Se um comando é especificado, ele é passado para o shell   para execução. Caso contrário, um shell interativo é executado. sudo   tenta mudar para o diretório inicial desse usuário antes de executar o   Concha. Ele também inicializa o ambiente, deixando DISPLAY e TERM   inalterado, definindo HOME, SHELL, USER, LOGNAME e PATH, bem como   o conteúdo de / etc / environment nos sistemas Linux e AIX. Todos os outros   variáveis de ambiente são removidas.

    
por Lety 24.07.2014 / 21:48