Linux 中服务的权限如何工作?我已经知道我可以使用 和 分别设置read
文件和目录的 和 权限write
,但是权限如何工作于正在运行的服务?如何查看服务对特定文件/目录的权限?execute
chmod
owner
group
other users
答案1
服务受常规权限限制的约束。这完全取决于服务以哪个用户身份运行。服务只是始终在运行的常规进程。
例如,
$ ps aux | grep apache2 root 2845 0.0 0.2 75596 4508 ? Ss Sep06 0:19 /usr/sbin/apache2 -k start www-data 25608 0.0 0.1 74428 2232 ? S Sep09 0:00 /usr/sbin/apache2 -k start www-data 25609 0.0 0.1 75596 2288 ? S Sep09 0:02 /usr/sbin/apache2 -k start www-data 25610 0.0 0.4 2003664 8436?Sl Sep09 0:37 /usr/sbin/apache2 -k start www-data 25611 0.0 0.4 2003788 8584 ?Sl Sep09 0:36 /usr/sbin/apache2 -k start www-data 25700 0.0 0.4 2003648 8528?sl Sep09 0:36 /usr/sbin/apache2-k启动
您可以看到服务由 运行root
。Apachewww-data
仅使用该root
进程绑定到端口 80(或您配置的任何端口)。回想一下,绑定到小于 1024 的端口需要您是 root 身份。
但出于安全考虑,Apache 将所有请求处理交给以 身份运行的进程www-data
。这些进程可以访问的内容由您决定。如果您的文档根目录中的文件权限不允许www-data
访问这些文件,Apache 将无法为它们提供服务。
对于任何服务来说,这都是一样的;通常他们有
- 以以下身份运行的进程
root
(如果它们必须绑定到 <1024 的端口;root
但并非所有服务都有进程),它将任务委托给权限较低的用户 - 以他们创建的用户身份运行的进程(
bind
用于 BIND、www-data
Apache、proftpd
proftpd 等)。请记住,这些名称因系统而异(Apache 有时以apache
或apache2
代替运行www-data
)。
不过,有些进程以nobody
特定用户的身份运行,而不是以特定用户的身份运行。这可能是一个坏主意,但这取决于进程及其正在执行的操作。
这些只是一般规则;有些进程甚至完全以 root 身份运行(例如sshd
,尽管当有人连接时它将使用用户进程)。用于ps aux
查看进程在哪个用户下运行。