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

我将/etc/apache2/envvars的APACHE_RUN_GROUP改为

 APACHE_RUN_GROUP=web-content 

因为我想让Apache运行www-data:web-content ,插入www-data:www-data 。 我讨厌单调的手动hack,如chown -R www-data:web-content 。 在#Debian中, c.*9同志build议在这里使用ACL,而其他同志H提出了一些传统的方法,而其他同志PPbuild议将www-data添加到web-content (但是在这个例子中由于某些原因,Apache没有运行,尽pipe/etc/init.d/apache2 restart所以'ps --group web-content' output here )。 现在假设一个更通用的情况,不一定是Apache。

加载的问题

  1. 我怎样才能确保一个程序运行为www-data:web-content

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

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

我将首先回答问题1和3,因为3是1的特殊情况,问题2实际上很简单,但让我们把手弄脏!

Apache的情况下

我们首先使用SED执行Apache特定的修改,然后确保Apache实际上正在以www-data:web-content的预定user:group运行。

 # sed -is@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。 根据THE,一个Apache进程必须以root:root身份运行,因为它需要绑定到80端口。 所以现在你的apache运行的是www-data:web-content 。 你可以感谢THE和SO与这个难题合作,欢迎来到Freenode的#Debian-channel。

一般情况下

实际上罗马有很多方法:

  • setuid/setgid
  • /etc/init.d使用启动/停止守护进程

但根据THE的说法,没有一个通用的方法可以在所有平台上运行。 你需要学习在正确的地方使用正确的工具。 例如,使用Apache -case的起点是在阅读注释后调查/etc/apache2/apache2.conf ,在那里你find了/etc/apache2/envvars -file。 然后你只是使用/etc/init.d/apache2 restart命令,并validation程序实际上是运行与预期的user:group

对于新手来说,我警告setuid/setgid因为除非做得很好,否则易于使用的安全性 – 易用性 – 只要你想用自己的机器使用,但是在生产中使用适当的审计。 但这不是火箭科学! Debian中的find manual提供了这个工具,可以帮助你审计事情,有fuN!

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

  find $HOME -mtime 0 

概要

现在我已经回答了你的要点1和3,关于用某个user:group运行一个程序user:group组合包括Apache(q3是问题1的一个特例)。 所以对于第二个问题,一个简单的ls -command将确保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中,例如您最终find了A与您想要合作的好友A 如果出现问题,他们可以帮助您debugging,努力工作!

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

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

  2. 它会向您显示过程的用户,但不会显示组

    # ps -aux|grep apache

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

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

  3. 要以特定用户身份启动程序,请使用su命令设置命令的用户。 man su指示。 请注意,对于Apache,往往有一个单独的根拥有的进程,负责维护日志并启动由Apacheconfiguration中指定的用户拥有的“处理程序”进程。

如果你想要一个通用的情况,看看像su这样的系统命令。 否则,每个程序(Apache,nginx,mysql等)将自行处理“放弃权限”的过程,并且需要遵循特定程序的指示。

从您的问题中指定的path,用户和组中,听起来好像您可能正在运行Debian或Ubuntu Linux 。 根据Web服务器权限的处理方式,您可能希望遵循特定平台的标准或约定。