GNU/Linux >> Linux の 問題 >  >> Linux

別のユーザーとしてシェル スクリプトを実行する

解決策 1:

スクリプトを別のユーザーとして 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 を使用させる可能性があります。

解決策 2:

実行するターゲット ユーザーに nologin シェルが定義されている場合は、-s オプションを使用してシェルを指定できます。

/bin/su -s /bin/bash -c '/path/to/your/script' testuser

次の質問を参照してください:nologin シェルを持つユーザーとしてスクリプトを実行します

解決策 3:

スケジュールに従ってこれを自動化するには、ユーザーの crontab に入れることができます。ただし、Cron ジョブは完全な環境を取得することはできませんが、必要なすべての環境変数をスクリプト自体に配置することをお勧めします。

ユーザーの crontab を編集するには:

sudo crontab -u postgres -e

解決策 4:

これは参考になるはずです -- シェル スクリプトの setuid

su を実行すると "- username " 引数シーケンスを使用すると、ユーザーがユーザーと同じ環境を与えるためのログイン シェルが作成されます。通常は、別のログインからホーム環境でスクリプトをすばやく実行するために使用されます。

解決策 5:

su マンページを試してください:

su -c script_run_as_postgres.sh - postgres

または、sudo を使用して、そのコマンドだけをパスワードなしで postgres として実行できるようにすることもできます。ただし、/etc/sudoers でのセットアップが必要です。


Linux
  1. シェルスクリプトを常にルートとして実行する方法は?

  2. ユーザーとして引数を使用してスクリプトを実行しますか?

  3. シェルスクリプトはどこから実行されますか?

  1. シェルからPythonスクリプトを実行する方法

  2. * nixでログイン時にスクリプトを実行するにはどうすればよいですか?

  3. 現在のターミナルから新しいターミナルでシェルスクリプトを実行する

  1. UNIX / Linux :シェルとは?異なるシェルとは何ですか?

  2. シェルスクリプトの並列実行

  3. initスクリプトで特定のユーザーとしてコマンドを実行する方法は?