Unix:如何更改程序的运行用户和运行组?

Unix:如何更改程序的运行用户和运行组?

我将 APACHE_RUN_GROUP 更改/etc/apache2/envvars

APACHE_RUN_GROUP=web-content

因为我希望 Apache 运行我们www-data:web-content,而不是www-data:www-data。我讨厌单调的手动 hack,例如chown -R www-data:web-content。在 #Debian 中,一位同志c.*9建议使用 ACL,教程这里,而其他同志H建议采用一些传统方式,其他同志PP建议添加www-data到组中(我有它,但在这个例子中,web-contentApache 由于某种原因没有在组中运行,尽管如此/etc/init.d/apache2 restart-output'ps --group web-content'这里)。现在假设一个更通用的情况,不一定是 Apache。

引导性问题

  1. 我如何确保程序按预期运行www-data:web-content

  2. 如何确保程序生成的所有文件和目录都是www-data:web-content而不是www-data:www-data

  3. 我如何确保像 Apache 这样的程序以 身份运行www-data:web-content

答案1

我将首先回答问题 1 和 3,因为 3 是 1 的特例,问题 2 实际上非常简单,但让我们开始吧!

阿帕奇案例

我们首先使用 SED 执行 Apache 特定的修改,然后确保 Apache 确实按预期user:group运行www-data:web-content

# sed -i s@APACHE_RUN_GROUP=www-data@APACHE_RUN_GROUP=web-content@g /etc/apache2/envvars
# /etc/init.d/apache2 restart 
# ps -o pid,user,group,fname $(pidof apache2)
  PID USER     GROUP    COMMAND
24514 root     root     apache2
24521 www-data 1001     apache2
24522 www-data 1001     apache2
24523 www-data 1001     apache2
24524 www-data 1001     apache2
# grep 1001 /etc/group 
web-content:x:1001:www-data,xyz,apache
# getent group 1001
web-content:x:1001:www-data,xyz,apache

我们用两个不同的命令检查了 1001 -placeholder 的对应关系,因此 1001 确实对应于 web-content -group。root:root根据 THE,必须有一个 Apache -process 正在运行,因为它需要绑定到端口 80。所以现在您的 apache 正在以 运行www-data:web-content。您可以感谢 THE 和 SO 合作完成这个谜题,欢迎来到 Freenode 中的 #Debian -channel。

一般情况

其实,条条大路通罗马:

  • setuid/setgid
  • ...
  • 使用 start/stop -daemons/etc/init.d

但根据 THE 的说法,没有一种通用的方法可以适用于所有平台。您需要学会在正确的位置使用正确的工具。例如,使用 Apache -case 的起点是阅读注释后调查/etc/apache2/apache2.conf您找到 -file 的位置。然后您只需使用 -command 并验证程序是否确实按预期运行。/etc/apache2/envvars/etc/init.d/apache2 restartuser:group

对于新手,我警告他们,setuid/setgid除非小心谨慎,否则很容易出现安全漏洞——您可以随意在自己的机器上使用,但在生产中使用适当的审计。但这不是火箭科学!findDebian 中的手册提供了这个工具,可以帮助您进行审计,玩得开心!

仅遍历文件系统一次,将 setuid 文件和目录列到 /root/suid.txt 中,将大文件列到 /root/big.txt 中。

   find $HOME -mtime 0

概括

现在我已经回答了你的第 1 点和第 3 点,关于使用某些user:group组合(包括 Apache)运行程序(问题 3 是问题 1 的一个特例)。因此对于第二个问题,一个简单的ls命令将确保 Apache 正常工作,如下所示:

# ls -lsa
total 1832
  4 drwxrwx--- 2 www-data web-content   4096 Aug 20 20:21 .
  4 drwxrwx--- 6 www-data web-content   4096 Aug 14 22:20 ..
884 -rw-r--r-- 1 www-data web-content 900386 Aug 20 20:21 0_hhh.png
 12 -rw-r--r-- 1 www-data web-content   8194 Aug 20 20:21 1_hhh.jpg

祝您拼图快乐 :D

可选命令

您可能需要以下命令。如果您需要将用户添加www-dataweb-content-group,例如因为您最终找到了一个A想要合作的好伙伴。如果出现问题,他们可能会帮助您进行调试,努力工作!

  1. 它会将 www-data -user 添加到 web-content -group 中。

    # usermod -a -G web-content www-data

  2. 它将显示进程的用户,但不显示组

    # ps -aux|grep apache

答案2

  1. 如果您以特定用户(非 root)身份启动程序,它将以该用户身份运行。

  2. 程序生成的所有文件将归运行该程序的用户所有,并归属于该用户的默认组。程序可以将文件的组更改为它所属的任何组。

  3. 要以特定用户身份启动程序,请使用命令设置命令的用户suman su有关说明。请注意,对于 Apache,往往有一个 root 拥有的进程负责维护日志并启动 Apache 配置中指定的用户拥有的“处理程序”进程。

如果您想要一个通用案例,请查看类似 的系统命令su。否则,每个程序(Apache、nginx、mysql 等)将自行处理“放弃权限”的过程,您需要按照该特定程序的说明进行操作。

从你在问题中指定的路径、用户和组来看,你似乎正在运行 Debian 或Ubuntu Linux. 就如何处理 Web 服务器权限而言,您可能需要遵循特定平台的标准或惯例。

相关内容