如何检查我可以使用哪个 Apache 组来编写 Web 服务器?

如何检查我可以使用哪个 Apache 组来编写 Web 服务器?

我正在努力让 WordPress 正常工作。我目前收到此错误消息:

Could not create directory. /var/www/html/wp-content/upgrade/theme_name

当尝试上传主题时。这是权限设置/var/www/html/wp-content/upgrade/

drwxrwxr-x 3 ec2-user apache 4096 Jun 21 00:30 upgrade

chmod 777 upgrade使错误消失。但这并不被认为是最佳实践。但是,我认为这也应该有效......为什么不呢?

我猜想网络服务器可能不包含在上述权限中。我应该使用哪个组来允许网络服务器写入?

(我的设置是 Amazon EC2、带有 httpd 的 Amazon Linux AMI)

答案1

我对 Amazon EC2 一无所知,但您应该能够:

  1. 使用类似于以下的命令检索运行 Apache 的用户的名称:

    ps aux | grep apache # The username should be in the first column.
    
  2. 使用以下命令检索该用户所属的组groups(1)

    groups [USERNAME]
    

答案2

您可以尝试使用以下命令行方法来查找您的 Apache 组名称:

WWW_GROUP=`ps axo user,group,comm | egrep '(apache|httpd)' | grep -v ^root | cut -d\  -f 2| uniq`
echo Apache group is: $WWW_GROUP

要获取用户,请检查:如何从命令行确定 Apache 用户?

答案3

chmod 777 升级使错误消失。

好吧,在这种情况下ls -ld /var/www/html/wp-content/upgrade/theme_name应该透露创建者的凭据,您可以使用它来进行精确的访问授予。

最好使用1777(至于/tmp),因为至少它保证只有文件的所有者才能取消链接它。

答案4

如果你想要一个衬垫来填充测试或子外壳或其他东西,这很有效:

ps -ef | egrep '(httpd|apache2|apache)' | grep -v "$(whoami)" | grep -v root | head -n1 | awk '{print $1}' | groups | awk '{print $2}'

在上面,最后一个命令选择第二组,因为第一组通常是sys,这通常没有用。

如果你想要一个列表全部apache 所在的组,删除最后一个管道部分awk '{print $2},如下所示:

ps -ef | egrep '(httpd|apache2|apache)' | grep -v "$(whoami)" | grep -v root | head -n1 | awk '{print $1}' | groups

如果您想要 apache 用户名,请执行前面的操作并删除groups管道部分,如下所示:

ps -ef | egrep '(httpd|apache2|apache)' | grep -v "$(whoami)" | grep -v root | head -n1 | awk '{print $1}'

我不建议对环境做出假设,除非它完全在你自己的控制之下。如果您需要以编程方式确定用户并且不能绝对确定它将始终在特定环境中运行(或者不确定有人可能已将其更改为 apache.conf 中的某些自定义名称/组),那么它是实用的有一些统一的方法来检查它。您可以将其填充到.env文件中的某个公用键下以进行本地化程序访问,或者交替将其回显到bash_profilebashrc如果您想要一个一致的变量来检查系统范围,也许像这样:

echo export "WEBSERVER_USERNAME=$(ps -ef | egrep '(httpd|apache2|apache)' | grep -v "$(whoami)" | grep -v root | head -n1 | awk '{print $1}')" >> ~/.bash_profile
echo export "WEBSERVER_USERGROUP=$(ps -ef | egrep '(httpd|apache2|apache)' | grep -v "$(whoami)" | grep -v root | head -n1 | awk '{print $1}' | groups | awk '{print $2}')" >> ~/.bash_profile
source ~/.bash_profile

其他地方:...

# chown a dir to the webserver universally
# for typical 755 directory permission
# Good for production environment web app folders
sudo chown "${WEBSERVER_USERNAME}:${WEBSERVER_USERGROUP}" /path/to/dir

# chown to your user and the webserver usergroup
# for shared 775 cli/http directory perms
# good for dev environment, localhost, or anywhere that
# you have to do a lot of cli file edits to web folders/files
sudo chown "$(whoami):${WEBSERVER_USERGROUP} /path/to/dir

或者任何你需要它的东西,而不必查找它一百万次

相关内容