我将 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-content
Apache 由于某种原因没有在组中运行,尽管如此/etc/init.d/apache2 restart
-output'ps --group web-content'
这里)。现在假设一个更通用的情况,不一定是 Apache。
引导性问题
我如何确保程序按预期运行
www-data:web-content
?如何确保程序生成的所有文件和目录都是
www-data:web-content
而不是www-data:www-data
?我如何确保像 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 restart
user:group
对于新手,我警告他们,
setuid/setgid
除非小心谨慎,否则很容易出现安全漏洞——您可以随意在自己的机器上使用,但在生产中使用适当的审计。但这不是火箭科学!find
Debian 中的手册提供了这个工具,可以帮助您进行审计,玩得开心!仅遍历文件系统一次,将 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-data
到web-content
-group,例如因为您最终找到了一个A
想要合作的好伙伴。如果出现问题,他们可能会帮助您进行调试,努力工作!
它会将 www-data -user 添加到 web-content -group 中。
# usermod -a -G web-content www-data
它将显示进程的用户,但不显示组
# ps -aux|grep apache
答案2
如果您以特定用户(非 root)身份启动程序,它将以该用户身份运行。
程序生成的所有文件将归运行该程序的用户所有,并归属于该用户的默认组。程序可以将文件的组更改为它所属的任何组。
要以特定用户身份启动程序,请使用命令设置命令的用户
su
。man su
有关说明。请注意,对于 Apache,往往有一个 root 拥有的进程负责维护日志并启动 Apache 配置中指定的用户拥有的“处理程序”进程。
如果您想要一个通用案例,请查看类似 的系统命令su
。否则,每个程序(Apache、nginx、mysql 等)将自行处理“放弃权限”的过程,您需要按照该特定程序的说明进行操作。
从你在问题中指定的路径、用户和组来看,你似乎正在运行 Debian 或Ubuntu Linux. 就如何处理 Web 服务器权限而言,您可能需要遵循特定平台的标准或惯例。