SELinux question
Paul Howarth
paul at city-fan.org
Wed May 31 20:20:00 UTC 2006
On Wed, 2006-05-31 at 19:40 +0200, Zoltan Boszormenyi wrote:
> Paul Howarth írta:
> > Zoltan Boszormenyi wrote:
> >> Paul Howarth írta:
> >>> Zoltan Boszormenyi wrote:
> >>>> Paul Howarth írta:
> >>>>> Zoltan Boszormenyi wrote:
> >>>>>> What puzzled me is starting postgresql failed at boot
> >>>>>> but not the manual "service postgresql start" after bootup.
> >>>>>> (Maybe different contexts are applied to the logged-in root
> >>>>>> and the init program?)
> >>>>>
> >>>>> Running the initscript should be exactly the same as the boot
> >>>>> process. Starting the service manually (without the initscript)
> >>>>> would be different though, as no domain transition would happen.
> >>>>
> >>>> Both
> >>>>
> >>>> service postgresql start
> >>>>
> >>>> and
> >>>>
> >>>> su - postgres
> >>>> PGDATA=/home1/pgsql pg_ctl start
> >>>>
> >>>> started successfully if I logged in as root or under "su -" from my
> >>>> mortal uid.
> >>>> (The postgresql initscript uses "runuser" instead of "su" IIRC.)
> >>>>
> >>>>> Do the AVCs logged during the boot process show the process
> >>>>> running as postgresql_t? If you do a "ps uaxZ", is it running as
> >>>>> postgresql_t or unconfined_t?
> >>>>
> >>>> It's running under postgresql_t.
> >>>
> >>> Does it run under postgresql_t if you start it using pg_ctl?
> >>
> >> $ su -
> >> # service postgresql stop
> >> # su - postgres
> >> $ PGDATA=/var/lib/pgsql/data pg_ctl start
> >> postmaster starting
> >> $ ps axuZ | grep post | grep -v bash | grep -v grep | grep -v "su -"
> >> | grep -v "ps "
> >> user_u:system_r:unconfined_t postgres 5171 0.5 0.3 92280 3808
> >> pts/0 S 18:32 0:00 /usr/bin/postmaster
> >> user_u:system_r:unconfined_t postgres 5174 0.0 0.1 81324 1056
> >> pts/0 S 18:32 0:00 postgres: logger process
> >> user_u:system_r:unconfined_t postgres 5176 0.0 0.1 92264 1152
> >> pts/0 S 18:32 0:00 postgres: writer process
> >> user_u:system_r:unconfined_t postgres 5177 0.0 0.1 82460 992
> >> pts/0 S 18:32 0:00 postgres: stats buffer process
> >> user_u:system_r:unconfined_t postgres 5178 0.0 0.1 81456 1196
> >> pts/0 S 18:32 0:00 postgres: stats collector process
> >> $ pg_ctl stop
> >> $ logout
> >
> > That one's as I expected.
> >
> >> # service postgresql start
> >> A(z) postgresql szolgáltatás elindítása: [ OK ]
> >> [root at host-81-17-177-202 ~]# ps axuZ | grep post | grep -v bash |
> >> grep -v grep | grep -v "su -" | grep -v "ps "
> >> user_u:system_r:unconfined_t postgres 5307 9.5 0.3 92284 3808
> >> ? S 18:36 0:00 /usr/bin/postmaster -p 5432 -D
> >> /var/lib/pgsql/data
> >> user_u:system_r:unconfined_t postgres 5309 0.0 0.1 81328 1056
> >> ? S 18:36 0:00 postgres: logger process
> >> user_u:system_r:unconfined_t postgres 5311 0.0 0.1 92268 1112
> >> ? S 18:36 0:00 postgres: writer process
> >> user_u:system_r:unconfined_t postgres 5312 0.0 0.0 82464 920
> >> ? S 18:36 0:00 postgres: stats buffer process
> >> user_u:system_r:unconfined_t postgres 5313 0.0 0.1 81460 1196
> >> ? S 18:36 0:00 postgres: stats collector process
> >>
> >> Both times it's running under unconfined_t, so it doesn't matter
> >> whether it's running under "su - postgres" or "runuser - postgres".
> >> It seems what matters is that it's started from a logged in user:
> >
> > I'd have expected this to run as postgresql_t
> >
> > Is your postgresql initscript correctly labelled as initrc_exec_t?
>
> Unfortunately not:
>
> # ls --context postgresql
> -rwxr-xr-x root root user_u:object_r:etc_t postgresql
>
> although other rc scripts are. Relabelled.
That explains the failure to transition to the postgresql_t domain then.
> # service postgresql restart
> A(z) postgresql szolgáltatás leállítása: [ OK ]
> A(z) postgresql szolgáltatás elindítása: [ OK ]
> # ps axuZ | grep post | grep -v bash | grep -v grep | grep -v "su -" |
> grep -v "ps "
> user_u:system_r:postgresql_t postgres 12617 1.2 0.3 92280 3808
> ? S 19:22 0:00 /usr/bin/postmaster -p 5432 -D
> /var/lib/pgsql/data
> user_u:system_r:postgresql_t postgres 12623 0.0 0.1 81324 1056
> ? S 19:22 0:00 postgres: logger process
> user_u:system_r:postgresql_t postgres 12625 0.0 0.1 92264 1148
> ? S 19:22 0:00 postgres: writer process
> user_u:system_r:postgresql_t postgres 12626 0.0 0.1 82460 992
> ? S 19:22 0:00 postgres: stats buffer process
> user_u:system_r:postgresql_t postgres 12627 0.0 0.1 81456 1196
> ? S 19:22 0:00 postgres: stats collector process
>
> Now it is postgresql_t.
Good.
> It must have been "joe", the editor I used
> for modifying the rc script. It renamed the original to postgresql~
> and created a new file with the modified content. The new file
> got some default policy from the directory it resides in.
> Should I always use "vi" to edit such config files? It saves the
> file in place. Or joe needs some fixup.
Well initscripts aren't really config files and I don't think they
should be edited at all. If they need to provide configurability, it
should be done by editing something under /etc/sysconfig, e.g. by
setting a PGDATA variable in (say) /etc/sysconfig/postgresql (I don't
know if the postgresql initscript has such a facility though). The file
under /etc/sysconfig can be sourced by the initscript to get the config
info.
Having said that, I believe vi will edit the file in place by default.
It's what I use for most of my editing tasks anyway.
> > What's the state of the postgresql_disable_trans boolean?
> > # getsebool postgresql_disable_trans
>
> # getsebool postgresql_disable_trans
> postgresql_disable_trans --> off
That was the other possible cause of the transition failure.
Paul.
More information about the fedora-list
mailing list