对于用户来说,可执行文件chmod
之间的关系是什么?sudo
“用户需要 sudo 来运行可执行文件”的情况与“chmod 尚未为用户设置执行模式位”的情况相同吗?
“用户不需要 sudo 来运行可执行文件”的情况与“chmod 已为用户设置执行模式位”的情况相同吗?
进一步来说,
- 对于可执行文件,如果
chmod
没有为用户设置其执行权限,则该用户是否必须使用sudo
或来运行可执行文件su
? - 如果
chmod
为用户设置其执行权限,这是否意味着用户可以在没有sudo
或 的情况下运行可执行文件su
? - 如何使可执行文件只能由给
sudo
定su
用户运行? - 反之,如果用户只能使用
sudo
或来运行可执行文件su
,是否意味着chmod
没有为该用户设置该可执行文件的执行权限?
答案1
首先是术语。chmod
是一个程序(和系统调用),它允许更改文件系统中文件的权限位。sudo
是一个特殊的程序,允许使用不同的凭据运行其他程序(通常具有提升的权限,最常见的是 root 用户的权限)。su
类似,但可配置性较低(读为“不可”)sudo
——最重要的是,它需要根据 root 密码的知识对用户进行身份验证(这在安全方面是相当令人震惊的)。
可执行位表示文件的内容是否可以加载到内存中并运行(它没有说明它是否有意义 - 您可以设置 JPEG 图像的可执行位,然后当您尝试运行)。
现在回答问题:
一旦加载可执行文件,就会评估权限。在
su
这种情况下,这种情况发生在目标用户的sudo
有效 ID(用户和组 - 权限评估中使用的凭据 - 请参阅手册页)上。credentials(7)
因此,如果允许目标用户执行该文件,该文件就会被执行。如上所述:当有效UID或GID设置了可执行位时,则可以执行。否则不会。
一般来说,你不会。如果需要,您可以将其标记为仅对某些 ID 可执行,然后准备配置,
sudo
以便允许某些用户使用对该文件具有可执行权限的用户之一的凭据运行该二进制文件。不。阻止用户运行需要特殊权限的程序通常没有多大意义 - 程序应该处理缺乏这些权限的情况(如果可能的话,优雅地处理)。有些程序甚至只具有一些不需要特殊权限的功能,但在以特殊权限运行时提供更多功能 - 一个例子是
route
:非特权用户可以使用它来显示内核路由表,而管理员也可以更改这些功能。
答案2
这可能有点吹毛求疵,但是:要执行一个文件,你必须拥有该文件的执行权限
以及您导航到该文件的所有目录。因此,如果 Tomdo_interesting_stuff
在他的主目录 ( ) 中有一个程序 ( ) /home/tom
,并且该目录受到保护 700(除所有者之外任何人都无法访问),但该文件受到保护 755(每个人都有读取和执行权限),您仍然将不会能够/home/tom/do_interesting_stuff
“像你自己一样”运行——你需要成为root(或“成为tom”)sudo
或su
能够执行该文件。
当然,如果您想读取interesting_stuff.txt
Tom 主目录中的文件 ( ),同样的情况也是如此,因为您需要对该文件的读取访问权限
和目录的执行权限。