[pgpool-general: 1590] watchdog root requirement

Kyle O'Donnell kyleo at 0b10.mx
Thu Apr 11 05:55:30 JST 2013


Hi,

I am trying to avoid running pgpool as root but it seems it expects you to use a setuid root executable (which I'm not comfortable with).  I've come up with a solution which I think should be acceptable but does not currently work because the code will exit based on what it thinks is required.

I feel like this should be decided by the administrator via either compile time option and/or command line argument and or configuration param.

Here's what I've done:

ifconfig_path = '/var/lib/postgresql/bin'
if_up_cmd = 'pg_ifconfig eth0:2 $_IP_$ 255.255.255.0 up'
if_down_cmd = 'pg_ifconfig eth0:2 $_IP_$ 255.255.255.0 down'
arping_path = '/var/lib/postgresql/bin'           # arping command path
arping_cmd = 'pg_arping $_IP_$ 1'  

created 2 scripts (pg_arping/pg_ifconfig) which execute the commands required via sudo:

$ cat pg_arping
#!/bin/bash
[ $# -ne 2 ] && echo "$0 ip.add.re.ss timeout" && exit 3
ip=$1
timeout=$2
/usr/bin/sudo /usr/sbin/arping -U $ip -w $timeout

$ cat pg_ifconfig
#!/bin/bash
[ $# -ne 4 ] && echo "$0 interface ip.add.re.ss netmask [up|down]" && exit 3
iface=$1
ip=$2
netmask=$3
action=$4
/usr/bin/sudo /sbin/ifconfig $iface inet $ip netmask $netmask $action


FYI to get this working I simply removed the code I didn't like, but I'm not a huge fan of this either:

main.c:

                        /* check root
                        if (geteuid() != 0)
                        {
                                pool_error("watchdog must be started under the privileged user ID to up/down virtual network interface.");
                                pool_shmem_exit(1);
                                exit(1);
                        } */

--kyleo


More information about the pgpool-general mailing list