Thread: Error: Could not change user id

Error: Could not change user id

From
Russell Davie
Date:
Hi All

I have used PostgreSQL for SQL-Ledger in Linux (Ubuntu) for about 6months and have run into PostgreSQL
problems when it starts up.

PostgreSQL is reporting errors about changing user id so that it falls
over when the system boots.

I've read this:
http://archives.postgresql.org/pgsql-admin/2006-01/msg00273.php

I have found FAQ for Linux:
http://www.designmagick.com/article/2/Starting-Out/Installing-PostgreSQL
yet this error still occurs after changing the permissions of the postgresql directory

ie:
sudo chown -R postgres:postgres /usr/share/postgresql
sudo chown -R postgres:postgres /usr/share/postgresql-common

what happens:

Manually starting postgresql by the user postgres:
postgres@XXXX:/etc/init.d$ ./postgresql-7.4 start
chmod: changing permissions of `/var/run/postgresql': Operation not permitted
 * Starting PostgreSQL 7.4 database server:main
Error: Could not change user id                  [fail]

after changing ownership of `/var/run/postgresql' to postgres:postgres and with
permissions 4777 then the errors are less, but postgresql still doesn't
start:

postgres@XXX:/etc/init.d$ ./postgresql-7.4 start
 * Starting PostgreSQL 7.4 database server:main
Error: Could not change user id                  [fail]

I think this maybe something in /etc/postgresql/7.4/pg_hba.log  or /etc/postgresql/7.4/postgresql.conf yet I haven't
foundthe solution to get PostgreQL going. 

What could be wrong here?

How can this be fixed?

What do I need to read?

TIA

Russell

Re: Error: Could not change user id

From
Tom Lane
Date:
Russell Davie <rjrd@exemail.com.au> writes:
> Manually starting postgresql by the user postgres:
> postgres@XXXX:/etc/init.d$ ./postgresql-7.4 start
> chmod: changing permissions of `/var/run/postgresql': Operation not permitted
>  * Starting PostgreSQL 7.4 database server:main
> Error: Could not change user id                  [fail]

There is no such error message anywhere in the PG 7.4 source code.
I suppose it's coming out of whatever init script you're using;
have you tried reading the init script for enlightenment?

(FWIW, init scripts are almost always designed to be executed as
root, not as random unprivileged users like postgres.  sudo might
help.)

            regards, tom lane

Re: Error: Could not change user id

From
Russell Davie
Date:
On Sun, 28 May 2006 20:59:33 -0400
Tom Lane <tgl@sss.pgh.pa.us> wrote:

> Russell Davie <rjrd@exemail.com.au> writes:
> > Manually starting postgresql by the user postgres:
> > postgres@XXXX:/etc/init.d$ ./postgresql-7.4 start
> > chmod: changing permissions of `/var/run/postgresql': Operation not permitted
> >  * Starting PostgreSQL 7.4 database server:main
> > Error: Could not change user id                  [fail]
>
> There is no such error message anywhere in the PG 7.4 source code.
> I suppose it's coming out of whatever init script you're using;
> have you tried reading the init script for enlightenment?
>

Interesting! I never thought it could be the window manager.
This is still occurring using Metacity and it still happened in Enlightnement and WindowMaker and also at CLI without
anywindow-manager at all! 

> (FWIW, init scripts are almost always designed to be executed as
> root, not as random unprivileged users like postgres.  sudo might
> help.)
>
>             regards, tom lane

postgresql doesn't like been stared as root:
f
XX@XXXX:/etc/init.d$ sudo ./postgresql-7.4 start
Password:
 * Starting PostgreSQL 7.4 database server:main
pg_ctl: cannot be run as root
Please log in (using, e.g., "su") as the (unprivileged) user that will own the server process.
The PostgreSQL server failed to start. Please check the log output:                         [fail]

On doing a search on the disk using the terms: "Could not change user id"
located this in in line 467 of /usr/share/postgresql-common/PgCommon.pm

It seems this is checking the group and user of the process which suggests not getting settings correct.

Maybe this could help in showing where to correct this issue?

[CODE]
# Change effective and real user and group id. If the user id is member of the
# "shadow" group, then "shadow" will be in the set of effective groups. Exits
# with an error message if user/group ID cannot be changed.
# Arguments: <user id> <group id>
sub change_ugid {
    my ($uid, $gid) = @_;
    my $groups = $gid;
    $groups .= " $groups"; # first additional group

    # check whether owner is in the shadow group, and keep shadow privileges in
    # this case; this is a poor workaround for the lack of initgroups().
    my @shadowmembers = split /\s+/, ((getgrnam 'shadow')[3]);
    for my $m (@shadowmembers) {
        my $mid = getpwnam $m;
        if ($mid == $uid) {
            $groups .= ' ' . (getgrnam 'shadow');
            last;
        }
    }

    $( = $) = $groups;
    $< = $> = $uid;
    error 'Could not change user id' if $< != $uid;
    error 'Could not change group id' if $( != $gid;
}
[/CODE]


regards

Russell

Re: Error: Could not change user id

From
Tim Allen
Date:
Russell Davie wrote:
> On Sun, 28 May 2006 20:59:33 -0400 Tom Lane <tgl@sss.pgh.pa.us>
> wrote:
>> There is no such error message anywhere in the PG 7.4 source code.
>> I suppose it's coming out of whatever init script you're using;
>> have you tried reading the init script for enlightenment?

> Interesting! I never thought it could be the window manager. This is
> still occurring using Metacity and it still happened in Enlightnement
> and WindowMaker and also at CLI without any window-manager at all!

I'm quite sure that Tom was referring to enlightenment in the general
sense of the word, ie some init script (eg the one for the postgresql
service) might enlighten you as to what is going on! :-)

Tim

--
-----------------------------------------------
Tim Allen          tim@proximity.com.au
Proximity Pty Ltd  http://www.proximity.com.au/

Re: Error: Could not change user id

From
Russell Davie
Date:
On Mon, 29 May 2006 14:57:15 +1000
Tim Allen <tim@proximity.com.au> wrote:

> Russell Davie wrote:
> > On Sun, 28 May 2006 20:59:33 -0400 Tom Lane <tgl@sss.pgh.pa.us>
> > wrote:
> >> There is no such error message anywhere in the PG 7.4 source code.
> >> I suppose it's coming out of whatever init script you're using;
> >> have you tried reading the init script for enlightenment?
>
> > Interesting! I never thought it could be the window manager. This is
> > still occurring using Metacity and it still happened in Enlightnement
> > and WindowMaker and also at CLI without any window-manager at all!
>
> I'm quite sure that Tom was referring to enlightenment in the general
> sense of the word, ie some init script (eg the one for the postgresql
> service) might enlighten you as to what is going on! :-)

thanks for that! <doh>
I *was* wondering what he meant and found the error message in start-up script /usr/share/postgresql-common/PgCommon.pm

Reading the script suggests that the user to be a member of the "shadow" group, which is now done.
However, postgresql is still not starting and produces the same errors:

postgres@XXXXX:~$ /etc/init.d/postgresql-7.4 start
chmod: changing permissions of `/var/run/postgresql': Operation not permitted
 * Starting PostgreSQL 7.4 database server:main
Error: Could not change user id                                     [fail]

Are there special privileges that the "shadow" group has?

What is eluding me is decyphering it into practical steps to getting postgresql working again.

TIA

Rusell

>
> Tim
>
> --
> -----------------------------------------------
> Tim Allen          tim@proximity.com.au
> Proximity Pty Ltd  http://www.proximity.com.au/
>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: if posting/reading through Usenet, please send an appropriate
>        subscribe-nomail command to majordomo@postgresql.org so that your
>        message can get through to the mailing list cleanly