[CRIU] [PATCH] security: set suid flag on crtools and check real uid on dump/restore

Ruslan Kuprieiev kupruser at gmail.com
Wed Oct 2 07:31:17 PDT 2013


On 02.10.2013 18:27, Ruslan Kuprieiev wrote:
> On 02.10.2013 14:03, Pavel Emelyanov wrote:
>> On 10/02/2013 05:54 PM, Ruslan Kuprieiev wrote:
>>> On 02.10.2013 13:25, Pavel Emelyanov wrote:
>>>> On 10/02/2013 05:00 PM, Ruslan Kuprieiev wrote:
>>>>> Hi!
>>>>>
>>>>> Lets set suid flag on crtools, so non-root users could dump/restore
>>>>> their own tasks and start service for their own tasks. On start criu
>>>>> will get it's real uid and will allow user to dump/restore only tasks
>>>>> that he own.
>>>>>
>>>>> Signed-off-by: Ruslan Kuprieiev <kupruser at gmail.com>
>>>>>
>>>> I don't quite understand the logic behind security_init() + 
>>>> restrict_uid()
>>>> and the need in two uids stores in security.c
>>> I think we can extend security_init later with some extra features (but
>>> I don't know with which, though:)). Also checkpatch.pl was mad about
>>> initializing static variables with zeros:).
>>>
>>> And restrict_uid() will be used very often in cr
>>> I think we may need to remember real uid, so  if non-root will start
>>> service, he won't be able to change his "effective" uid and 
>>> dump/restore
>>> tasks with other uids.
>> He will not be able to do it anyway. The restrict_uid() is not "let me
>> dump this uid", but "don't even try to dump anything but this".
>>
>>> It looks better to me, than resolving this
>>> situation in cr-service. Also i do think that ruid may be in handy 
>>> later.
>>> Or just use getuid() every time, instead of declaring second uid?
>> I thought that we just restrict_uid(getuid()) on crtools start and in
>> service child req-setup and that's it.
> If non-root starts service, on crtools we call restrict_uid(getuid()) 
> and now he is allowed to dump only his own tasks. Than, he gets a 
> request(through rpc) to dump task with other uid and we call 
> restcrict_uid(uid). So we need to check getuid() at restrict_uid(), so 
> root would be able to restrict to any uid, but non-root won't be able 
> to do this. Something like this:
>
> void restrict_uid(uid)
> {
>     if (getuid() == 0)
>         dumper_uid = uid;
> }
>
>
beter like this:

void restrict_uid(uid)
{
     if (getuid() == 0 || getuid() == uid)
         dumper_uid = uid;
}

so we will be able to use it in crtools in the very beginning.


More information about the CRIU mailing list