Я пытаюсь написать скрипт 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}'
Спасибо.