Sudoers 文件权限

Sudoers 文件权限

我正在尝试运行以下命令,而无需 sudo:

echo 1 | sudo tee -a /sys/block/$hd/device/delete

对于我的驱动器托架中的每个 HDD,$hd 变量都会从 sdb -> sdi 动态变化。

我在 sudoers 文件中添加了以下行:

operator ALL=/sys/block/sdb/device/delete

但这并没有什么区别,即使我运行它仍然要求输入 sudo 密码:

echo 1 | sudo tee -a /sys/block/sdb/device/delete

答案1

sudoers行只能指向您要运行的命令,而不是目标输出文件。该行下面的任何内容/sys都是将字符写入的特殊设备。

您要做的就是创建一个脚本,该脚本将echo 1 > /sys/block/$hd/device/delete检查 $hd 是否与正则表达式匹配/sd[b-i]/。将 sudo 命令指向该脚本,而不是您拥有它的位置。

此外,迈克尔·汉普顿是对的:有人将要运行您不想弄乱的删除命令。如果您没有适当的备份,那么您的数据就不存在了。

答案2

将您的代码放入脚本中(您正在编写脚本,对吗?)并授予用户sudo访问该脚本的权限。

最终它看起来可能像这样:

#!/bin/bash
for kill_this_disk in /sys/block/sd[b-i]/device/delete
do
    echo 1 > $kill_this_disk
done

并且,我希望您有好的备份。

答案3

我不认为 **operator ALL=/sys/block/sdb/device/delete ** 能够让您以非 root 身份访问该设备。sudoers 允许您指定以 sudo 身份运行时不会查询密码的命令(例如此处的“tee”)。您的问题来自 /sys/block/$hd/device/delete 的权限...

答案4

也许您需要在 sudoers 配置文件中使用 NOPASSWD 选项。我相信语法是这样的:

operator ALL=NOPASSWD:/sys/block/sdb/device/delete

相关内容