回答:
1つのコマンドとして別のユーザーとしてスクリプトを実行するには、次を実行します。
/bin/su -c "/path/to/backup_db.sh /tmp/test" - postgres
Breaking it down:
/bin/su : switch user
-c "/path/to..." : command to run
- : option to su, make it a login session (source profile for the user)
postgres : user to become
このようなスクリプトでは常にフルパスを使用することをお勧めします-suのときに正しいディレクトリにいることを常に保証することはできません(誰かがhomedirを変更したのかもしれません)。また、私は偏執的なので、常にsu(/ bin / su)へのフルパスを使用します。誰かがあなたのパスを編集し、suの侵害されたバージョンを使用させる可能性があります。
-
(または--login
)を一緒に使用--command, -c
しても実際にはログインセッションは開始されません-c
。常に非ログインシェルを強制するからです。
- postgress
、コマンドの最後に表示する必要があります。マニュアルページから:When - is used, it must be specified before any username. For portability it is recommended to use it as last option, before any username. The other forms (-l and --login) do not have this restriction.
実行するターゲットユーザーにnologin shelllが定義されている場合は、-sオプションを使用してシェルを指定できます。
/bin/su -s /bin/bash -c '/path/to/your/script' testuser
次の質問を参照してください: nologinシェルを持つユーザーとしてスクリプトを実行します
これは有益な読み取りである必要があります- シェルスクリプトのsetuid
" "引数シーケンスを指定してsuを実行する- username
と、ユーザーのログインシェルが作成され、ユーザーと同じ環境が提供されます。通常、異なるログインからホーム環境でスクリプトをすばやく実行するために使用されます。
以下も使用できます。
sudo -u postgres script_run_as_postgres.sh