Como posso obter um shell interativo como outro usuário não root?

14

Estou usando o servidor Ubuntu 10.04 LTS, com o modelo de segurança padrão (root bloqueado, usando sudopara elevar privilégios). Ocasionalmente, gosto de usar sudo -iquando vou precisar executar uma série de comandos com privilégios elevados ou quando preciso vasculhar diretórios com privilégios somente de raiz.

Às vezes, ao configurar o software que será executado como sua própria conta de sistema não privilegiada ( adduser --system --group --no-create-home --disabled-login some-daemon-user), acho que preciso executar uma sequência de comandos como esse usuário , em vez de eu ou o root. Eu tentei usar sudo -i -u some-daemon-user, mas ele retorna um 1status sem nenhuma mensagem de erro.

Eu verifiquei o syslog, messages, auth, e debugarquivos de log em /var/loge nenhum deles inclui quaisquer mensagens que de referência sudoou a conta em questão.

Então, é possível se tornar outro usuário não root, no estilo sudo, sem apenas definir uma senha e fazer login (como eles)? Meu sistema está "quebrado" de alguma forma ou estou fazendo errado?

Calrion
fonte

Respostas:

14

Ahmm .. o problema é que o shell padrão desses usuários normalmente é definido /bin/falsee por razões de segurança você não deve alterar isso. Mas você ainda pode executar, por exemplo:sudo -u www-data /bin/sh

Paul Hänsch
fonte
1
Você pode dar mais detalhes sobre as "razões de segurança"? É diferente se eu usar sudoum shell como usuário, como Florian sugere acima?
Calrion # 29/12
1
O motivo é que qualquer invasor que efetue um logon como usuário do sistema, ou seja, explorando um bug no programa de logon, tem menos probabilidade de ter um shell válido. Portanto, você deve deixar a configuração como está no arquivo / etc / passwd, mesmo que seja apenas por um bom karma. Invocar o shell diretamente via sudo não tem relação com isso.
Paul Hänsch
Portanto, o problema é definir um shell no passwdarquivo, na verdade, não executar um shell como usuário. Peguei vocês!
Calrion # 29/12
9

sudo -iexecuta o shell especificado pela entrada do banco de dados de senha do usuário de destino, que é /bin/falsepara o usuário do sistema.

Usar

 sudo -u some-daemon-user bash

ou

sudo -u some-daemon-user -H bash

se você deseja definir a variável de ambiente $ HOME definida para o usuário de destino.

Florian Diesch
fonte