在 Linux 中以普通用户身份调用 'ps'

sam*_*mmy 1 linux permissions ps

简单介绍一下我的问题:该命令ps会打印系统进程的信息。

但是当我以root身份登录并更改权限xps

chmod -x /bin/ps
chmod u+x /bin/ps
ls -l /bin/ps 
-rwxr--r-- 1 root root ...... ps
Run Code Online (Sandbox Code Playgroud)

然后我创建一个新的shell脚本文件 call_ps_via_root.sh

#!/bin/bash
ps
Run Code Online (Sandbox Code Playgroud)

并设置x权限

chmod +x /bin/call_ps_via_root.sh
ls -l /bin/call_ps_via_root.sh
-rwxr-xr-x 1 root root ...... call_ps_via_root.sh
Run Code Online (Sandbox Code Playgroud)

在此之后,我以普通用户sammy登录,然后输入ps,它将打印

Permission denied
Run Code Online (Sandbox Code Playgroud)

我输入 /bin/call_ps_via_root.sh

它仍然被拒绝。我怎样才能让它工作call_ps_via_root.sh

Mat*_*teo 7

你不能:如果你/bin/ps只让root 可执行,它就只能由 root 执行。您不能仅仅围绕它包装一个脚本来绕过权限检查。

设置用户 ID

如果您希望普通用户ps以 root 身份调用,您必须查看 set-uid 权限。来自维基百科上的setuid 文章

setuid 和 setgid(分别是“执行时设置用户 ID”和“执行时设置组 ID”的缩写)1是 Unix 访问权限标志,允许用户以可执行文件的所有者或组的权限运行可执行文件。它们通常用于允许计算机系统上的用户以临时提升的权限运行程序以执行特定任务。虽然提供的假定用户 ID 或组 ID 权限并不总是提升,但至少它们是特定的。

另请参阅 chmod 的手册页

须藤

相反,如果您希望普通用户执行 root 可执行文件,请仅使用sudo. 它将允许您配置哪个用户将能够执行什么。