月別アーカイブ: 2005年10月

login.conf の設定

NetBSD のサーバに Squid をインストールしました。
私の環境ではデータセグメントサイズの soft limit がデフォルトでは 131072 (=128MB) となっていて、Squid を運用するにはちょっと少ない気がします。そこで、データセグメントサイズの制限を増やすことにしました。
デフォルトのデータセグメントサイズは login.conf で変更することができます。NetBSD のインストール直後には /etc/login.conf はありませんので、新規に作成します。

$ cat /etc/login.conf
default:
squid:\
:datasize-cur=256m:\
:tc=default:

とりあえずデータサイズは 256MB としました。増やすのは squid だけにしたいので、”squid” というクラスを定義して datasize-cur を 256m に設定しています。login.conf が存在していると default のエントリがないと怒られるので、default のエントリもあわせて作成します(中身は空ですが)。default クラスのエントリが空だと継承する必要はありませんが、一応 squid クラスのエントリに tc=default で継承させることにします。
squid クラスを追加したら、今度は squid ユーザのデフォルトのクラスを squid に変更します。これは vipw を使って squid のパスワードエントリの5番目にクラス squid を記述します。

squid:*:1002:1001:squid:0:0:Squid Web-Cache pseudo-user:/nonexistent:/sbin/nologin

データサイズが増えていることの確認は squid ユーザになって ulimit -dS を行えばよいのですが、ログインシェルが有効でないので su squid ではログインできません。su -m squid とする必要があります。
login.conf の記述を確認するには su の -c オプションを使ってクラスを指定する方法も使えます。たとえば、ユーザが root でクラスが squid のときの ulimit は次のようにして確認できます。

sudo su -c squid root -c "ulimit -aS"

これまでログインクラスはあまり利用したことはなかったのですが、少しずつ覚えていこうと思います。

アクセス権の設定

PostgreSQL のアクセス制御に関する設定は pg_hba.conf で行います。インストール直後の設定では local に対して trust 、つまり、データベースを動かしているホストにログインしているユーザなら、誰でもデータベースに接続できてしまいます。しかも、データベース上のどのユーザ(管理者を含む)にもなることができます。ちなみに、データベースのユーザとデータベースを動かしているホストのユーザとは直接の関係はありません。したがって UNIX 上のユーザ pgsql の権限で動いている PostgreSQL の、データベース上の管理者ユーザ pgsql とは名前が同じというに過ぎません。
とにかく、誰でもデータベースの管理者 pgsql として接続できるというのではセキュリティ上まずいので、接続できるユーザを制限しなければなりません。
すぐに思いつくのは、パスワードによる保護です。たとえば pg_hba.conf で method を md5 とすれば接続時にパスワードによる認証が行われます。このとき、MD5 によるパスワードのハッシュ値がデータベースに格納され、認証の際に利用されます。
しかし、この方法には欠点があります。データベース起動時にともなう管理作業や、データのバックアップはOSの起動時や cron などからバッチ的に行われることが一般的です。ところが、パスワードによる保護を行った場合、バッチ的に行うことが困難になってしまいます。なぜなら、OSのユーザとPostgreSQLのユーザとの間に関係がないので、OS上のユーザ pgsql の権限であろうと、root の権限であろうと、PostgreSQL の管理ユーザ pgsql として接続しようとしたときにはパスワードの入力を求められてしまうからです。
OS上のユーザ pgsql や root であれば、無条件に PostgreSQL 上のユーザ pgsql として振舞えることが必要です。もちろん、それ以外のユーザであれば、pgsql としての接続を拒否しなければなりません。
そのような場合には method を ident とする方法が利用できます。ident はその名称から identd(8) を動かさないといけないのでは、と思うかもしれませんが、ローカルで利用する際には不要です。identd sameuser とすると、OS上のユーザと同名の PostgreSQL であれば接続できるようになります。

local  all  all  ident sameuser

root 権限で pg_dump などが使用できるようにするには pg_ident.conf を使って root を pgsql にマップします。このとき、method には ident sameuser の代わりに ident mapname を使用します。ここでmapname は pg_ident.conf に記述したマップ名です。
root, pgsql が PostgreSQL ユーザ pgsql として接続できて、その他のユーザはOS上のユーザ名と一致する PostgreSQL ユーザ名で接続できるようにする設定は以下のようになります。ただし、root で接続する場合には明示的に pgsql ユーザを指定する必要があります。

pg_hba.conf:
local  all  pgsql  ident example_map
local  all  all      ident sameuser
pg_ident.conf:
example_map  pgsql  pgsql
example_map  root   pgsql