
runuserコマンドは、指定されたユーザーIDとグループIDでシェルを実行するために使用されます。このコマンドは、ユーザーIDとグループIDを変更します。一部のコマンドを他のユーザーとして実行する場合は、このコマンドを使用してユーザーを変更できます。このコマンドはsuコマンドに似ていますが、パスワードの入力を求められません。したがって、特権ユーザー、つまりrootユーザーのみがこのコマンドを正常に実行でき、パスワードを必要とせずに任意のユーザーに変更できます。
このコマンドは、シェルスクリプトで使用する場合に非常に便利です。これは、非対話型コマンドであるためです。ルート以外のユーザーとして実行するとパスワードの入力を求められるため、シェルスクリプトにはSuコマンドを使用できません。ただし、runuserコマンドの場合は、失敗してエラーで終了します(非特権ユーザーの場合)。 runuserコマンドはPAMフックと認証モジュールを実行しないため、suよりもオーバーヘッドが少なくなります。
runuserコマンド
runuserコマンドを実行するrootユーザーの例を次に示します。
[root@redhat-server /]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:system_r:unconfined_t:SystemLow-SystemHigh
[root@redhat-server /]# runuser jack
[jack@redhat-server /]$ id
uid=501(jack) gid=501(jack) groups=501(jack),504(javaproject) context=root:system_r:unconfined_t:SystemLow-SystemHigh
idコマンドで現在のユーザーを確認できます。特権のないユーザーがこのコマンドを実行しようとすると、次のようになります。
[jack@redhat-server /]$ runuser jones
runuser: cannot set groups: Operation not permitted
-lまたは--loginオプションを使用すると、suコマンドの場合と同様に、新しいシェルをログインシェルにすることができます。 runuser-コマンドも同じ効果があります。環境変数も変更します。 PWDやPATHなどの変数は、このオプションを使用して値を変更します。
[root@redhat-server ~]# runuser - jones
[jones@redhat-server ~]$ id
uid=502(jones) gid=502(jones) groups=502(jones),504(javaproject) context=root:system_r:unconfined_t:SystemLow-SystemHigh
[jones@redhat-server ~]$ pwd
/home/jones
-sオプションを使用したデフォルトのシェルが必要ない場合は、カスタムシェルを提供できます。
[root@redhat-server ~]# echo $SHELL
/bin/bash
[root@redhat-server ~]# runuser -s /bin/sh jones
sh-3.2$ echo $SHELL
/bin/sh
sh-3.2$ id
uid=502(jones) gid=502(jones) groups=502(jones),504(javaproject) context=root:system_r:unconfined_t:SystemLow-SystemHigh