вопрос о правах доступа. |
Здравствуйте, гость ( Вход | Регистрация )
вопрос о правах доступа. |
oleg_2 |
7.10.2009, 1:01
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 12 Регистрация: 25.7.2009 Пользователь №: 943 Спасибо сказали: 1 раз(а) Репутация: 0 |
вопрос о правах доступа.
язык СИ. ОС UNIX. Пытаюсь написать прогрмму, которая должна корректно работать с правами доступа к файлам (ftp-сервер). Не получается, и не могу понять почему. краткое содержание: //--- родительский процесс (root) --- pid=fork(); if(pid==0){ //--- "дерутизация" --- pwd=getpwnam(user); gid=pwd->pw_gid; uid=pwd->pw_uid; n=setgid(gid); n=setuid(uid); //--- здесь тестовая распечатка --- //--- uid, gid, euid, egid - всё как ожидалось (user) --- fp=fopen(file,"r"); //--- ожидал, что файл будет доступен или недоступен // в соответствии с правами user --- //--- обработка файла --- exit(0); } Вопреки ожиданиям, программа работает так: исходный родительский процесс: uid=0; gid=0 процесс после форк и дерутизации: uid=1002; gid=1002 euid=1002; egid=1002 Варианты файла: файл: uid=1004; gid=1004 - работает как ожидалось, т. е. на правах других пользователей. файл: uid=1001; gid=0 - работает как если бы процесс имел gid=0, т. е. на правах группы. Кто знает прошу ответить. |
|
|
oleg_2 |
10.10.2009, 17:35
Сообщение
#2
|
Студент Группа: Новичок Сообщений: 12 Регистрация: 25.7.2009 Пользователь №: 943 Спасибо сказали: 1 раз(а) Репутация: 0 |
Ответ (в неявном виде) нашелся на форуме http://www.linux.org.ru/
В разделе программирование и разработка ПО под Linux/Unix в теме core dump - не сохраняется корка (stpg). Правильный ответ: Процессу придан список дополнительных групп пользователей. Вызов n=setgid(gid); устанавливает группу процесса, но список остается. Помогло применение функции k=setgroups(0,gr_list); который способен опустошить этот список. Теперь работает согласно замыслу. user'а тоже надо снабдить таким списком (если есть). Об этом я сразу не подумал. Ключ к решению есть. Спасибо. |
|
|
Текстовая версия | Сейчас: 29.11.2024, 1:37 |