[sr-dev] Permission problem and setuid in Kamailio 1.5
marius zbihlei
marius.zbihlei at 1and1.ro
Tue Oct 13 12:57:35 CEST 2009
Andrei Pelinescu-Onciul wrote:
> On Oct 13, 2009 at 12:55, marius zbihlei <marius.zbihlei at 1and1.ro> wrote:
>
>> Hi all,
>>
>> There is a permission problem if the daemon is started given -u and -g
>> parameters (sets up user and group for the process).
>>
>> The do_suid function (defined in demonize.c) is called after the call to
>> init_modules(), so the mod_init functions of the configured module are
>> loaded before the call to do_suid. This wasn't a problem in 1.3 because
>> no module(I am aware off) use the uid and gid of the process to do
>> permission checks.
>>
>> This has changed in 1.5, module carrierroute, as there is a check to see
>> if the route file in config-file mode (usually
>> /etc/kamailio/carrierroute.conf) has the right permission set on it
>> (Issues an warning if it's worldly writable and error if it's not
>> writable by the process owner). This of course is a problem because
>> kamailio hasn't yet setuid()/setgid() so the checks are done using the
>> wrong uid.
>>
>
> You should do the check then from child_init(PROC_INIT)
> (rank==PROC_INIT). It's executed after setuid(), but before any real
> forking (so you could still exit gracefully).
>
>
>
>> A correct (imho) course of action is to move the call to do_suid
>> function before the call to init_modules()(and before any other calls to
>> initialization functions).
>>
>
> No, the do_suid() is on purpose _after_ the mod_init() to allow the
> modules to open sockets/files a.s.o. before the suid part
> (e.g. this way if started as root a module can open a socket on a port <
> 1024 from mod_init).
> All the operations that require special privileges should be done from
> mod_init().
>
>
Ok, so tests like in carrierroute module's mod_init (testing the
permission against what is returned from geteuid() and getegid()) should
be moved to a later stage?
>> I've attached a small patch that does this (tested).
>>
>> There are any considerations on why the init_modules() should be called
>> with another uid/gid?
>>
>
> Yes, see above.
>
> Note that the PROC_INIT stuff will work on sip-router and probably not
> on old kamailio (> 3.0). You could try using 0 there (PROC_MAIN), but it
> will be called after forking some of the processes (the exit won't be as
> graceful).
>
>
> Andrei
>
>
The bug is present in kamailio 1.5 so i haven't yet looked into the
implementation of 3.0 . Looks nice that there is a central way where
to do this kind of actions
Greetings
Marius
More information about the sr-dev
mailing list