Como posso cd em um diretório como root?

10

Digamos que exista um diretório que eu não tenha privilégios para acessar. Obviamente sudo cd foonão funcionará, porque cdexiste um shell em todos os shell de todos os tempos.

Até agora, acabei de usar sudo bash(sim, eu sei que existem maneiras melhores) para obter um prompt de root. Então, eu posso cdentrar no diretório para bisbilhotar.

Existe uma maneira melhor de fazer isso?

strugee
fonte
Por que você gostaria de cdser root (a menos que esteja de fato em um shell raiz)?
tripleee
Se um diretório foi detida pela raiz e não havia mundial executar
strugee
1
Esse não é realmente um caso válido. Pode ser útil poder ler o diretório, mas isso não exige que o diretório seja seu diretório de trabalho, ou seja, você não precisa cd.
tripleee
Sim, eu não percebi isso até que a resposta aceita apontou que eu poderia sudo ls.
strugee

Respostas:

12

Não, não existe um caminho para cdum diretório que permita apenas root sem ser root. Realmente não deveria haver muitos diretórios com essa limitação. Na maioria das vezes, o acesso a um determinado arquivo é limitado, como o /etc/shadowarquivo ou arquivos de log específicos /var/log.

Você pode usar sudo ls <dir>para vê-los em vez de bash. Além disso, ao usar sudopara se tornar root, você normalmente deseja definir usuário ( sucomando) em vez de bash, portanto, use este comando:

$ sudo su -

Você também pode realizar a mesma coisa com a -iopção de um sudo :

$ sudo -i

trecho da página de manual sobre sudo -i

A opção -i (simular login inicial) executa o shell especificado na entrada passwd (5) do usuário de destino como um shell de login. Isso significa que os arquivos de recursos específicos de login, como .profile ou .login, serão lidos pelo shell. Se um comando for especificado, ele será passado para o shell para execução. Caso contrário, um shell interativo é executado.

Para os arquivos que você não pode acessar, você pode usar um destes sudocomandos:

$ sudo tail /var/log/messages

$ sudo less /etc/shadow
slm
fonte
3
Por que você usaria em sudo su -vez de sudo -i? Ambos oferecem todos os privilégios de superusuário, embora tudo o que você precise seja do recurso CAP_DAC_READ_SEARCH.
Stéphane Chazelas
@StephaneChazelas - Eu nunca notei essa mudança antes. Minha introdução original sudofoi através de ambientes Solaris e a versão do sudoque estava lá não incluía essa opção. Observando o changelog do sudo , parece que essa opção foi adicionada em 2004. Acho que estou namorando com isso, mas você perguntou 8-). Vou alterar a resposta para incluir os dois, obrigado!
slm
@ StéphaneChazelas eu concordo. Eu prefiro sudo -Hiporque ele define o diretório inicial também (ele não define o início por padrão na minha distribuição, o padrão pode variar). Caso contrário, você poderá acabar com arquivos de propriedade raiz em sua casa, se ele criar novos arquivos lá.
precisa saber é o seguinte
5

Não, não existe. Você precisa de um shell executando como root.

Ignacio Vazquez-Abrams
fonte
E, como apontado nos comentários, é inútil, a cdmenos que você esteja executando um shell ou um processo comparável.
tripleee
0

Certo, você não pode. Aqui está uma solução alternativa:

sudo sh -c "cd restricted-dir; some_command"
Tagar
fonte