consolehelper: root権限でコマンドを実行する際の認証のGUI化

ところで、LinuxでRoot権限を必要とする処理では、まずsuコマンドでRoot権限を得ておいて実行したり読み書きしたりするわけだけど、いちいちシェルから実行しないといけないのがどうもGUIインターフェースになれすぎた人間には苦痛を感じるときがある。やっぱりシェル→suコマンド→実行ではなくて、名前は忘れたけどLinuxのエクスプローラみたいなやつをRoot権限で1クリックで起動したい(起動後パスワード認証する感じで)。

carbuncleの日記

やり方が分かったのでメモ&連絡。「Linuxのエクスプローラみたいなやつ」をNautilusと仮定して話を進めます。違ったら適当に読み替えてください。

1. パスが通ったところに適当な名前でconsolehelperへのシンボリックリンクを作ります。

# ln -s /usr/bin/consolehelper /usr/local/bin/nautilus-root

nautilusは一般ユーザでも起動できるコマンドなので、ここで元の名前を使ってしまうと一般ユーザで起動できなくなり大変厄介です。そのためここではnautilus-rootと名前を変更しています。

2. consolehelperの設定ファイルを作ります。

# cd /etc/security/console.apps/
# vi nautilus-root

中身はこんな感じ:

USER=root
PROGRAM=/usr/bin/nautilus
SESSION=true
FALLBACK=false

synapticの設定ファイルを参考に、PROGRAM=の部分だけ書き換えました(詳細はman userhelperすると分かります)。

3. PAMの設定ファイルを作ります。簡単のために、これもsynapticの設定ファイルをそのままコピーすることにします。

# cd /etc/pam.d/
# cp synaptic nautilus-root

これの内容はこのようになっています。このファイルをいじると認証の方法が柔軟に変えられるのですが、とりあえず今の目的には必要ないのでこのまま使います。

#%PAM-1.0
auth       sufficient   pam_rootok.so
auth       sufficient   pam_timestamp.so
auth       required     pam_stack.so service=system-auth
session    required     pam_permit.so
session    optional     pam_xauth.so
session    optional     pam_timestamp.so
account    required     pam_permit.so

これで、

$ nautilus-root

とコマンドを入力するとパスワード入力画面が現れて、rootのパスワードを入れればroot権限でnautilusが起動するようになります。あとはオプションを追加してメニューに登録したり、煮るなり焼くなり好きにできます。

最後に個人的な意見として、rootでファイルブラウジングをするのはあまりお勧めできません。今回はあくまでProof of Conceptとして紹介しました。