Linux 服务的权限

Linux 服务的权限

Linux 中服务的权限如何工作?我已经知道我可以使用 和 分别设置read文件和目录的 和 权限write,但是权限如何工作于正在运行的服务?如何查看服务对特定文件/目录的权限?executechmodownergroupother 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-dataApache、proftpdproftpd 等)。请记住,这些名称因系统而异(Apache 有时以apacheapache2代替运行www-data)。

不过,有些进程以nobody特定用户的身份运行,而不是以特定用户的身份运行。这可能是一个坏主意,但这取决于进程及其正在执行的操作。

这些只是一般规则;有些进程甚至完全以 root 身份运行(例如sshd,尽管当有人连接时它将使用用户进程)。用于ps aux查看进程在哪个用户下运行。

相关内容