apache2+ikiwiki: проблема с suid wrapper
Поставил ikiwiki себе в home.
На враппер права установлены права с suid (как и положено):
-rwsr-sr-x 1 14249 Жнв 15 20:47 public_html/wiki/ikiwiki.cgi*
владелец и группа -- 1000
Редактирование не работает, выдаёт ошибку
Error: cannot write to /home/user/wiki/.ikiwiki/lockfile: Permission denied
Стал разбираться, почему-то враппер запускает вики-движок с правами www-data.
В генератор враппера (/usr/share/perl5/IkiWiki/Wrapper.pm) добавил:
fprintf(stderr, "before: uid=%i, euid=%i\\n", (int)getuid(),
(int)geteuid()); /*added by me*/
if (setregid(getegid(), -1) != 0 &&
setregid(getegid(), -1) != 0) {
perror("failed to drop real gid");
exit(1);
}
if (setreuid(geteuid(), -1) != 0 &&
setreuid(geteuid(), -1) != 0) {
perror("failed to drop real uid");
exit(1);
}
fprintf(stderr, "after: uid=%i, euid=%i\\n", (int)getuid(),
(int)geteuid()); /*added by me*/
Вот результат: /var/log/apache2/error.log:
[Wed Aug 15 20:47:44 2012] [error] [client 192.168.1.2] before:
uid=33, euid=33, ...
[Wed Aug 15 20:47:44 2012] [error] [client 192.168.1.2] after: uid=33,
euid=33, ...
В первой выдаче должно быть euid=1000, во второй -- всё по 1000.
У apache2 включены модули (из имеющих отношение): cgi, suexec, userdir.
Тот же код, взятый враппера, только suid на 33, запущен от 1000 (всё работает):
before: uid=1000, euid=33
after: uid=33, euid=33
А вот он запущен апачем:
[Wed Aug 15 21:09:39 2012] [error] [client 192.168.1.2] before: uid=33, euid=33
[Wed Aug 15 21:09:39 2012] [error] [client 192.168.1.2] after: uid=33, euid=33
Почему не работает suid из-под апача?
Reply to: