在 Linux 上,在什么情况下(如果有的话),以非用户身份运行命令来root
访问文件/文件夹或使用创建/删除文件/文件夹sudo
可能会导致“权限被拒绝”,而以用户身份运行相同的命令root
则会成功?当然,假定用户是 sudoer。
Ubuntu 12 上的实际示例:我已获得该目录的/
所有权root:root
和drwxr-xr-x
权限,并且我sudo date > file
也尝试过sudo date | tee file
,但得到了相同的结果
-bash: file: Permission denied
两种情况都是如此。果然,如果我是 ,就不会有问题root
。这真是令人沮丧。
答案1
sudo 只会让被 sudo 的命令以 root 身份运行。偶尔会出现的实际差异是,在
sudo echo mem > /sys/power/state
(告诉内核暂停到 RAM)
它不起作用,因为你正在运行的 shell(作为普通用户)试图设置重定向到 /sys/power/state,但它没有写入权限。你可以以 root 身份运行子 shell 来成功完成此操作
sudo sh -c 'echo mem > /sys/power/state'
或者使用可以自行打开文件的程序,例如 dd:
echo mem | sudo dd of=/sys/power/state
或者先获取 root shell,例如使用“su”或“sudo -s”。
答案2
sudo 真的会让你 root 一段时间吗?
这手册页解释如下sudo
:
如果允许用户通过 sudo 运行任意命令,那么就没有简单的方法可以阻止该用户获得 root shell。
因此,如果您运行sudo something
并输入密码;那么,如果您不锁定终端,另一个用户将能够sudo su -
在 5 分钟内运行,这将使他能够访问 root shell,前提是您的 sudo 允许您运行任意命令。有关超时的更多信息,我将引用上述手册页中的相关部分:
sudoers 策略会将凭据缓存 5 分钟,除非在 中被覆盖
sudoers
。通过sudo
使用该-v
选项运行,用户无需运行命令即可更新缓存的凭据。
为何我被拒绝许可?
sudo
能不是篡改 bash 的工作方式,这就是为什么它无法很好地处理文件重定向等功能以及在命令之外工作的其他功能。为了避免这种情况,您必须要求 root shell 执行完整命令,这样它就会将重定向字符转发到 root 环境而不是对其进行解析。
正如其他用户所展示的,这很简单,只需运行
sudo bash -c 'date > file'
或者重写它,这样就不需要以 root 身份运行重定向参数,如下所示:
date | sudo tee file