如何以root用户身份进入目录?


10

假设有一个我没有权限访问的目录。显然是sudo cd foo行不通的,因为cd每个外壳中都内置有一个外壳。

到目前为止,我一直在使用sudo bash(是的,我知道有更好的方法)来获取根提示。然后,我可以cd进入目录进行浏览。

有一个更好的方法吗?


为什么要cd成为root用户(除非实际上您在root shell中)?
2014年

如果目录由root拥有,并且没有全局执行
strugee 2013年

1
那确实不是一个有效的案例。能够读取目录可能很有用,但是不需要目录成为您的工作目录,即您不需要cd
2014年

是的,直到接受的答案指出我可以的时候,我才意识到sudo ls
奋斗

Answers:


12

不,没有一种方法可以cd访问仅允许root用户而不允许root用户的目录。确实不应有太多有此限制的目录。在大多数情况下,访问给定文件受到限制,例如下的/etc/shadow文件或特定日志文件/var/log

您可以sudo ls <dir>代替来查看它们bash。同样,当sudo您成为root用户时,通常需要设置user(su命令)而不是bash,因此请使用以下命令:

$ sudo su -

您还可以使用sudo的-i开关完成相同的操作:

$ sudo -i

有关手册页的摘录 sudo -i

-i(模拟初始登录)选项将在目标用户的passwd(5)条目中指定的外壳作为登录外壳运行。这意味着Shell将读取特定于登录的资源文件,例如.profile或.login。如果指定了命令,则将其传递到外壳程序以执行。否则,将执行交互式外壳程序。

对于无法访问的文件,可以使用以下两个sudo命令之一:

$ sudo tail /var/log/messages

$ sudo less /etc/shadow

3
为什么要使用sudo su -代替sudo -i?它们都为您提供了所有超级用户特权,尽管您需要的只是CAP_DAC_READ_SEARCH功能。
斯特凡Chazelas

@StephaneChazelas-我以前从未注意到过这种切换。我最初的介绍sudo是通过Solaris环境进行的sudo,那里的版本不包含此开关。通过sudo changelog查看,似乎在2004年添加了该选项。猜猜我正在为此约会,但您问了8-)。我将修改答案以同时包含两者,谢谢!
slm

@StéphaneChazelas我同意。我更喜欢,sudo -Hi因为它也设置了主目录(在我的发行版中默认不设置主目录,默认设置可能有所不同)。如果不这样做,如果它在其中创建了新文件,那么最终可能会在您的家庭中拥有根目录拥有的文件。
doug65536


0

是的,你不能。不过,有一种解决方法:

sudo sh -c "cd restricted-dir; some_command"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.