如果我在 Linux 上编写程序,我有两种方法来配置程序运行的权限:
- 它可以以调用者的权限运行(无论谁运行该程序)
- 我可以使用 setuid,这样它就可以以我的权限运行
还有其他选项可以配置程序在 Linux 上运行的权限吗?
答案1
单独的 Linux 权限称为“功能”。对功能的完整描述可能太多了,但作为您提到的两个选项的替代方案,您可以设置基于文件的功能,为非特权用户提供管理权限:
[root@localhost]/home# setcap cap_chown+ep /bin/chown
[root@localhost]/home# sudo -iu testUser
[testUser@localhost ~]$ ll /etc/rc.local
-rwxr--r--. 1 root root 0 Jan 27 22:29 /etc/rc.local
[testUser@localhost ~]$ chown testUser /etc/rc.local
[testUser@localhost ~]$ ll /etc/rc.local
-rwxr--r--. 1 testUser root 0 Jan 27 22:29 /etc/rc.local
[testUser@localhost ~]$
正如您在上面看到的,chown
由于 I run,任何在此系统上执行的人都将拥有执行此操作所需的权限(“CAP_CHOWN”)setcap
。您可以通过将其从 an 更改+ep
为 an+ei
并在登录时仅向特定用户授予权限,从而获得更多的选择性pam_cap.so
应该注意的是,上面的代码chown
不是以 root 身份运行的,而是以我的非特权用户身份运行的。如果用户运行此程序以外的任何程序,他们将不具有此权限,并且如果修改了可执行文件,则所有基于文件的功能都将被清除。
答案2
如果没有任何明确的权限分配,程序或脚本将作为调用者运行。
Setuid 将以文件所有者的用户权限运行该程序。 Setgid将以文件组的组权限运行程序。两者都不能直接用于脚本。
您可以使用实用程序,例如sudo
使用您在 sudo 配置文件中确定的权限来运行程序(或脚本)。
我相信 SELinux 等安全子系统会限制访问而不是授予访问。
我不知道ACL是否可以用来授予运行时权限。我从来不需要调查。