我有一个我编写的程序,它可以访问硬件(设备文件)并且需要 root 权限才能运行。我希望这个程序可以由非特权用户执行,而不需要 root 密码。我已经尝试通过sudo chmod u+s programName
重新启动来修改权限,但是程序然后程序将无法运行sudo ./programName
我记得在 12 年前这样做过,但我现在想不通。有小费吗?
我有一个我编写的程序,它可以访问硬件(设备文件)并且需要 root 权限才能运行。我希望这个程序可以由非特权用户执行,而不需要 root 密码。我已经尝试通过sudo chmod u+s programName
重新启动来修改权限,但是程序然后程序将无法运行sudo ./programName
我记得在 12 年前这样做过,但我现在想不通。有小费吗?
如果您将程序可执行文件的所有者设置
root
为然后将其 setuid 位设置为
那么您之后不需要重新启动,也不需要使用
sudo
. 按名称正常启动程序将以 root 权限执行。然而,这将允许任何用户以 root 权限运行该程序,因此您应该非常确定您以这样一种方式对其进行了编程,它不会被滥用来执行您想要使用 root 权限以外的其他操作。第一步是必不可少的。setuid 位的作用是使程序以文件所有者的 UID 运行。如果该所有者不是
root
那么程序将没有 root 权限,即使您使用 运行它也是如此sudo
,因为 setuid 位会覆盖sudo
.因此,要么使用运行您的程序,
sudo
要么使用设置 setuid 位chmod u+s
,但不能同时使用两者。注意:与其以 root 权限运行您的程序,不如设置它访问的设备文件的权限,以允许运行它的普通用户获得必要的访问权限。