setuid на svn update wrapper не работает? - PullRequest
0 голосов
/ 28 марта 2011

У меня есть svn-репозиторий, принадлежащий пользователю 'foo' и доступ к которому осуществляется через Apache, и я пытаюсь запустить svn update из ловушки post-commit для каталога, который также принадлежит foo.

Я создал оболочку C, принадлежащую foo, и установил бит suid, как предложено в http://subversion.apache.org/faq.html#website-auto-update, который затем должен вызываться скриптом post-commit, запускаемым пользователем www-data.

Тем не менее, когда я запускаю оболочку из пользовательских www-данных (с пустой средой), она фактически вызывает svn update как пользователя foo, но необъяснимым образом я получаю приглашение от svn, запрашивающего пароль пользователя www-data.

Код для оболочки, называемый svnupdater.c, такой же (конечно, с правильными путями), как предлагается в официальных часто задаваемых вопросах.Он создается и компилируется пользователем foo.После установки бита suid ls -l inside / hooks показывает среди прочего:

-rwxr-xr-x 1 www-data foo   74 2011-03-28 12:54 post-commit
-rwsr-sr-x 1 foo      foo 7144 2011-03-28 12:16 svnupdater

Если I, то su su-data и запустите env - ./svnupdater (из sh или из bash).), ps aux правильно показывает:

foo   20260  3.7  0.8  14008  4492 pts/0    S+   12:18   0:00 svn update /home/foo/foosvn

Но все же я вижу, что обновление svn подсказывает мне:

Authentication realm: <http://xxxxxx> xxxxx
Password for 'www-data':

И, конечно, все это не будет работать, когда послеcommit вызывает его.

Я не могу понять, в чем проблема, поскольку эта стратегия официально предложена, но похоже, что svn update обходит setuid и все еще использует фактического пользователя..

1 Ответ

1 голос
/ 28 марта 2011

Похоже, я нашел решение.

Вам нужно добавить параметр --config-dir внутри оболочки (так выглядит this ), так как кажется, что в противном случае svn не будет читать файлы аутентификации из правильного каталога.

Я думаю, что это должно быть задокументировано в FAQ по Apache.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...