問題の説明
Linuxでは、現在ログインしているのではなく、他のユーザーとしてコマンドを実行する必要がある場合があります。Nginxやその他のアプリケーションと同様に、実行時に所属するユーザーとグループを指定できますが、一部のプログラムはユーザーとグループの指定をサポートしていません(自分自身をサポートしていないため)。
このノートでは、特定のコマンドを他のユーザーとして実行する方法を紹介します。
方法1、systemdユニットファイルを使用する
.serviceファイルで、User =およびGroup =を使用して、コマンドを実行するユーザーのグループを指定します。次の例:
[ユニット] 説明= xxxxxxx [サービス] ユーザー= www-data グループ= www- dataExecStart = xxxxxxx
方法2、sudo(8)コマンドを使用する
sudo(8)コマンドを使用できます。元の機能は「別のユーザーとしてコマンドを実行する」です。デフォルトはrootユーザーです。-uを使用して、使用するユーザー名を指定できます。
sudo(8)は別のユーザーとしてコマンドを実行しますが、どのユーザーがどのコマンドを他のどのユーザーとして実行できるかを決定する一連のルールに従います。/ etc / sudo(8)ersファイルで構成します。su(1)との違いは、ユーザーを認証するときに、sudo(8)は、ターゲットユーザーのパスワードではなく、sudo(8)コマンドを呼び出したユーザーのパスワードを使用することです。sudo(8)を使用すると、システム管理者は、コマンドとそのパラメーターの監査証跡を提供しながら、特定のユーザー(またはユーザーグループ)がルートユーザーまたは他のユーザーとしてコマンドを実行することを許可できます。これにより、特定のコマンドを、特定のホスト間でパスワードを共有することなく、特定のホスト上の特定のユーザーに委任できます。
ユーザーとしてprogプログラムを実行するとします。
#!/ bin / sh sudo -u user prog
方法3:su(1)コマンドを使用する
su(1)コマンドを使用することもできます。su(1)コマンドを使用して別のIDに切り替え、シェルを実行してから、新しいシェルを使用して指定されたプログラムを実行します。コマンドsu(1)はシェルプログラムのみを実行できます。コマンドはsudo(8)のように記述できますが(たとえば、su -c user prog)、その実装原則は実際には最初にシェルを実行してからシェルを渡すことです。他のプログラムを実行します。
ユーザーとしてprogプログラムを実行すると仮定すると、2つの方法があります。
最初にユーザーuserに切り替えてから、progプログラムを実行します。
#!/ bin / bash su-user prog arg0 arg1..。
コマンドsu(1)の-cオプションを使用して、実行するコマンドを指定します。
#!/ bin / bash su -user -c "prog arg0 arg1 ..."
2つの方法は形式が異なるだけで、本質的に同じです。どちらを使用しても、ユーザーのパスワードを入力するように求められます。
したがって、シェルスクリプトでsuコマンドを使用する場合は、次のようにします。
#!/ bin / bash su --root << HDroot のパスワードprogarg0 arg1 ... HD
注
ユーザーuserに切り替えたいので、ユーザーのパスワードを知っている必要があります。これはsudo(8)とは異なります。
方法4:runuser(1)コマンドを使用する
コマンドrunuser(1)は、代替ユーザーとグループIDを使用してシェルを実行します。このコマンドは、rootユーザーとして実行している場合にのみ役立ちます(理由については、マニュアルを参照してください)。
コマンド構文は次のとおりです。
#!/ bin / bash runuser -l username -c'command ' runuser -l username -c' / path / to / command arg1 arg2 '
上記の方法の比較
角度1:ルートから他のユーザーに切り替える
上記の方法では、rootから他のユーザーに切り替えてコマンドを実行できます。
角度2:他のユーザーからルートに切り替える
コマンドrunuser(1)はできません。rootとしてのみ実行できます。ただし、sudo(8)とsu(1)はrootに切り替えてコマンドを実行できます。
角度3:非ルートユーザー間の切り替え
コマンドrunuser(1)はできません。rootとしてのみ実行できます。ただし、sudo(8)およびsu(1)は、非ルートIDから別の非ルートIDに切り替えて、コマンドを実行できます。
角度4:ユーザー認証
コマンドrunuser(1)は、rootから別のユーザーに切り替えてコマンドを実行することしかできないため、パスワードを入力する必要はありません。
コマンドsu(1)は、ターゲットユーザーのパスワードを提供する必要があります。
コマンドsudo(8)は、現在のユーザーのパスワードを提供する必要がありますが、ターゲットユーザーのパスワードは提供しません。
角度5:ログファイル
コマンドrunuser(1)のログファイルはありません。コマンドsu(1)のログは、/ var / log /auth.logまたは/ var / log / secureにあります。コマンドsudo(8)のログは、/ var / log /auth.logまたは/ var / log / secureにもあります。
参照
- WikiNotes /別のユーザーとしてコマンドを実行
- Linuxは別のユーザーとしてコマンドを実行します
- LINUXシステムは、指定されたユーザーとしてプログラムを実行するようにユーザーを切り替えません
- systemd:特定のユーザーとしてプロセスを開始します
- systemdサービスを特定のユーザー経由で実行し、起動時に開始するにはどうすればよいですか?
- systemd.exec —実行環境の構成
- (1)systemd:特定のユーザーとしてプロセスを開始します
- (1)`su`を実行するための1行のコマンドはありますか?