別のユーザーとしてシェルスクリプトを実行する良い方法は何ですか。私はDebian etchを使用しており、偽装したいユーザーを知っています。
私が手動で行っていた場合は、次のようにします。
su postgres
./backup_db.sh /tmp/test
exit
プロセスを自動化したいので、backup_db.shをpostgresとして実行する方法(環境の継承など)が必要です
ありがとう!
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したときに正しいディレクトリにいることを常に保証できるわけではありません(たぶん誰かがあなたのホームディレクトリを変更したことを知っています)。私は偏執狂なので、常にsu(/ bin/su)への絶対パスも使用します。誰かがあなたのパスを編集して、あなたにsuの侵害されたバージョンを使わせてしまう可能性があります。
実行するターゲットユーザーにnologin shelllが定義されている場合は、-sオプションを使用してシェルを指定できます。
/bin/su -s /bin/bash -c '/path/to/your/script' testuser
次の質問を参照してください: nologinシェルを持つユーザーとしてスクリプトを実行します
これをスケジュールに従って自動化するには、ユーザーのcrontabに配置します。ただし、cronジョブは完全な環境を取得しませんが、とにかくスクリプト自体に必要なすべてのenv変数を配置することをお勧めします。
ユーザーのcrontabを編集するには:
Sudo crontab -u postgres -e
これは参考情報である必要があります- setuid on Shell scripts
suを「- username
"引数シーケンスでは、ユーザーがログインシェルを作成して、ユーザーと同じ環境を提供します。通常、別のログインからホーム環境でスクリプトをすばやく実行するために使用されます。
Suマンページを試してください:
su -c script_run_as_postgres.sh-postgres
代わりに、Sudoを使用して、パスワードなしでそのコマンドだけをpostgresとして実行できます。ただし、/ etc/sudoersでいくつかの設定が必要です。
他の人が投稿した "su -c ..."メソッドは良い方法です。自動化のために、実行に必要なユーザーのcrontabにスクリプトを追加できます。
ユーザーがすでにSudoへのエントリを持っていて、スーパーユーザーのパスワードがわからない場合は、以下を試すことができます。これにより、/ data/my-db/pgsql/9.6/dataで初期化されたpostgresが再起動されます
Sudo su - postgres -c "/usr/pgsql-9.6/bin/pg_ctl -D /data/my-db/pgsql/9.6/data -l /var/log/pgsql.log restart"
次のものも使用できます。
Sudo -u postgres script_run_as_postgres.sh