
Existe uma maneira de executar o cd
comando com privilégios de superusuário para obter acesso aos diretórios que pertencem ao root? Quando corro sudo cd <path>
, eu consigo sudo: cd: command not found
.
Responder1
A outra resposta não está errada.
Possivelmente uma resposta melhor é:
A ferramenta sudo destina-se a realizar ações como superusuário, e você está descrevendo algo que é mais uma mudança de estado que precederia ações como 'ls' ou 'vi' ou outras para torná-las mais simples.
Eu sugiro, por exemplo, se você quiser editar um arquivo em /root/private/:
sudo ls /root
sudo ls /root/private
sudoedit /root/private/<name from previous ls command>
Definitivamente, isso é mais digitado e um pouco mais difícil do que apenas alterar diretórios. No entanto, édistantemais auditável e muito mais alinhado com os princípios por trás do sudo do que executar alguma variante do 'sudo bash'.
Se você estiver trabalhando em um ambiente seguro, sua equipe de IA agradecerá. Se você estiver se perguntando: "Que mudança eu fiz outro dia?", entãovocêagradecerá, porque você não terá que se perguntar qual arquivo ou arquivos você editou.
Dito isso, habilitar e executar alguma forma de ‘sudo bash’ é definitivamente mais fácil. Se você estava procurando algo mais fácil, por que está usando 'sudo' em primeiro lugar, em vez de apenas fazer login como root?
Responder2
Como você observou, cd
é um comando interno do shell ehá uma razãopara isso: o "diretório atual" é um parâmetro por processo que só pode ser alterado pelo processoem si.
O diretório de trabalho do seu shell não pode ser alterado por nenhum processo filho - portanto, mesmo que você consiga executar cd
em um subshell privilegiado, ele apenas alterará o diretório de trabalho desse subshell temporário, e não importa qual método de aumento de privilégios você usa.
Então, para sudo cd
funcionar, o próprio sudo teria que ser um shell embutido e precisaria de alguma forma de aumentar os privilégios de um processo já em execução. Atualmente não existe tal mecanismo no Linux (nem na maioria dos outros sistemas operacionais).
Uma maneira de conseguir o que você deseja é administrar uminterativoshell com privilégios de root (qualquer método funciona) e apenas use o regular cd
nele:
[user@host /]$ sudo bash
[root@host /]# cd /root/secret
Se você quiser fazer tudo em um comando, teria que ficar assim – primeiro mude o diretório de trabalho e depois inicie um shell interativo:
sudo bash -c "cd /root/secret && bash"
su -c "cd /root/secret && zsh"
Nota: O comando externo não precisa ser um shell, apenas precisa seralgoque muda seu diretório de trabalho e executa um novo comando. Os sistemas Linux recentes têm um ou dois auxiliares que podem ser usados:
sudo nsenter --wd="/root/secret" bash # util-linux v2.23 (debian jessie)
sudo env --chdir="/root/secret" bash # coreutils v8.28 (debian buster)
A vantagem deste método é que ele não requer aspas aninhadas; você pode executar um comando com várias palavras sem problemas com espaços em branco ou caracteres especiais.
Finalmente, alguns programas possuem uma opção integrada para alterar seu diretório de trabalho:
sudo make -C /etc
sudo git -C /root/secret log
Responder3
A maneira mais rápida de fazer o que eu precisava era esta:
sudo -s
Conforme descrito emesta resposta.