Quando eu faço o su -root, meu diretório atual é definido como home do root. Existe alguma maneira de manter o diretório atual em que eu estava, assim como sudo -s. Ou é a resposta para usar o sudo?
Observe que eu não quero parecer grosseiro, mas por que esse problema não é resolvido via "man su"?
Myrrdyn 17/06/09
1
@Rory, por favor, leia o comentário de
Myrrdyn
Eu gosto de usar sudo su -c "zsh", no meu caso, me mantém no diretório atual e carrega o zsh como shell com o usuário root. ctrl+ddepois e você volta ao usuário atual. Para o diretório, funciona diretamente em centos para mim, mas talvez adicionar o comando `&& cd $ (pwd)` dentro do comando passado possa fazer o truque.
GabriLouRoux
As documentações do @Myrrdyn são ótimas quando você sabe o que está procurando. Caso contrário, pedir conselhos a especialistas é mais rápido e mais didático.
Romain Vincent
Respostas:
18
É sempre melhor usar o sudo, se possível, porque você não precisa saber (ou dar a alguém) a senha do root. Defina a senha root como algo longo e horrível e, em seguida, tranque-a em um cofre.
Se você quiser negar o acesso de alguém mais tarde, basta remover o acesso ao sudo, em vez de precisar ensinar a todos os outros uma nova senha root.
No entanto - você não precisa usar o parâmetro '-' se não quiser. Você obterá um shell como root, ele não será apenas um shell de login (portanto, não executará o .profile do root).
No meu caso, eu precisava do alias para fazer algo assim asuser git reset --hard. Mas su - <user> -m -c "git reset --hard"e sudo -u <user> git reset --hardsalvaria meu ambiente e o git tentaria ler a configuração do git do usuário atual . Então, eu só queria afirmar que às vezes a solução do user205705 usando su - <user> -c "cd pwd; bash" é melhor.
ReFruity
16
Concordo que o sudo é quase sempre uma resposta melhor, mas responder a outra parte da pergunta ...
O '-' em 'su -' indica que você deseja emular um logon de superusuário, em vez de apenas executar com privilégios de superusuário.
Se você usar 'su' simples em vez de 'su -', permanecerá no mesmo diretório; no entanto, você também estará executando no mesmo ambiente; portanto, pode ser necessário modificar seu caminho para acessar alguns comandos de administrador.
Não vejo como isso é diferente de apenas "su" por si só, além de possivelmente não redefinir o ambiente PATH, que é um possível problema de segurança.
David Pashley
O @DavidPashley, por exemplo, executa o .bashrcdo usuário externo, não o raiz.
26917 phil294
3
Use sudo :). Sério, você não precisa de su. 'sudo' é melhor, pois você o usa apenas para comandos privilegiados e pode ajudar a evitar erros. Você também recebe responsabilidade.
Se você realmente deseja usar su, existe uma maneira de permanecer no mesmo diretório.
su - <user> -c "cd `pwd`; bash"
O que está acontecendo aqui:
su - <user> = faça login como
-c o que significa "executar um comando no shell do novo
-c "cd `pwd`" o comando que damos é alternar para o direcotory atual ( pwd) - mas, como usamos os backticks, o pwdcomando é avaliado antes de executar o sucomando, para que realmente mudemos para o diretório em que estamos no NOW como usuário antigo. O único problema aqui é que o novo shell sai logo após a execução do comando, então adicionamos:
-c "cd `pwd`; bash" o que significa "executar bash(novo shell) depois de executar o cdcomando, e o shell bash não sai até que o encerramos .
Esta é realmente a única resposta para a pergunta. Bom trabalho!
Cacahuete Frito
Na verdade, su - [user] -c "cd $(pwd); bash"pode ser um pouco melhor (mude os backticks para $()).
Cacahuete Frito 09/02
2
Se você usar "su", ele executa um shell interativo. É o mesmo que "sudo -s". "su -" cria um shell de logon, que substituirá o ambiente. "sudo -i" é o equivalente a sudo. Se você estiver tentando obter um shell interativo, sempre use o formulário sudo -i (ou su -), ou é possível obter permissões de arquivo estranhas no diretório inicial do usuário.
você deve modificar a fonte de su para fazer esse trabalho. há uma chamada chdir em um procedimento de inicializar variáveis do ambiente. comentar esses estados incluídos nessa chamada. e agora, você pode executar "su -", mas mantém o diretório atual.
sudo su -c "zsh"
, no meu caso, me mantém no diretório atual e carrega o zsh como shell com o usuário root.ctrl+d
depois e você volta ao usuário atual. Para o diretório, funciona diretamente em centos para mim, mas talvez adicionar o comando `&& cd $ (pwd)` dentro do comando passado possa fazer o truque.Respostas:
É sempre melhor usar o sudo, se possível, porque você não precisa saber (ou dar a alguém) a senha do root. Defina a senha root como algo longo e horrível e, em seguida, tranque-a em um cofre.
Se você quiser negar o acesso de alguém mais tarde, basta remover o acesso ao sudo, em vez de precisar ensinar a todos os outros uma nova senha root.
No entanto - você não precisa usar o parâmetro '-' se não quiser. Você obterá um shell como root, ele não será apenas um shell de login (portanto, não executará o .profile do root).
fonte
asuser git reset --hard
. Massu - <user> -m -c "git reset --hard"
esudo -u <user> git reset --hard
salvaria meu ambiente e o git tentaria ler a configuração do git do usuário atual . Então, eu só queria afirmar que às vezes a solução do user205705 usando su - <user> -c "cdpwd
; bash" é melhor.Concordo que o sudo é quase sempre uma resposta melhor, mas responder a outra parte da pergunta ...
O '-' em 'su -' indica que você deseja emular um logon de superusuário, em vez de apenas executar com privilégios de superusuário.
Se você usar 'su' simples em vez de 'su -', permanecerá no mesmo diretório; no entanto, você também estará executando no mesmo ambiente; portanto, pode ser necessário modificar seu caminho para acessar alguns comandos de administrador.
fonte
Se você usar
su
sem o-
, ele deverá mantê-lo em seu diretório atual.-
,-l
Ou--login
dizer a su a:Ou apenas use o sudo, ele tem muitas outras vantagens. Ou chaves ssh.
fonte
Você definitivamente deveria usar o sudo.
Isso o manterá na pasta quando você mudar para o root.
Benefícios do uso do sudo
fonte
.bashrc
do usuário externo, não o raiz.Use sudo :). Sério, você não precisa de su. 'sudo' é melhor, pois você o usa apenas para comandos privilegiados e pode ajudar a evitar erros. Você também recebe responsabilidade.
fonte
Se você realmente deseja usar
su
, existe uma maneira de permanecer no mesmo diretório.O que está acontecendo aqui:
su - <user>
= faça login como-c
o que significa "executar um comando no shell do novo-c "cd `pwd`"
o comando que damos é alternar para o direcotory atual (pwd
) - mas, como usamos os backticks, opwd
comando é avaliado antes de executar osu
comando, para que realmente mudemos para o diretório em que estamos no NOW como usuário antigo. O único problema aqui é que o novo shell sai logo após a execução do comando, então adicionamos:-c "cd `pwd`; bash"
o que significa "executarbash
(novo shell) depois de executar ocd
comando, e o shell bash não sai até que o encerramos .fonte
su - [user] -c "cd $(pwd); bash"
pode ser um pouco melhor (mude os backticks para$()
).Se você usar "su", ele executa um shell interativo. É o mesmo que "sudo -s". "su -" cria um shell de logon, que substituirá o ambiente. "sudo -i" é o equivalente a sudo. Se você estiver tentando obter um shell interativo, sempre use o formulário sudo -i (ou su -), ou é possível obter permissões de arquivo estranhas no diretório inicial do usuário.
fonte
você deve modificar a fonte de su para fazer esse trabalho. há uma chamada chdir em um procedimento de inicializar variáveis do ambiente. comentar esses estados incluídos nessa chamada. e agora, você pode executar "su -", mas mantém o diretório atual.
fonte