如何获取 Apache 的用户名(仅)?

如何获取 Apache 的用户名(仅)?

我正在尝试编写一个 Bash 脚本,用于自动将文件 chown'in 给 Apache2 用户。但我之前需要 100% 确定它的用户名是什么?我知道它通常是 www-data。但是,我需要确定用户名是否以某种方式更改过。

我正在寻找一个仅返回 Apache2 用户名的字符串。

我知道# ps -aux | grep apache2还有很多其他的,但他们返回了大量的数据,而我只需要一个用户名。

非常感谢您的帮助!

谢谢。

答案1

Apache2 的用户名和组 ID 由配置文件中的指令设置。此文件位于 中/etc/apache2/envvars

您可以检查该文件并注意到,默认情况下,正如您所怀疑的那样,它是www-data。此外,从文件中可以看到,用户组默认设置为相同的名称。

现在您有了有效用户,apache您可以使用它将文件更改为该用户:

$ sudo chown -R www-data:www-data myhtmldirectory

这会将 myhtmldirectory 及其下的所有文件和目录的用户和组所有者更改为www-data

如果您只想更改用户所有者,请删除:www-data组的部分。

获得正确 usrID 的一个非常可靠的方法是:

$ awk -F= '$1 == "export APACHE_RUN_USER" {print $2}' /etc/apache2/envvars

此行将解析已启动的当前会话的 envvars 文件。

答案2

要查找匹配的任何进程的有效用户的名称apache2,请使用:

ps -o euser= -C apache2

-o选项设置输出格式。在我们的例子中,我们只要求输入有效用户名。euser尾随的=指示ps隐藏正常标题行。这样,输出仅包含与匹配的用户名apache2

我没有运行 apache2,因此作为示例:

$ ps -o euser= -C mount.ntfs
root
$ ps -o euser= -C atd
daemon

答案3

我发现了一个非常简单的解决方案,它只返回 apache2 用户名:

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

谢谢。

相关内容