読者です 読者をやめる 読者になる 読者になる

それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

PostgresのインストールとPAM設定

debaian に postgresql をインストールした。

Postgresのユーザのパスワードをいちいち管理するのが面倒なので、/etc/shadow を同一にして、Linuxのログイン・パスワードを使えるようにした。 MySQLのPAMと同じね。

そのうちLDAPにしたいんだけど、まぁpsql -> PAM -> LDAP に変えればいいだけなので、これはそのうち。 PAMにさえ丸投げしてれば別に困らないし。

psql をインストール

sudo aptitude install postgresql

基本設定を作る

sudo -e /etc/postgresql/9.1/main/postgresql.conf

日本語が化けるので、設定を変更

 grep lc /etc/postgresql/9.1/main/postgresql.conf
lc_messages = 'C'                       # locale for system error message

外部からの接続を許可する

 grep listen /etc/postgresql/9.1/main/postgresql.conf
listen_addresses = '*'          # what IP address(es) to listen on;

ユーザーtakuyaを作る

ユーザーを作る。

root@atom:/home/takuya# su postgres
postgres@atom:/home/takuya$ createuser takuya
新しいロールをスーパーユーザにしますか? (y/n)n
新しいロールに対してデータベースを作成する権限を与えますか? (y/n)y
新しいロールに対して別のロールを作成する権限を与えますか? (y/n)n
takuyaユーザー専用DBの データベース名takuyaで作る

postgres@atom:/home/takuya$ psql
psql (9.1.16)
"help" でヘルプを表示します.
postgres=# create database takuya;
CREATE DATABASE
postgres=#

PAM連携

パスワードの管理が面倒なので、PAMに認証を丸投げする。

通常は、IPv4 の部分に、md5を書けば、Postgresに登録したパスワードでmd5 のハッシュで認証してくれる。(チャレンジレスポンスかな?)

ここをPAMにすると、postgresは、認証をPAMに丸投げしてくれる

/etc/postgresql

# IPv4 local connections:
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             takuya          192.168.10.0/24    pam

ipv4 と ついでにlocal も追加

# "local" is for Unix domain socket connections only
local   all             takuya                                  pam

PAM側でpostgresを受け付けてあげる。

postgres はpam に自分の名前をpostgresで依頼するので、/etc/pam.d/postgresを作る

sudo -e /etc/pam.d/postres
@include common-auth

私はDebianなので、@include common-auth を使った、cento なら password-auth あたりかな

で、postgresはPAM経由で/etc/shadow を使うので、/etc/shadow が読み取れなきゃ、認証できない。 なので、/etc/shadow が postgresにも読み取れるようにする。

postgresql に /etc/shadow の読取り許可を出には、shadowグループに追加する。

sudo usermod -aG shadow postres
sudo chmod g+r /etc/shadow

setacl してもいいんだけど、面倒なので、shadowグループに追加した。 PAM経由をroot にするssh-agent 的なのないのかしら。

ここ迄できたら、再起動

sudo /etc/init.d/postgres restart

いいかげん、sysmtemd使えって話ですが。

再起動が終わったらログインしてみる。

別サーバーからのログインを確認する。

takuya@:~/Desktop$ psql -h 192.168.10.50 -U takuya
Password for user takuya:
psql (9.4.4, server 9.1.16)
SSL connection (protocol: TLSv1.2, cipher: DHE-RSA-AES256-GCM-SHA384, bits: 256, compression: on)
Type "help" for help.

takuya=>

おkおk

これで、PostgreSQL側でPAM認証経由でユーザー認証ができて、パスワード管理する手間が減った。楽チン楽チン。

追記

そういえば、PAM設定してPAMに任せてるのに、/etc/shadow 権限ってなんで必要なんだったんろう。直接/etc/shadow読み取れるなら、PAMに任せず/etc/shadow読み取って認証できるじゃんね。

広告を非表示にする