web-dev-qa-db-ja.com

Sudo su-postgresとSudo -u postgresの違いは何ですか?

PostgreSQLユーザーはデフォルトでUNIXソケットでピア認証を行います。UNIXユーザーはPostgreSQLユーザーと同じである必要があります。したがって、人々は頻繁にsuまたはSudoを使用してpostgresスーパーユーザーになります。

私はしばしば人々が次のような構成を使用しているのを見ます:

Sudo su - postgres

のではなく

Sudo -u postgres -i

そして私はなぜだろうと思います。同様に、私は見ました:

Sudo su - postgres -c psql

の代わりに

Sudo -u postgres psql

先頭のSudoがなければ、suのない古いプラットフォームを使用している場合、Sudoバージョンは意味があります。しかし、なぜプレホリシックではないUNIXまたはLinuxでSudo suを使用するのですか?

38
Craig Ringer

忘れるSudo su

Sudo suを使用するメリットはありません。これは、人々がsuを使用していた時代からの時代遅れの習慣です。 Linuxディストリビューションがrootパスワードの設定をやめ、Sudoをrootアカウントにアクセスする唯一の方法にしたとき、人々はSudoを前に付け始めました。彼らは習慣を変えるのではなく、Sudo suを使用しました。 (私は比較的最近まで、sudoers構成のボックスを使用して自分の習慣を変えるように強いられたときの1人でした)。

Sudo -uを使用

ログインシェルの場合、Sudo -u postgres -iよりもSudo su - postgresの方が適しています。ユーザーが/etc/sudoersでrootアクセス権を持っている必要はありません。ユーザーはpostgresになる権限だけが必要です。また、アクセス制御を強化することもできます。

コマンド実行用

Sudo -u postgres psql -c "SELECT 1"

代替より優れています:

Sudo su - postgres -c "psql -c \"SELECT 1\""

引用符やその他のシェルメタ文字を二重にエスケープする必要がなく、ルートを必要としないという他のセキュリティ上の利点もあります。おそらく誤って書き込みます。

Sudo su - postgres -c psql -c "SELECT 1"

時々、それは正しく動作しません。

最後に、Sudoを使用して環境変数を設定する方が簡単です。

Sudo PATH=/usr/pgsql-9.3/bin:$PATH -u postgres /usr/pgsql-9.3/bin/initdb -D /var/lib/pgsql/testcluster

suより。 (ここで、PATH設定は、initdbが正しいpostgres実行可能ファイルを見つけられるようにするために必要です)。

そう。 suコマンドが存在することを忘れてください。もう必要ありません。習慣を破るには、エラーを出力するものにエイリアスします。 (ただし、一部のinitおよびパッケージセットアップスクリプトはsuを使用しているため、削除できません)。

以下も参照してください。

41
Craig Ringer