特権を減らしてスクリプトの一部を実行するにはどうすればよいですか?


7

私は次の問題を抱えています:Postgresqlを実行しているすべてのマシンに特別なユーザーpostgresがあります。このユーザーは、データベースサーバーへの管理アクセス権を持っています。

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

ただし、psqlの出力を、postgresが書き込みアクセス権を持たないディレクトリのファイルに書き込みたいのですが。

どうやってやるの?

ただし、スクリプト自体のEUIDを変更することを考えました。

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

サブシェルでパスワードpostgresユーザーを変更するにはどうすればよいですか(su -c 'psql -U postgres -c "ALTER USER forip PASSWORD \' password \ ';"' postgres)
Fndiaz

回答:


5

サブシェルを使用します。 (su -c 'psql -U postgres -c "<command>"' postgres) > file

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


5

あなたはこのトリックを使いたいかもしれません:

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

tee(1) はPOSIXユーティリティなので、その可用性に依存する場合があります。


それとも、とsudo

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

あなたの考えをありがとう。しかし、私は2つの問題に直面しています。少なくとも私のマシンでは、suに-uオプションがありません。これを正しく実行すると(su -cコマンドユーザー)、suを端末から実行する必要があるという別の問題が発生します。suはそのコマンドで新しいサブシェルを開くため、おそらく動作しません。

@Legateあなたのシステムでsudoしていますか?
ulidtko 2011年

@ulidtko:はい、そうです。

1
次に、sudo -u postgres psql -c '...' > filesudoersを使用して編集し、このコマンドのパスワードプロンプトを無効にします
gelraen

1

ユーザーがより良い書き込み権限(rootなど)でシェルスクリプトを実行でき、データを出力するときに、データベースユーザーpostgresが書き込み可能なフォルダー(/ tmpなど)に書き込みます。

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


0

セキュリティ制限を回避するためのトリッキーな方法を考えている場合は、目的が本当に賢明かどうかを自問することをお勧めします。私はpostgresqlについて何も知りません-あなたがしようとしていることをするために本当にadminアカウントでログインする必要がありますか、それとも通常のユーザーアカウントにそれに対して何でもある読み取り専用権限を与えることができる方法はありますか?


お返事ありがとうございます。ただし、スクリプトをrootとして実行しても問題はないため、セキュリティ制限の回避策は発生しません。

0

次のようにしてみませんsudo su postgres -c "psql ..." >/path/to/fileか?


答えてくれてありがとう。ただし、を使用した簡単なテストでsudo su postgres -c "echo test"は、このようなコマンドでは何も出力されないことがわかります。でrootに切り替えてからsudo -s実行すると、su postgres -c "echo test"印刷テストが行われるためsudo、どういうわけか出力が食べられているようです。なぜかはわかりませんが、私の推測では、標準出力が自分のシェルにドラッグされないサブシェルを使用しているsudoと思いsu -cます。
クリストフワーム2011年

あなたは何かを逃しているに違いありません。私の箱にsudo su postgres -c "echo \$USER"印刷postgresします。
アレックス、2011年

まあ、それは私のUbuntuノートブックでは機能しますが、スクリプトを実行する必要があるDebianサーバーでは機能しません。
クリストフワーム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.