そのユーザーに成り代わってコマンドを実行できる「runuser」コマンド | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

Linux/Unixであるコマンドやプログラムをrootユーザーで実行させる場合、それが返って不便になる事もあります。

例えば・・・


・ あるプログラムの実行時には特殊な環境変数をセットしていないといけない

・ あるプログラムはrootユーザーでの実行が禁止されている

・ プログラム実行による出力ファイルがroot権限となる(それを一般ユーザーで編集・実行できない)


などです。

ですが、様々な制約を考えるとやはり、そのコマンドをrootユーザーで実行させたいということがあります。

こういった場合、実行したいユーザーでsudoコマンドを通してプログラムを実行させるというのも一つですが、ここで紹介するrunuserコマンドを使えば、rootユーザーから特定のユーザーに成り代わってコマンドを実行させるという事ができます。


runuserの基本的な使い方は下記の通りです。


# runuser -l {実行ユーザー名} -c "コマンド"

例えば、hogeユーザーにて空のファイルを作成してみます。


# runuser -l hoge -c "touch text.txt"
# ls -la text.txt
-rw-rw-r-- 1 hoge hoge 0 Oct 6 22:56 text.txt

ちゃんと、所有者がhogeユーザーになっています。

このようにそのコマンドを、ちゃんとユーザー変更してから実行したのと同様に実行させる事が可能です。

もちろん、そのコマンド内からファイルを作り出すようなプログラムでも同じです。


- ファイルを作るプログラムのサンプル

<?php
$fp = fopen("./hoge.txt", "w");
fputs($fp, "test");
fclose($fp);
?>

これをhogeユーザーと、runuserを通してrootユーザーで実行してみます。


$ php file.php
$ ls -la hoge.txt
-rw-rw-r-- 1 hoge hoge 4 Oct 6 22:59 hoge.txt

$ su -

# runuser -l hoge -c "php file.php"
# ls -la hoge.txt
-rw-rw-r-- 1 hoge hoge 4 Oct 6 23:01 hoge.txt

結果がまったく同じになっていますね。


先に書いたような制約から、rootユーザーで特定のユーザーでこのコマンドを実行させたいという場合に、覚えておくと便利なコマンドです。