the*_*uru 9 linux cd sudo working-directory
有没有办法以cd
超级用户权限运行命令来访问 root 拥有的目录?当我跑步时sudo cd <path>
,我得到了sudo: cd: command not found
。
use*_*686 23
正如您所指出的,cd
是 shell 内置命令,这是有原因的:“当前目录”是每个进程的参数,只能由进程本身更改。
任何子进程都无法更改您的 shell 的工作目录——因此,即使您设法cd
在特权子 shell 中运行,它也只会更改该临时子 shell 的工作目录,并且您使用的提升特权的方法无关紧要。
所以为了sudo cd
工作,sudo 本身必须是一个内置的 shell,它需要一些方法来提高已经运行的进程的权限。目前,Linux 上不存在这种机制(大多数其他操作系统也不存在)。
实现您想要的一种方法是运行具有 root 权限的交互式shell(任何方法都有效),然后只使用其中的常规cd
:
[user@host /]$ sudo bash
[root@host /]# cd /root/secret
Run Code Online (Sandbox Code Playgroud)
如果您想在一个命令中完成所有操作,它必须如下所示——首先更改工作目录,然后启动一个交互式 shell:
sudo bash -c "cd /root/secret && bash"
Run Code Online (Sandbox Code Playgroud)
su -c "cd /root/secret && zsh"
Run Code Online (Sandbox Code Playgroud)
注:外部命令没有成为一个壳,它只是需要一些改变它的工作目录并执行新的命令。最近的 Linux 系统有一个或两个可以使用的帮助程序:
sudo nsenter --wd="/root/secret" bash # util-linux v2.23 (debian jessie)
Run Code Online (Sandbox Code Playgroud)
sudo env --chdir="/root/secret" bash # coreutils v8.28 (debian buster)
Run Code Online (Sandbox Code Playgroud)
这种方法的优点是不需要嵌套引用;您可以运行多字命令而不会遇到空格或特殊字符的问题。
最后,一些程序有一个内置选项来改变它们的工作目录:
sudo make -C /etc
Run Code Online (Sandbox Code Playgroud)
sudo git -C /root/secret log
Run Code Online (Sandbox Code Playgroud)
Sla*_*ast 22
另一个答案没有错。
可能更好的答案是:
sudo 工具旨在以超级用户的身份执行操作,并且您描述的内容更多是状态更改,该更改将在诸如 'ls' 或 'vi' 或其他操作之前进行,以使它们更简单。
我建议,例如,如果您想编辑 /root/private/ 中的文件:
sudo ls /root
sudo ls /root/private
sudoedit /root/private/<name from previous ls command>
Run Code Online (Sandbox Code Playgroud)
这肯定是更多的打字,而且比仅仅改变目录要困难一些。但是,它是远远更加审计能力,并在网上与比运行的一些变种须藤背后的原则更“sudo的庆典。”
如果您在安全的环境中工作,您的 IA 团队会感谢您。如果您发现自己想知道:“前几天我做了什么更改?”,那么您会感谢您,因为您不必想知道您编辑了什么文件。
综上所述,启用和执行某种形式的“sudo bash”肯定更容易。如果您正在寻找更简单的方法,为什么首先使用“sudo”而不是仅以 root 用户身份登录?
归档时间: |
|
查看次数: |
5910 次 |
最近记录: |