Apache のユーザー名 (のみ) を取得するにはどうすればいいですか?

Apache のユーザー名 (のみ) を取得するにはどうすればいいですか?

Apache2 ユーザーにファイルを自動的に chown'in するための Bash スクリプトを書こうとしています。しかし、そのユーザー名が何であるかを 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}'

ありがとう。

関連情報