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.
irssi
tem um problema e que o comando su funciona?Respostas:
Há vários problemas com o comando
su - irssi
.Este comando tenta iniciar um shell pertencente a um usuário chamado
irssi
.Falhará se:
irssi
usuário.irssi
conta do usuário está desativada.irssi
conta 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.irssi
usuário.A
-
sinalização faz com que o shell simule um shell de login inicial - ou seja, é realmente muito parecido com o logon comoirssi
. Sem o-
sinalizador, se osu
comando for bem-sucedido, você ainda terá um shell de propriedadeirssi
, mas variáveis de ambiente comoHOME
seriam inalteradas.Se você deseja executar um programa chamado
irssi
, invoque de formasu
diferente: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 :
su username -
irssi
).exit
.Executando comandos como
root
Se você deseja executar
irssi
comoroot
,su
nã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 oroot
login, poderá usarsu
para se tornarroot
. A razão pela qual é desnecessário ativar aroot
conta é que, mesmo que você não o faça, você ainda pode executar comandos comoroot
emsudo
.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 comoroot
emsudo
(a menos que você reconfiguresudo
para 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 comoroot
com sua própria senha.Para executar
irssi
comoroot
comsudo
:E você digitaria sua senha quando solicitado, não
root
.Exceto a senha digitada, isso faz o mesmo que:
Exceto que a
sudo
versão pode ser bem-sucedida porque não exige que aroot
conta seja ativada.Assim como
su
você pode usarsudo
para executar comandos como outro nãoroot
usuário . Para executarirssi
comousername
comsudo
:Se você deseja
sudo
se comportar comosu -
em relação aHOME
- isto é, deseja usar asHOME
variáveis de ambiente do usuário de destino , pode executarsudo
com o-H
sinalizador:Você pode iniciar um shell inteiro com
sudo
, como você pode comsu
. Exceto por cuja senha você inseriu, este comando tem o mesmo efeito quesu
:E este comando tem o mesmo efeito que
su -
:(
i
Significa shell de login inicial .)Você também pode iniciar um shell como outro usuário:
Leitura adicional sobre
sudo
Para saber mais
sudo
, dê uma olhada em:sudo
site upstream (pelo autor desudo
).man sudo
Por que
gksu
funcionou quandosu
não?gksu
provavelmente funcionou executandosudo
.gksu
é uma interface para ambossu
esudo
. No Ubuntu, o padrão é usarsudo
(já que no Ubuntu,su
normalmente não é usado para se tornarroot
, e é apenas uma maneira secundária de se tornar outros não-root
usuários).Você pode
gksu
usarsu
como front-end executandogksu --su-mode
.Você pode descobrir se
gksu
está nosu
modo ou nosudo
modo e (se desejar) alterar essa configuração executandogksu-properties
. Essa é uma configuração por usuário.Quando
gksu
está nosudo
modo, ele se comporta da mesma forma quegksudo
.Leitura adicional sobre
gksu
sudo
".man gksu
gksu
site upstream (pelos fabricantes degksu
).gksu
vs.gksudo
no Ubuntu.Análise pós-solução
Você acabou descobrindo que era capaz de executar o comando necessário com:
(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:
A
username
conta foi criada com o--disabled-login
sinalizador, 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, issousername
não pode ser autenticado.Então, todas as
su
soluções baseadas estão disponíveis.sudo
pode funcionar, porquesudo
você 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:
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:
Relacionado: Desativando a
root
conta novamente depois de ativá-la temporariamente.A
username
conta tem/bin/false
como 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/false
executado, por outro lado, não faz nada e relata falha . (/bin/true
não faz nada e relata sucesso.)Os comandos
false
etrue
sã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 usarsftp
escp
transferir arquivos.Desde
username
login shell 's era não funcional, comandos como , , , e não podia trabalhar.su username
su - username
sudo -u username -s
sudo -u username -i
Mas comandos que não fornecem um shell, como ou ainda podem funcionar.
sudo -u username command
su username -c 'command'
Como os comandos podem ser executados, você pode alterar o shell de login do usuário para algo funcional:
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,
username
ambos desabilitaram a senha e o shell "desabilitado". A ausência de uma senha de trabalho impedia o funcionamento de todas assu
soluçõ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.fonte