Como executar um comando como um usuário cujo login está desabilitado?

20

Estou tentando usar o comando su para executar um aplicativo como outro usuário

Neste caso, estou tentando executar o irssi

blah@ubuntu: su - [username] irssi
(enter password)

blah@ubuntu:
(nothing happens)

blah@ubuntu: su - [username] -c irssi
(nothing)

Eu rodei o gksu e defini os mesmos parâmetros e ele funciona, e não me pede a senha do usuário. Qual é o problema? E como resolvo isso?

Devo observar que o usuário foi criado assim

adduser --system --disabled-login [username]

se faz alguma diferença ... suspiro.

    
por user123361 15.01.2013 / 07:53

1 resposta

27
  

Esta resposta ainda deve ajudá-lo, mesmo levando as edições para o   questão em consideração. Em particular, uma conta criada com    --disabled-login não tem senha definida e nenhum outro meio de registrar   em , mas ainda deve ser possível usar sudo (explicado abaixo)   para executar comandos ou um shell como o usuário. Isto é, de fato, como o   A conta root está configurada no Ubuntu.

Existem vários problemas com o comando su - irssi .

Este comando tenta iniciar um shell pertencente a um usuário chamado irssi .

Ele falhará se:

  • Não há irssi usuário.
  • A conta do usuário irssi está desativada.
  • A conta do usuário irssi está desativada para login interativo. Às vezes, é permitido que uma conta use serviços como o FTP, mas seja proibida de fazer logon normalmente, definindo o shell como algo que sai imediatamente, como /bin/false . Em seguida, um login termina imediatamente, sem mensagem.
  • A senha que você está inserindo não está correta para o usuário irssi .

O - flag faz com que o shell simule um shell de login inicial - ou seja, é muito parecido com o logon como irssi . Sem o sinalizador - , se o comando su for bem-sucedido, você ainda obterá um shell de propriedade de irssi , mas as variáveis ​​de ambiente como HOME não serão alteradas.

Se você quiser executar um programa chamado irssi , invoque su de maneira diferente:

su username - -c irssi

Se você deixar de fora -c username , será o mesmo que -c root - ele tentará executar o comando como root.

Alternativamente, você pode iniciar um shell e depois executar o comando :

  1. Inicie o shell com su username - .
  2. No shell, execute o comando ( irssi ).
  3. Se estiver pronto, deixe o shell executando exit .

Comandos em execução como root

Se você deseja executar irssi como root , su não é a maneira de fazer isso. Os logins de raiz são desativados por padrão no Ubuntu, e raramente há motivo para reativá-los . Se você tiver ativado root login, poderá usar su para se tornar root . A razão pela qual é desnecessário habilitar a conta root é que, independentemente de você fazer ou não, você ainda pode executar comandos como root com sudo .

Quando você executa comandos com sudo , coloca sua senha, não a senha do usuário sob cuja identidade você deseja que o comando seja executado . Somente administradores podem executar comandos arbitrários como root com sudo (a menos que você reconfigure sudo para permitir que outros o façam, é claro). Portanto, um usuário que não tem permissão para administrar o sistema não tem permissão para executar comandos como root com sua própria senha.

Para executar irssi como root com sudo :

sudo irssi

E você digitaria sua senha quando solicitado, não root 's.

Com exceção da senha que você digita, isso faz o mesmo que:

su -c irssi

Exceto que a versão sudo pode ser bem-sucedida porque não exige que a conta root seja ativada.

Assim como com su , você pode usar sudo para executar comandos como outro, diferente de root user . Para executar irssi como username com sudo :

sudo -u username irssi

Se você quiser que sudo se comporte como su - em relação a HOME - ou seja, você deseja usar as variáveis ​​de ambiente HOME do usuário de destino, pode executar sudo com o sinalizador -H :

sudo -H irssi
sudo -H -u username irssi

Você pode iniciar um shell inteiro com sudo , como acontece com su . Exceto por cuja senha você colocou, este comando tem o mesmo efeito que su :

sudo -s

E este comando tem o mesmo efeito que su - :

sudo -i

(O i representa o shell de login inicial .)

Você pode iniciar um shell como outro usuário também:

sudo -u username -s
sudo -u username -i

Leitura adicional em sudo

Para saber mais sobre sudo , consulte:

Por que gksu funcionou quando su não?

gksu provavelmente funcionou executando sudo .

gksu é uma interface para ambos su e sudo .No Ubuntu, o padrão é usar sudo (já que no Ubuntu, su normalmente não é usado para se tornar root e é apenas uma maneira secundária de se tornar outros usuários que não são root ).

Você pode tornar gksu use su como o front-end executando gksu --su-mode .

Você pode descobrir se gksu está no modo su ou sudo e (se desejar) alterar essa configuração, executando gksu-properties . Esta é uma configuração por usuário.

Quando gksu está no modo sudo , ele se comporta da mesma forma que gksudo .

Leitura adicional em gksu

Análise pós-solução

Você descobriu que conseguiu executar o comando necessário com:

sudo -u username irssi

(Que é uma das técnicas listadas acima.)

Em última análise, você relatou duas informações, que são suficientes para explicar por que outras técnicas falharam, mas que foram bem sucedidas:

  1. A conta username foi criada com o sinal --disabled-login , o que a torna sem senha (e nenhum outro meio de login). Não ter senha não significa que é possível fazer o login com uma senha em branco . Isso significa que nenhuma senha é suficiente para autenticar. Em combinação com a eliminação de outros meios de autenticação, isso significa que username não pode ser autenticado.

    Portanto, todas as soluções baseadas em su estão fora. sudo pode funcionar, porque com sudo você não autentica como o usuário que está prestes a representar. Em vez disso, você precisa estar autorizado para personificá-los e autenticá-los como você mesmo (ou seja, digite sua própria senha, não a deles).

    É possível definir uma senha na conta, o que remove essa barreira ao login:

    sudo passwd username

    No entanto, pode haver uma boa razão para o usuário não ter permissão para efetuar login. Por exemplo, se esse usuário tiver permissão para efetuar login e se conectar graficamente, problemas graves surgirão do ambiente do usuário ou privilégios serão inadequadamente executando aplicativos X11? Se este usuário pudesse fazer logon, isso tornaria possível fazer logon remotamente como esse usuário (para máquinas nas quais você expôs serviços de rede)?

    Se você quiser desabilitá-lo novamente:

    sudo passwd -dl username

    Relacionados: Desativando a conta root depois de ter sido ativada temporariamente.

  2. A conta username tem /bin/false como seu shell de login.

    Quando um shell como bash é executado como seu shell de login, ele configura seu ambiente e fornece um prompt interativo para controlar a máquina.

    Quando /bin/false é executado, por outro lado, não faz nada e informa falha . ( /bin/true não faz nada e reporta sucesso.)

    Os comandos false e true são úteis no script e para várias finalidades de teste, mas também para desabilitar uma conta para que, quando alguém fizer login, sua sessão de login termine imediatamente. Dessa forma, uma senha (ou outros meios de autenticação) pode ser ativada, e as pessoas podem efetuar login, mas não para acesso ao shell . Por exemplo, se houver um servidor FTP, eles ainda poderão acessar sua conta via FTP. Se houver um servidor SSH, eles não poderão obter um shell via SSH, mas ainda poderão usar sftp e scp para transferir arquivos.

    Como o shell de login do username não era funcional, os comandos como su username , su - username , sudo -u username -s e sudo -u username -i não funcionaram.

    Mas os comandos que não fornecem um shell, como sudo -u username command ou su username -c 'command' , ainda podem funcionar.

    Como os comandos podem ser executados, você pode alterar o shell de login do usuário para algo funcional:

    sudo chsh -s /bin/bash username

    No entanto, isso também deve ser feito com cautela, pois pode haver um bom motivo para desabilitar logins interativos para o usuário.

Aqui, username ambos desativaram a senha e shell "desativado". A ausência de qualquer senha de trabalho impedia que todas as soluções baseadas em su funcionassem, enquanto a ausência de um shell de login interativo funcional impedia que todas as soluções de geração de shell funcionassem (exceto invocar manualmente um shell, como sudo -u username bash ).

sudo -u username command é o que restou.

    
por Eliah Kagan 15.01.2013 / 08:57

Tags