The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"вопрос об acl-атрибутах на файл и setuid/setgid на процесс"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"вопрос об acl-атрибутах на файл и setuid/setgid на процесс"  +/
Сообщение от i2d email on 21-Май-15, 10:44 
Здравствуйте!
Возник вопрос по получению доступа к файлу с acl-атрибутами из процесса.

Есть два пользователя в системе: testuser1 и testuser2. Они входят в группу testuser1 и testuser2, соответственно. (это их первичная группа). Также пользователь testuser1 входит в доп. группу testgroup1, а testuser2 - в testgroup2.

Есть некий файл test_file со следующим acl:
===
# file: tmp/test_file
# owner: testuser2
# group: testgroup2
user::rwx
group::rwx
group:testgroup1:rwx
mask::rwx
other::---
===
т.е. дополнительно группе testgroup1 назначены права rwx на файл.

Далее есть приложение, запускаемое от root, в котором меняется uid и gid процесса на testuser1/testgroup1:
===
  struct passwd* pw;
  pw = getpwnam("testuser1");
  setgid(pw->pw_gid);
  setuid(pw->pw_uid);
===

пытаемся прочитать файл в этом же процессе от testuser1:
fd = fopen("/tmp/test_file","r");
if (fd){
//ACCESS
}
else{
//DENY
}

и получаю DENY. Хотя по логике, на сколько я понимаю, если процесс работает от пользователя testuser1 (он входит в группы testuser1 и testgroup1), то я должен был прочитать этот файл. В чем я ошибаюсь, что делаю не так?

ps ядро 3.2.0-27
пробовал вместо/вместе с setuid делать setfsuid, seteuid, setreuid, setresuid. Эффект не меняется. Методы отрабатывают без ошибок.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "вопрос об acl-атрибутах на файл и setuid/setgid на процесс"  +/
Сообщение от Павел Самсонов email on 24-Май-15, 12:02 
>[оверквотинг удален]
> else{
> //DENY
> }
> и получаю DENY. Хотя по логике, на сколько я понимаю, если процесс
> работает от пользователя testuser1 (он входит в группы testuser1 и testgroup1),
> то я должен был прочитать этот файл. В чем я ошибаюсь,
> что делаю не так?
> ps ядро 3.2.0-27
> пробовал вместо/вместе с setuid делать setfsuid, seteuid, setreuid, setresuid. Эффект
> не меняется. Методы отрабатывают без ошибок.

Попробуйте fd = fopen("/tmp/test_otherfile","w");
С каким  атрибутами создастся файл? /tmp смотнирован с acl? Вы вообще командой cat от testuser1 можете этот файл прочитать без своей программы?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "вопрос об acl-атрибутах на файл и setuid/setgid на процесс"  +/
Сообщение от i2d email on 25-Май-15, 10:57 
>[оверквотинг удален]
>> и получаю DENY. Хотя по логике, на сколько я понимаю, если процесс
>> работает от пользователя testuser1 (он входит в группы testuser1 и testgroup1),
>> то я должен был прочитать этот файл. В чем я ошибаюсь,
>> что делаю не так?
>> ps ядро 3.2.0-27
>> пробовал вместо/вместе с setuid делать setfsuid, seteuid, setreuid, setresuid. Эффект
>> не меняется. Методы отрабатывают без ошибок.
> Попробуйте fd = fopen("/tmp/test_otherfile","w");
> С каким  атрибутами создастся файл? /tmp смотнирован с acl? Вы вообще
> командой cat от testuser1 можете этот файл прочитать без своей программы?

начну с конца.
1. через cat /tmp/test_file от имени testuser1 (su testuser1 делаю) файл читается. Без записанных в него acl, соответственно, - не читается.
2. tmp смонитирован без acl. Пробовал на корневом диске в /var. Его монтирую через fstab с ключиком acl. но почему-то при вызове команды mount без параметров вижу только это - (rw,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered,usrquota). Это ж, не совсем нормально?
3. файл сейчас с такими атрибутами - (-rwxrwx---+   1 testuser2 testgroup2      10 Май 25 07:27 test_file)

Это по созданному мною руками файлу.

4. Теперь как вы предлагается, создам через программу test_otherfile
Он создается таким аттрибутами - -rw-r--r--   1 testuser1 testuser1     0 Май 25 08:00 test_otherfile. cat'ом от имени пользователя testuser1 открывается.


Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "вопрос об acl-атрибутах на файл и setuid/setgid на процесс"  +/
Сообщение от pavel_simple (ok) on 25-Май-15, 16:40 
>[оверквотинг удален]
> монтирую через fstab с ключиком acl. но почему-то при вызове команды
> mount без параметров вижу только это - (rw,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered,usrquota).
> Это ж, не совсем нормально?
> 3. файл сейчас с такими атрибутами - (-rwxrwx---+   1 testuser2
> testgroup2      10 Май 25 07:27 test_file)
> Это по созданному мною руками файлу.
> 4. Теперь как вы предлагается, создам через программу test_otherfile
> Он создается таким аттрибутами - -rw-r--r--   1 testuser1 testuser1  
>    0 Май 25 08:00 test_otherfile. cat'ом от имени
> пользователя testuser1 открывается.

1. нужно определиться где у вас проблема,
a) она в правах если стандартный cat не может прочесть, сдандартный echo не может записать
б) она в программе т.к. код возврата может быть отличным от.
2. решать в заисимости от 1

по поводу mount сделать нужно mount -o remount,acl /tmp
и проверить устанавливаются ли права setfacl/getfacl, судя по всему с опцией acl проблем ет, почему она не отображается при выводе mount нужно разбираться отдельно.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "вопрос об acl-атрибутах на файл и setuid/setgid на процесс"  +/
Сообщение от i2d email on 25-Май-15, 17:09 
> 1. нужно определиться где у вас проблема,
> a) она в правах если стандартный cat не может прочесть, сдандартный echo
> не может записать
> б) она в программе т.к. код возврата может быть отличным от.
> 2. решать в заисимости от 1

полагаю, что проблемма в п.Б. Т.к. стандартный cat читает файл (или не читает, если группы в acl нет). С echo тоже самое.

> по поводу mount сделать нужно mount -o remount,acl /tmp
> и проверить устанавливаются ли права setfacl/getfacl, судя по всему с опцией acl
> проблем ет, почему она не отображается при выводе mount нужно разбираться
> отдельно.

setfacel и getfacl отрабатывают. После явного remount'a, как вы написали выше, ситуация не поменялась. Т.е. подразумеваем, что раздел смонтирован правильно. Почему это не видно - вопрос не главный.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

4. "вопрос об acl-атрибутах на файл и setuid/setgid на процесс"  +/
Сообщение от Павел Самсонов email on 25-Май-15, 16:52 
>[оверквотинг удален]
>> Попробуйте fd = fopen("/tmp/test_otherfile","w");
>> С каким  атрибутами создастся файл? /tmp смотнирован с acl? Вы вообще
>> командой cat от testuser1 можете этот файл прочитать без своей программы?
>  начну с конца.
> 1. через cat /tmp/test_file от имени testuser1 (su testuser1 делаю) файл читается.
> Без записанных в него acl, соответственно, - не читается.
> 2. tmp смонитирован без acl. Пробовал на корневом диске в /var. Его
> монтирую через fstab с ключиком acl. но почему-то при вызове команды
> mount без параметров вижу только это - (rw,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered,usrquota).
> Это ж, не совсем нормально?

Вы не перепутали open с fopen? Посмотрите маны на оба вызова.
> 3. файл сейчас с такими атрибутами - (-rwxrwx---+   1 testuser2
> testgroup2      10 Май 25 07:27 test_file)
> Это по созданному мною руками файлу.
> 4. Теперь как вы предлагается, создам через программу test_otherfile
> Он создается таким аттрибутами - -rw-r--r--   1 testuser1 testuser1  
>    0 Май 25 08:00 test_otherfile. cat'ом от имени
> пользователя testuser1 открывается.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

6. "вопрос об acl-атрибутах на файл и setuid/setgid на процесс"  +/
Сообщение от Павел Самсонов email on 25-Май-15, 19:47 
>[оверквотинг удален]
> # file: tmp/test_file
> # owner: testuser2
> # group: testgroup2
> user::rwx
> group::rwx
> group:testgroup1:rwx
> mask::rwx
> other::---
> ===
> т.е. дополнительно группе testgroup1 назначены права rwx на файл.

Смотрите внимательно RETURN VALUE в  man. У Вас ошибка в  if - надо писать прямолинейно как в мане
if (fd == NULL)
//deny
Else
//access
Ктому же тут не fd, а FILE*. С толку сбивающее имя переменной у вас.

>[оверквотинг удален]
> else{
> //DENY
> }
> и получаю DENY. Хотя по логике, на сколько я понимаю, если процесс
> работает от пользователя testuser1 (он входит в группы testuser1 и testgroup1),
> то я должен был прочитать этот файл. В чем я ошибаюсь,
> что делаю не так?
> ps ядро 3.2.0-27
> пробовал вместо/вместе с setuid делать setfsuid, seteuid, setreuid, setresuid. Эффект
> не меняется. Методы отрабатывают без ошибок.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру