Ber*_*lby 19 permissions command-line
有什么办法可以识别我作为普通用户是否有发出命令的权限。
例如; 我想在实际发出关闭命令之前检查我是否有权发出关闭命令。
类似于以下命令
-> doIhaveRightToIssue shutdown
-> Yes/No
Run Code Online (Sandbox Code Playgroud)
Jos*_*Jos 27
最简单的情况是二进制可执行文件,如gzip
. 首先,我们找到可执行文件:
$ which gzip
/bin/gzip
Run Code Online (Sandbox Code Playgroud)
然后我们看一下这个文件的属性:
$ ls -l /bin/gzip
-rwxr-xr-x 1 root root 98240 oct 27 2014 /bin/gzip
Run Code Online (Sandbox Code Playgroud)
三个 x 告诉我们文件可能分别由所有者(第一个root
)或组中的任何人root
(第二个root
)和其他任何人执行。所以你的用户被允许执行程序。
但是,您的可执行文件可能是一个脚本文件,它调用内部的其他可执行文件。您可能能够执行脚本,但不能执行其中调用的程序。除了实际尝试之外,无法确定您的用户是否被允许这样做。
然后有一些特殊情况,例如shutdown
- 这实际上是一个名为 的核心实用程序的符号链接systemctl
,它有自己的机制来确定您是否可以调用它,如果不可以,则要求您提供 sudo 密码,例如.
(关于which
命令:这会在您的 $PATH 中定位您可以执行的可执行文件,并告诉您如果 $PATH 中有多个同名的文件,您使用哪一个。它不只定位任何可执行文件。我在这里使用它作为在哪里查找权限的示例。which
找到可执行文件的事实已经表明您有权执行它。)
mur*_*uru 22
与sudo
:
$ sudo -l shutdown
/sbin/shutdown
Run Code Online (Sandbox Code Playgroud)
如果我没有权限,我sudo
会抱怨而不是显示命令。
使用 polkit,您可以检查要运行的操作:
$ pkcheck --action-id org.freedesktop.login1.power-off --process $$ -u --enable-internal-agent && echo yes
polkit\56temporary_authorization_id=tmpauthz1
yes
Run Code Online (Sandbox Code Playgroud)
找到相关操作是一个不同的问题。
您可以使用:
test -x $(command -v shutdown) && echo yes || echo no
Run Code Online (Sandbox Code Playgroud)
command -v shutdown
返回shutdown
命令的路径。test -x
检查该路径是否对您可执行。
请注意,尽管您可能能够执行该命令,但该命令仍可能会失败,因为它没有足够的权限来执行该任务。这是 Unix 类型系统上的常见情况,它不是限制对执行命令的访问,而是限制对程序实际可以执行的操作的访问。
嗯,有时可能有点困难......
首先,查看权限ls -l
...
owngrptr 用户组命令 -rwxr-xr-x root bin vim
如果最后一个/第三个三元组中有一个x(“可以执行”),那么其他人- 这意味着你 - 可以执行它......如果它是一个 shell 脚本或类似的东西,那么其他人将需要r(“也可以阅读”)。
如果其他人没有执行权限但组(第二个三元组)有执行权限,那么如果您是组的成员,则可以执行它- 在示例中为bin。例如,wheel -group 通常用于限制谁可以运行su
,因此只有属于该组的用户才能执行它。另一个例子是为开发人员创建一个组,并将 C 编译器和此类工具的执行限制在该组中。
如果最后一个三元组后面有一个+,则意味着使用了 AccessControllLists - 这可能会向其他用户和组添加执行权限。
+++
即使您能够执行该命令,该命令也可能取决于对您无权访问的文件、目录和/或设备的访问权限 - 这可能会限制您能够执行的操作(您可能无法做任何事)。
最后,虽然您可能被允许执行命令,但该命令本身可能会检查您的身份,并拒绝让您使用它,除非您在配置文件中列出或者是某些用户(例如root)。例如,该mount
命令将只允许root安装任何设备 - 普通用户只允许安装在 /etc/fstab 中列出的设备......可能没有。如果您不是root并尝试挂载某些东西,mount
则会抱怨并拒绝挂载设备。另一个例子是sudo
,它可以为任何人运行,但实际上只有 /etc/sudoers 中列出的用户才能以root身份运行。