我最近决定放弃 Windows,在我的计算机上安装 Linux。到目前为止,这是一个不错的体验。然而,让我担心的主要问题之一是,我可能无法像使用 Windows 10 那样控制风扇速度。宏碁不久前发布了一款控制风扇速度的实用程序,效果非常好。不过,幸运的是,我设法找到了一个在 Linux 上执行完全相同操作的 perl 脚本,当我使用 sudo 运行它时,它运行良好,但是,每当我不使用 sudo 运行它时,它都会给我一个关于 /dev/port 的访问被拒绝消息。
我希望能够在没有 root 访问权限的情况下运行该脚本,甚至为其编写一个 bash 脚本(甚至可能是一个像原始 Acer 应用程序一样的带有 GUI 的完整端口),但只要这个 /dev/port 问题仍然存在,我就什么也做不了,因为我总是需要输入我的密码。
我搜索了一下,我确实是 dialout 组的成员,重启并重新登录了好几次,但即使这样也帮不上忙。我也试过查看这个 perl 脚本的源代码,但我就是无法理解,因为它有很多汇编魔法。
我的问题是这样的:我想执行一个需要访问 /dev/port 的 perl 脚本,但不使用 sudo 运行它,但即使我在 dialout 组中,它仍然会给出错误。我做错了什么?
我猜测这个脚本所需要的端口不属于 dialout 组而是属于其他组,比如 tty,但我无法将自己添加到 tty 组。
无论如何,谢谢。
答案1
在我的系统上:
amias@rome:~$ ls -l /dev/port
crw-r----- 1 root kmem 1, 4 May 27 10:53 /dev/port
这表明您需要通过 sudo 运行它,我还会抵制开放 /dev/port 权限的诱惑,因为这会削弱您的安全性。
您可以做的是配置 sudo 以允许您以 root 身份运行该脚本而无需密码。
sudo visudo # launch the safe sudo config editor
然后在文件底部添加以下行,用您的值替换用户和脚本的路径
user localhost = (root) NOPASSWD: /full/path/to/script
明智的做法是让该脚本归 root 所有,并且除了 root 之外的任何人都无法写入,否则攻击者可能会发现它将以 root 身份运行,并可能插入其他可能危害系统的命令。