我有一個svn倉庫,屬於用戶'foo',通過Apache訪問,我試圖從post-commit鉤子運行svn更新,同時也擁有foo所擁有的目錄。setuid on svn update wrapper not working?
我創建了一個由foo擁有的C包裝器,並設置了suid位,如http://subversion.apache.org/faq.html#website-auto-update中所建議的那樣,然後應由post-commit腳本調用,由用戶www-data運行。當我從用戶www-data(空的環境)運行包裝時,它實際上調用svn update作爲用戶foo,但莫名其妙地得到了svn提示用戶www-data的密碼。
包裝的代碼,稱爲svnupdater.c是相同的(當然與正確的路徑)正如在官方faqs建議。它由用戶foo創建和編譯。設置SUID位後,LS -l內部/鉤示出其中包括:
-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
如果我然後 'スWWW的數據' 和運行 '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':
當然整個事情的時後提交調用將無法正常工作。
我真的不能似乎明白了問題的所在,因爲這個策略是官方建議之一,但它看起來像SVN更新繞過setuid和仍然使用實際的用戶...