他のユーザーでコマンドを実行する
コマンドに限らず全てのソフトウェアは、そのソフトウェアを起動したユーザーと関連付けられています。
システム関係のソフトウェアは、rootユーザーで動作していることがほとんどです。
以前sudoコマンドを紹介しましたが、主にrootでコマンドを実行する方法でした。
今回は、他のユーザーでコマンドを実行する方法です。
一時的に他のユーザーになってコマンドを実行する
sudoコマンドは引数で指定されたコマンドを、同じく指定されたユーザーで実行します。コマンドの実行が終わると、元のユーザーに戻ります。
sudoコマンドの使い方は以下の通りです。
sudo [-i] -u ユーザー名 コマンド
iオプションを指定すると、ログインシェルでコマンドを実行します。
ログインシェルは、ユーザーがログインした時に実行されるシェルです。
(シェルのデフォルトはBash)
ログインシェルで実行すると、現在のユーザーの環境変数をほとんど受け継がず、
変更するユーザー用に新しく設定し直されます。
実際にユーザーが変更されているかログインシェルで試してみる
1.「ubuntu」ユーザーでログインしている環境で、以下のコマンドを端末から実行します。sudo -i -u ubuntu3 nano
2.適当に文字を入れ、ファイルを保存する。
ファイル名は「ubuntu3.txt」にしました。
3.Nautilusからファイルのプロパティを見る
「/home/ubuntu3/ubuntu3.txt」のプロパティを見ると、
所有者が「ubuntu3」になっています。
ちゃんと変わってますね。
非ログインシェルだとどうなる?
1.「ubuntu」ユーザーでログインしている環境で、以下のコマンドを端末から実行します。sudo -u ubuntu3 nano
2.適当に文字を入れ、ファイルを保存する。
ファイル名は「ubuntu3.txt」にしました。
3.書き込み権限がないと言われ、ファイルが保存できません。
ということは、ユーザーは「ubuntu3」になっているが、
ホームディレクトリが「ubuntu」ユーザーのままになっているという事です。
ログインシェルと非ログインシェルどちらを選ぶ?
処理の内容によりますが、ホームディレクトリに依存するような処理はログインシェルが良いでしょう。
または、処理の内容が特定のユーザー用であり、
そのユーザーに依存した処理が行われるのであれば、ログインシェルが良いでしょう。
別のユーザーになる
suコマンドを利用します。suコマンドの使い方は以下の通りです。
su [-l] ユーザー名
lオプションを指定すると、ログインシェルでユーザーを切り替えます。
suの場合非ログインシェルでも、
ホームディレクトリは変更後のユーザーのものに変更されます。
それ以外の点についてはsudoとほとんど同じです。
別のユーザーになってみる
1.「ubuntu」ユーザーでログインしている環境で、以下のコマンドを端末から実行します。su ubuntu3
2.「cd ~」を入力し、ホームディレクトリに移動する
3.「pwd」 を入力し、現在のパスを表示する
ユーザーがubuntu3@になっていて、ホームディレクトリも/home/ubuntu3になっています。
元のユーザーに戻る場合は、「exit」コマンドを入力します。