API for Managing pg_hba and postgresql.conf
Looking at the list history, I see this has been discussed in the
past, but it has been long enough that perhaps it is time to revisit it.
It would appear from my own support queues, that one of the most
prevalent issues with PostgreSQL installations is not a functional
one, but an administrative one. For obvious reasons, the secure by
default installation is the correct choice, but it presents a
problem. With the proliferation of PostgreSQL onto platforms where
security isn't natural, there are hurdles that have to be dealt with.
What I'm seeing is a default installation protects the Data directory
properly, but in so doing means that altering the configuration files,
pg_hba.conf and postgresql.conf require database administrators, who
should not necessarily have a level of rights to become superuser at
the file system level to alter the mentioned files.
Rather than change the fundamental file layout or location, I would
propose that we expose an API or Schema in the database to better
allow manipulation of these configuration structure from within
PostgreSQL. This would allow a DBA to make changes to the
configuration without the need to be a machine administrator, or even
to run with escalated privilege at the OS level.
My concern over tackling this is that of security.
What would be the appropriate way to protect this API.
Should it be a collection of functions or s a schema?
Should it be part of the INFORMATION_SCHEMA?
Should it be an entirely different schema, say CONFIGURATION_SCHEMA?
Should the Schema or functions be restricted to a specific database
(say postgres) rather than part of every database?
Since most changes would require a SIGHUP, should the server process
itself be alter to allow for a dynamic restart from within the
environment?
While I have opinions and have tinkered with the idea a bit, I'll be
the first to admit that this is functionality that needs to be
discussed and structure in a generally supportable way rather than a
platform specific hack, so I'm looking for thoughts and opinions of an
educated variety.
A huge portion of the motivation here is to allow for easy to
graphical administration interfaces, making the system more
approachable, and to make remote administration of these files less
cumbersome.
On Thu, 14 Aug 2008, Andrew Satori wrote:
What I'm seeing is a default installation protects the Data directory
properly, but in so doing means that altering the configuration files,
pg_hba.conf and postgresql.conf require database administrators, who should
not necessarily have a level of rights to become superuser at the file system
level to alter the mentioned files.
This suggests you're doing something wrong, and it's no wonder you think
this is a serious management problem (I consider it a minor one).
In a typical installation, the data directory that contains the database
and configuring files will be owned by a database user, typically
"postgres". DBAs should be able to get to all of those by switching to
that user, without need any true superuser rights. If that isn't the case
in your environment, I'm curious how you ended up there, and it's no
wonder that's a serious management problem for you. I consider this area
only a minor annoyance. Normally the only thing I see that you can't do
as the postgres user is directly execute the database start/stop scripts
that root runs ("service postgresql start" on RedHat for example), but
since all that can be done via pg_ctl instead this is an easily scriptable
issue to work around.
A huge portion of the motivation here is to allow for easy to graphical
administration interfaces, making the system more approachable, and to make
remote administration of these files less cumbersome.
There's already a bunch of work in that area going on already. Check the
archives for the "GUCS Overhaul" and "Parsing of pg_hba.conf and
authentication inconsistencies" threads for two long-running discussions
of the fundamental server-side issues needed to pull that off. You
touched on the main one here:
Since most changes would require a SIGHUP, should the server process
itself be alter to allow for a dynamic restart from within the
environment?
Many of the problems with what you're thinking of revolve around the
unfortunate answers that pop up when you ask "what if I try and put bad
information in postgresql.conf/pg_hba.conf?"; see those threads I
mentioned for some context on that.
--
* Greg Smith gsmith@gregsmith.com http://www.gregsmith.com Baltimore, MD