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


36

PostgreSQLユーザーはデフォルトでUNIXソケットでピア認証を行います。UNIXユーザーはPostgreSQLユーザーと同じでなければなりません。したがって、人々は頻繁に使用するsusudopostgresスーパーユーザーになります。

次のような構造を使用している人をよく見ます。

sudo su - postgres

のではなく

sudo -u postgres -i

そして、なぜだろうか。同様に、私は見た:

sudo su - postgres -c psql

の代わりに

sudo -u postgres psql

なし大手あなたはせずに、古いプラットフォームにあった場合のバージョンはいくつかの意味になるだろう。しかし、なぜ未定のUNIXまたはLinuxで使用するのでしょうか?sudosusudosudo su


回答:


40

忘れる sudo su

使用sudo suすることに利点はありません。これは、人々が使用することに慣れていた時代からの時代錯誤的な習慣suです。sudoLinuxディストリビューションがルートパスワードの設定を停止しsudo、ルートアカウントにアクセスする唯一の方法を作ったときに、人々は正面から取り組み始めました。彼らは習慣を変えるのではなく、単にを使用しましたsudo su。(私は比較的最近まで、sudoers設定でボックスを使用して習慣を変更することを余儀なくされていました)。

つかいます sudo -u

ログインシェルの場合sudo -u postgres -iは、をお勧めしsudo su - postgresます。ユーザーがルートアクセス権を持っている必要はなく、ユーザー/etc/sudoersになる権利のみが必要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ため、削除することはできません)。

こちらもご覧ください:

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.