我的操作系统是 Debian9,我需要smartctl
在脚本中使用命令来获取一些硬盘信息。但由于普通用户有一些特殊的环境变量,我无法通过 执行此脚本sudo
。所以我执行命令ls -l /dev/ | grep sd
,发现 的组/dev/sdb
是disk
。所以我编辑/etc/group
将普通用户添加到该disk
组。然后运行脚本,它仍然显示Smartctl open device: /dev/sda failed: Permission denied
。我该如何解决这个问题?谢谢大家!
答案1
好吧,我找到办法了。
sudo chmod u+s /usr/sbin/smartctl
sudo ln /usr/sbin/smartctl /usr/bin/smartctl
这样我终于可以在不使用 sudo 的情况下执行命令了。
答案2
不要通过 sudo 运行整个脚本;将其更改为仅通过 sudo 运行 smartctl。
或者,使用 /etc/sudoers 选项env_keep
来保留环境变量:
Defaults env_keep += "EDITOR VISUAL PAGER"
Defaults!someuser env_keep += "API_CLIENT_ID API_CLIENT_SECRET"
授予系统磁盘的完全读/写访问权限会产生巨大的安全问题 - 用户现在可以读取/写入属于任何用户的所有文件;例如,他们甚至可以恢复已删除的数据,或覆盖 /etc/sudoers 并授予自己无限制的 root 访问权限。
除此之外,使用 SG_IO 的 SCSI 命令需要比普通设备写入更多的权限 - 通常它们需要进程能力例如 CAP_SYS_ADMIN 或 CAP_SYS_RAWIO。分配这些权限本质上使用户根除了名字之外,什么都做不了。