Execute sudo como outro usuário não-root e salve no diretório home desse usuário

4

Eu adicionei um novo grupo: ircuser e um novo usuário: ircuser

Em visudo coloquei esta linha:

myuser localhost=(ircuser) NOPASSWD: /usr/bin/irssi

Criado o diretório ircuser , onde arquivos de configuração, caches, etc. devem ser salvos:

drwxrwx--- 2 ircuser ircuser 4096 Mar  2 10:28 ircuser

Ao emitir o comando:

sudo -Hu ircuser /usr/bin/irssi

ou

sudo -u ircuser /usr/bin/irssi

O programa não pode salvar o arquivo de configuração no diretório ircuser .

** ERROR **: Couldn't create /home/myuser/_web/ircuser/.irssi directory
aborting...
Aborted

Mas está sendo executado como ircuser :

ps auxw | grep irssi
ircuser  11962  0.0  0.0  23684  2504 pts/6    S+   11:18   0:00 /usr/bin/irssi

Então, embora irssi seja executado por ircuser , ele não pode gravar em um diretório de propriedade do mesmo usuário? O que preciso alterar para permitir que seja salvo lá?

    
por Luis 02.03.2012 / 13:00

3 respostas

6

O problema provavelmente está em não ter permissão eXecute em um dos diretórios-pais que levaram ao diretório inicial do ircuser. Para que qualquer usuário atravesse, não necessariamente procure em um diretório, esse usuário deve ter permissão de execução por meio de um grupo ou por meio de outro. Se você tiver essas permissões:

drwxrwx--- 2 myuser myuser 4096 Mar  2 10:28 /home/myuser

E o ircuser não faz parte do grupo myuser, então o ircuser não pode acessar nenhum arquivo abaixo, mesmo que tenha permissões para esse diretório. Se você tentar isso:

drwxrwx--x 2 myuser myuser 4096 Mar  2 10:28 /home/myuser

Em seguida, o ircuser não pode procurar o diretório pessoal do myuser, mas ele pode acessar alguns arquivos abaixo, como /home/myuser/_web/ircuser

UPDATE: Mais alguns detalhes que deixei de fora da descrição acima. As permissões são avaliadas à medida que você percorre o sistema de arquivos. É possível acessar uma pasta a partir do diretório atual que você não pode acessar a partir do diretório raiz. Se você mudar seu diretório de trabalho para algum outro lugar, você perderá o controle sobre o diretório atual e perderá o acesso aos arquivos contidos nele. Se você usar algo como sudo su - ircuser, o su irá mudar para o diretório home do ircuser antes de abandonar os privilégios de root. Nesse ponto, você tem um identificador válido para o diretório home do ircuser porque é o diretório de trabalho atual. Se você iniciar o irssi, ele será executado no diretório home do ircuser como ircuser. Se você tentar acessar .irssi, isso funcionará porque você tem permissão eXecute no diretório atual. Se você tiver que atravessar um diretório onde você não tem permissão eXecute, o iy falhará. Por exemplo, abrindo o arquivo /home/myuser/_web/ircuser/.irssi ou mesmo iniciando a partir do diretório atual e usando o caminho relativo de ../../_web/ircuser/.irssi porque ele requer a passagem de /home/myuser onde você não tem permissão de eXecute.

    
por 02.03.2012 / 20:15
0

Use a opção -H que torna o comando executado com sudo para considerar 'home' o diretório pessoal do usuário. Você pode encontrar explicações mais detalhadas na página man do sudo: link

    
por 02.03.2012 / 15:03
0

Você se importaria de tentar com   sudo -iu ircuser / usr / bin / irssi?

Além disso, como Patkos Csaba já declarou, verifique o env_reset, env_keep Padrões definidos em seus sudoers.

Do manpage do sudoers:

As a special case, if sudo's -i option (initial login) is specified,
sudoers will initialize the environment regardless of the value of
env_reset.  The DISPLAY, PATH and TERM variables remain unchanged;
HOME, MAIL, SHELL, USER, and LOGNAME are set based on the target user.
On Linux and AIX systems the contents of /etc/environment are also
included.  All other environment variables are removed.

Então o sudo -i irá inicializar o ambiente contornando os valores destes.

Edit: Eu reproduzi sua configuração em uma caixa do Ubuntu e até mesmo o sudo -u ircuser / usr / bin / irssi funciona bem para mim.

Do meu / etc / sudoers

<snipped>
Defaults    env_reset, log_output
<snipped>
testing LABUBU01=(ircuser) NOPASSWD: /usr/bin/irssi

Versões:

testing@LABUBU01:~$ sudo -V
Sudo version 1.8.3p1
pmplugin policy_plugin 5.6.0 (034)
pmplugin io_plugin 5.6.0 (034)
testing@LABUBU01:~$ uname -a
Linux LABUBU01 2.6.35-28-generic #50-Ubuntu SMP Fri Mar 18 19:00:26 UTC 2011 i686 GNU/Linux


testing@LABUBU01:~$ ls -lap /home/
total 64
drwxr-xr-x 16 root     root     4096 2012-03-02 15:57 ./
drwxr-xr-x 22 root     root     4096 2011-12-08 15:48 ../
drwxr-xr-x  3 ircuser  ircuser  4096 2012-03-02 15:57 ircuser/

/ EDIT

EDIT2:

seu erro:

** ERROR **: Couldn't create /home/myuser/_web/ircuser/.irssi directory aborting... Aborted

declara, ele não pode criar /home/myuser/_web/ircuser/.irssi que esteja em sua casa, não no diretório home do ircuser. / EDIT2

    
por 02.03.2012 / 16:00