Ubuntu 新手来了!
我似乎无法弄清楚什么机制决定是否执行命令或显示“权限被拒绝”错误。
例如,假设我们使用的是普通用户帐户,‘chown --help’ 可以正常执行,但实际更改所有者时会返回“权限被拒绝”错误。这是怎么回事?
在 /bin/chown 上使用 ls -l 告诉我们普通用户(其他用户)具有执行权限。
ls -l /bin/chown
-rwxr-xr-x 1 root root 59904 Feb 7 2022 /bin/chown
我们可以执行这个命令,这难道不意味着我们可以以任何我们想要的方式使用它吗?
如果不是文件权限,命令是否使用另一种机制来确定我们是否具有必要的权限?
答案1
系统不仅仅检查您是否可以执行该命令,您可以执行的命令有很多。操作系统会检查您是否有权进行您要进行的更改。如果没有,则您尝试运行的程序在尝试执行该操作后会发送错误。
例如,如果您想对其他人的文件运行 chmod 命令,而您没有组权限,并且文件不是“a”的 +w,即 rw-r--r--,那么如果它是“jim”的文件而您是“joe”,那么您根本无法使用该命令编辑或修改权限。操作系统阻止了该操作,而不是程序本身。程序只会向您报告消息。事实上,该命令可能实际上会尝试执行您要求的操作……即使它不能。
基本上,Linux 具有如下文件安全基础设施:
根 > 所有者 > 组 > 所有其他用户
因此,列表中“更左边”的人有权更改其右边任何人的权限或数据,而“所有其他人”则无权更改。
但是,您有一个更复杂的问题……人们可以以“setuid”、“setgid”或其他任何方式运行程序。这意味着程序以附加到文件的用户/组组合运行。它有时用于授予某人访问程序的权限。(不建议使用,建议给予用户足够的权限。)
无论如何,仅仅因为你可以运行任何程序并不意味着你可以用它做任何事情。:D