Re: server authentication over Unix-domain sockets - Mailing list pgsql-hackers
From | KaiGai Kohei |
---|---|
Subject | Re: server authentication over Unix-domain sockets |
Date | |
Msg-id | 4C2005AF.7090300@ak.jp.nec.com Whole thread Raw |
In response to | server authentication over Unix-domain sockets (Peter Eisentraut <peter_e@gmx.net>) |
Responses |
Re: server authentication over Unix-domain sockets
|
List | pgsql-hackers |
I've checked on this patch. As you described at the source code comments as follows, it is not portable except for Linux due to the getsockopt() API. + // TODO: currently Linux-only code, needs to be made + // portable; see backend/libpq/auth.c I expect it shall be fixed (using the code come from ident_unix()?) before committing. I'd like to point out one other point. It uses getpwuid() to translate a user identifier into a user name, but it returns a pointer of the static variable within glibc. So, it is not thread-safe. I recommend to use getpwnam_r() instead. Except for the issue, it looks to me fine. * The patch can be applied on the head of the git repository. * We can build the code without any warnings/errors. * It works as described in the documentation. [kaigai@saba ~]$ php -r 'pg_connect("dbname=postgres requirepeer=xxxx");' PHP Warning: pg_connect(): Unable to connectto PostgreSQL server: invalid connection option "requirepeer" in Command line code on line 1 => Existing library, so not supported. [kaigai@saba ~]$ env LD_LIBRARY_PATH=/usr/local/pgsql/lib/ \ php -r 'pg_connect("dbname=postgres requirepeer=xxxx");'PHP Warning: pg_connect(): Unable to connect to PostgreSQL server: requirepeer failed (actual: kaigai!= required: xxxx) in Command line code on line 1 LOG: incomplete startup packet => Patched library, so it prevent unexpected user-id of server process [kaigai@saba ~]$ env LD_LIBRARY_PATH=/usr/local/pgsql/lib/ \ php -r 'pg_connect("dbname=postgres requirepeer=kaigai");' => Patched library, so it does not prevent anything for the expected user-id. [kaigai@saba ~]$ env LD_LIBRARY_PATH=/usr/local/pgsql/lib/ \ php -r 'pg_connect("dbname=postgres");' => No "requirepeer", so it does not prevent anything. [kaigai@saba ~]$ env LD_LIBRARY_PATH=/usr/local/pgsql/lib/ \ env PGREQUIREPEER=xyz php -r 'pg_connect("dbname=postgres");'PHP Warning: pg_connect(): Unable to connect to PostgreSQL server: requirepeer failed (actual:kaigai != required: xyz) in Command line code on line 1 LOG: incomplete startup packet => PGREQUIREPEER environment variable, instead of "requirepeer" option. Same result. [kaigai@saba ~]$ env LD_LIBRARY_PATH=/usr/local/pgsql/lib/ \ env PGREQUIREPEER=kaigai php -r 'pg_connect("dbname=postgres");' => PGREQUIREPEER environment variable, instead of "requirepeer" option. Same result. Thanks, (2010/05/30 20:00), Peter Eisentraut wrote: > It has been discussed several times in the past that there is no way for > a client to authenticate a server over Unix-domain sockets. So > depending on circumstances, a local user could easily insert his own > server and collect passwords and data. Suggestions for possible > remedies included: > > You can put the socket file in a sufficiently write-protected directory. > But that would strongly deviate from the default setup, and anyway the > client still cannot readily verify that the server is the right one. > > You can also run SSL over Unix-domain sockets. This is currently > disabled in the code, but it would work just fine. But it's obviously > kind of awkward, and the connection overhead was noticeable in tests. > > Then it was suggested to use the local "ident" mechanism in reverse, so > the client could verify what user the server runs under. I have > implemented a prototype of this. You can put, e.g., > > requirepeer=postgres > > into the connection parameters, and the connection will be rejected > unless the process at the other end of the socket is running as > postgres. > > The patch needs some portability work and possible refactoring because > of that, but before I embark on that, comments on the concept? > > > > > -- KaiGai Kohei <kaigai@ak.jp.nec.com>
pgsql-hackers by date: