制限された権限でスクリプトの一部を実行するにはどうすればよいですか?

制限された権限でスクリプトの一部を実行するにはどうすればよいですか?

次の問題があります。 Postgresqlを実行しているすべてのコンピュータには特別なユーザーがいます。ポストグレス。このユーザーはデータベースサーバーへの管理アクセス権を持っています。

ここで、psqlをユーザーとしてデータベースコマンドを実行するBashスクリプトを作成したいと思います。ポストグレス(psqlはユーザーとして実行する必要があります。ポストグレス、スクリプトではありません)。これまでは問題になりません。ユーザーとしてスクリプトを実行できます。ポストグレス

しかし、psqlの出力を次のディレクトリのファイルに書きたいと思います。ポストグレス書き込み権限がありません。

どうすればいいですか?

しかし、スクリプト自体でEUIDを変更することを検討しました。

  1. BashスクリプトでEUIDを変更する方法が見つかりません
  2. このようなものを使用するときにEUIDをどのように変更しますか
    psql -U postgres -c "<command>" > file

答え1

サブシェルを使用してください:(su -c 'psql -U postgres -c "<command>"' postgres) > file

サブシェル内で操作を実行する権限を削除できますが、出力は元の権限を持っている元のシェルにリダイレクトされます。

答え2

次のトリックを使用したい場合があります。

{ anycommand } | su -c 'tee file' user

tee(1)POSIXユーティリティなので、可用性を信頼できます。


または以下を使用してsudo

{ anycommand } | sudo -u user 'tee file'

答え3

より良い書き込み権限を持つユーザー(rootなど)を使用してシェルスクリプトを実行し、データを出力するときにデータベースユーザーpostgresが書き込むことができるフォルダ(例:/ tmp)に書き込む必要があります。

データが書き込まれたら、シェルスクリプトに書き込み権限を持つディレクトリに移動します(たとえば、rootユーザーはどこでも書き込むことができます)。

答え4

なぜこれをしないのですか?: sudo su postgres -c "psql ..." >/path/to/file

関連情報