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

21

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

Nesse 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 corro o gksu e defino os mesmos parâmetros e ele funciona e não me pede a senha do usuário. Qual é o problema? E como eu resolvo isso?

Devo observar que o usuário foi criado assim

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

se faz alguma diferença ... suspiro.

user123361
fonte
você não está esquecendo a bandeira -c para lançar o irssi? (su -c irssi)
eephyne 15/01
tentei isso também ... tentou mil coisas ... por isso tão difícil de runas WTF é exatamente como a página homem quer ... mas nada acontece grrrr
user123361
poderia ser apenas que irssitem um problema e que o comando su funciona?
Nanne
Possui os direitos apropriados para executar o irssi?
Doka

Respostas:

28

Essa resposta ainda deve ajudá-lo, mesmo levando em consideração as edições da pergunta. Em particular, uma conta criada com --disabled-loginnenhuma senha definida e nenhum outro meio de logon , mas ainda deve ser possível usar sudo(explicado abaixo) para executar comandos ou um shell como usuário. É assim que a rootconta é configurada no Ubuntu.

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

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

Falhará se:

  • Não há irssiusuário.
  • A irssiconta do usuário está desativada.
  • A irssiconta do usuário está desativada para logon interativo. Às vezes, uma conta tem permissão para usar serviços como FTP, mas é proibida de efetuar login normalmente, definindo seu shell para algo que fecha imediatamente, como /bin/false. Em seguida, um login termina imediatamente, sem mensagem.
  • A senha que você está digitando não está correta para o irssiusuário.

A -sinalização faz com que o shell simule um shell de login inicial - ou seja, é realmente muito parecido com o logon como irssi. Sem o -sinalizador, se o sucomando for bem-sucedido, você ainda terá um shell de propriedade irssi, mas variáveis ​​de ambiente como HOMEseriam inalteradas.

Se você deseja executar um programa chamado irssi , invoque de forma sudiferente:

su username - -c irssi

Se você deixar de fora , é o mesmo que --it tenta executar o comando como root.-c username-c root

Como alternativa, você pode iniciar um shell e executar o comando :

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

Executando comandos como root

Se você deseja executar irssicomo root, sunão é o caminho para fazê-lo. Os logins de raiz são desativados por padrão no Ubuntu, e raramente há motivo para reativá-los . Se você ativou o rootlogin, poderá usar supara se tornar root. A razão pela qual é desnecessário ativar a rootconta é que, mesmo que você não o faça, você ainda pode executar comandos como rootem sudo.

Ao executar comandos sudo, você 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 rootem sudo(a menos que você reconfigure sudopara permitir que outros o façam, é claro). Portanto, um usuário que não tem permissão para administrar o sistema não pode executar comandos como rootcom sua própria senha.

Para executar irssicomo rootcom sudo:

sudo irssi

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

Exceto a senha digitada, isso faz o mesmo que:

su -c irssi

Exceto que a sudoversão pode ser bem-sucedida porque não exige que a rootconta seja ativada.

Assim como suvocê pode usar sudopara executar comandos como outro não rootusuário . Para executar irssicomo usernamecom sudo:

sudo -u username irssi

Se você deseja sudo se comportar como su -em relação aHOME - isto é, deseja usar as HOMEvariáveis ​​de ambiente do usuário de destino , pode executar sudocom o -Hsinalizador:

sudo -H irssi
sudo -H -u username irssi

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

sudo -s

E este comando tem o mesmo efeito que su -:

sudo -i

( iSignifica shell de login inicial .)

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

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

Leitura adicional sobre sudo

Para saber maissudo , dê uma olhada em:

Por que gksufuncionou quando sunão?

gksuprovavelmente funcionou executandosudo .

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

Você pode gksuusar sucomo front-end executando gksu --su-mode.

Você pode descobrir se gksuestá no sumodo ou no sudomodo e (se desejar) alterar essa configuração executando gksu-properties. Essa é uma configuração por usuário.

Quando gksuestá no sudomodo, ele se comporta da mesma forma que gksudo.

Leitura adicional sobre gksu


Análise pós-solução

Você acabou descobrindo que era capaz de executar o comando necessário com:

sudo -u username irssi

(Qual das técnicas listadas acima.)

Por fim, você relatou duas informações, suficientes para explicar por que outras técnicas falharam, mas foram bem-sucedidas:

  1. A usernameconta foi criada com o --disabled-loginsinalizador, o que faz com que não tenha senha (e nenhum outro meio de efetuar login). Não ter senha não significa que é possível fazer 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 usernamenão pode ser autenticado.

    Então, todas as susoluções baseadas estão disponíveis. sudopode funcionar, porque sudovocê não se autentica como o usuário que está prestes a se passar. Em vez disso, você deve estar autorizado a representá-los e se autenticar como você mesmo (por exemplo, digite sua própria senha, não a deles).

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

    sudo passwd username

    No entanto, pode haver uma boa razão para o usuário não ter permissão para fazer login. Por exemplo, se esse usuário tivesse permissão para fazer login e efetuar login graficamente, surgiriam problemas graves no ambiente do usuário ou privilégios inadequados para a execução de aplicativos X11 ? Se esse 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 desativá-lo novamente:

    sudo passwd -dl username

    Relacionado: Desativando a rootconta novamente depois de ativá-la temporariamente.

  2. A usernameconta tem /bin/falsecomo shell de logon.

    Quando um shell bashé executado como seu shell de login, ele configura seu ambiente e fornece um prompt interativo com o qual você pode controlar a máquina.

    Quando /bin/falseexecutado, por outro lado, não faz nada e relata falha . ( /bin/truenão faz nada e relata sucesso.)

    Os comandos falsee truesão úteis em scripts e para vários fins de teste, mas também para desabilitar uma conta para que, quando alguém faça login, sua sessão de logon termine imediatamente. Dessa forma, uma senha (ou outro meio de autenticação) pode ser ativada e as pessoas podem efetuar login, mas não para acessar o 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 sftpe scptransferir arquivos.

    Desde usernamelogin shell 's era não funcional, comandos como , , , e não podia trabalhar.su usernamesu - usernamesudo -u username -ssudo -u username -i

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

    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 cuidado, pois pode haver um bom motivo para desativar logons interativos para o usuário.

Aqui, usernameambos desabilitaram a senha e o shell "desabilitado". A ausência de uma senha de trabalho impedia o funcionamento de todas as susoluções baseadas, enquanto a ausência de um shell de logon interativo em funcionamento 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.

Eliah Kagan
fonte
Desculpe pelas muitas edições enquanto você trabalhava na sua resposta. Uau. Obrigado. Quando faço cat / etc / passwd, o usuário que configurei possui / bin / false no final - então é isso que está causando a falha? alguma idéia de como consertar isso?
precisa saber é o seguinte
Por qualquer motivo, usar o sudo -u nome de usuário irssi funciona. Obrigado pela sua resposta longa e bem explicada!
precisa saber é o seguinte
@db Estou feliz que funcionou! (Aliás, não é necessário se desculpar pela edição, a edição é muito, muito boa, e sua pergunta provavelmente será útil para outras pessoas também como consequência das edições.) Quanto às outras perguntas, editei minha resposta para inclua uma seção de análise no final.
Elias Kagan