Здравствуйте!
Возник вопрос по получению доступа к файлу с 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. Эффект не меняется. Методы отрабатывают без ошибок.