なぜ`su postgres`ができないのですか?

なぜ`su postgres`ができないのですか?
  1. ルートパスワードを提供するときに、次のコマンドが失敗を報告する理由がわかります。

    $ su postgres
    Password: 
    su: Authentication failure
    

    これが正しいかsuルートパスワードを尋ねる、いいえ postgres

    その場合postgres、postgreSQLをインストールするときにpostgresqlサーバーに接続するためのログインを設定せず、postgresUbuntuは明示的にユーザーを作成しませんでした。パスワードは何ですか?

    存在する/etc/passwd

    postgres:x:124:133:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash
    

    存在する/etc/shadow

    postgres:*:17478:0:99999:7:::
    
  2. 実際に不可能な場合、su postgres通常、ターゲットsu ユーザーは何に切り替えることができますか?

    彼らはまた、IDがパラメータとしてsetuid()である可能性があるユーザーです。これは正しいですか?

    APUEを介して有効なログインシェルコマンドなしでログインすると、ログインできないことがわかりました。彼らsuも編集できますか?しかし、postgres有効なログインシェルコマンドがありますが、/bin/bashなぜそれができないのですかsu postgres

ありがとうございます。

答え1

2番目のフィールドを見る/etc/shadow

postgres:*:17478:0:99999:7:::

通常、パスワードは暗号化されていますが、ここにはアスタリスクのみがあります。これはアカウントがロックされていることを意味し、パスワードは許可されません。これはパスワードが割り当てられる前の新しいアカウントの状態です。

現在ロックされているユーザーアカウントに切り替えるには、ターゲットアカウントのパスワードを必要としない移行方法が必要です。の場合、suこれは最初に完全なルートになる必要があることを意味します。

パスワード認証によりアカウントがロックされている場合でも、アカウントにsudoアクセスできるように設定できます。postgres/etc/sudoersは次のとおりです。

Tim     ALL=(postgres) ALL

sudoそのコマンドラインsu postgresはですsudo -u postgres -s。注:この方法では、元のアカウントの一部の環境設定をユーザーセッションで引き続き使用できますpostgres。これを望むかもしれないし、望ましくないかもしれません。シェル/環境の両方がsudoこのアカウントを使用していて、個人設定が異なる2人以上のデータベース管理者がいる場合は、実際に便利ですpostgres

postgresユーザーが直接ログインした場合と同じ環境を望む場合sudo -u postgres -i(と同じsu - postgres)を使用することもできます。

ただし、操作するにはsu postgresユーザーのパスワードを設定するだけですpostgres。これはpasswd postgresrootとして実行することで達成できます。

答え2

postgresユーザーにパスワードを提供しないでください。これで、誰かがそのユーザーとしてログインして必要なすべての操作を実行できるようになり、これはセキュリティ上の欠陥と見なされます。代わりに、このユーザーに sudo 権限を付与し、次の構造を使用する必要があります。

sudo -u postgres psql ...

関連情報