Как получить имя пользователя (только) Apache?

Как получить имя пользователя (только) Apache?

Я пытаюсь написать скрипт Bash для автоматического chown'in файлов для пользователя Apache2. Но мне нужно быть на 100% уверенным, какое имя пользователя у него? Я знаю, что обычно это www-data. Но мне нужно быть уверенным, если, скажем, имя пользователя было каким-то образом изменено.

Я ищу строку, которая вернет ТОЛЬКО имя пользователя Apache2.

Я знаю, # ps -aux | grep apache2как и многие другие, но они возвращают большой объем данных, а мне нужно только имя пользователя.

Любая помощь высоко ценится!

Спасибо.

решение1

Имя пользователя и идентификатор группы Apache2 задаются директивой в файле конфигурации. Он находится в файле /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}'

Спасибо.

Связанный контент