我在svn链接目录中限制某个文件settings.py
的权限,以便只能由sudo用户和apache读取,用户名为www-data
。因此,在settings.py上,我设置了sudo chmod 640 settings.py
和sudo chown www-data:www-data settings.py
。我仍然希望我的非特权用户能够svn update
和svn commit
,因此sudo visudo
我设置了
unprivileged_user ALL = /usr/bin/svn commit *, /usr/bin/svn update *, \
/usr/bin/svn update
这样该用户仍然可以sudo svn commit
和sudo svn update
。由于svn commit
的权限有限,它无法执行简单svn update
或settings.py
。如果非特权用户尝试这样做,则会出现来自svn的消息,指出工作副本已被锁定。我注意到,当我执行sudo svn update
时,unprivileged_user正在以root身份进行更新,因此从svn存储库更新的文件现在由root:root
拥有644
权限。这与我settings.py
拥有www-data:www-data
所拥有的内容相悖。我能做些什么来使www-data
始终是所有者并且rwx prvileges保持不变?
答案 0 :(得分:1)
使用脚本来执行更新并重置权限。
<强> svnupdate.sh:强>
#!/bin/bash
MY_PROJ_PATH=/home/.... # Put you path here
pushd $MY_PROJ_PATH
svn update $* && chown -R www-data. . && chmod 640 settings.py
popd
还要确保chmod 750 /usr/local/bin/svnupdate.sh
以防止sudo命令出现安全问题
并更新sudoeres文件:
unprivileged_user ALL = /usr/bin/svn commit *, /usr/local/bin/svnupdate.sh
答案 1 :(得分:1)
www-data
用户将在其所在的每个系统上拥有不同的UID,从而使其成为每个系统上的新用户。您无法预测这将是哪个用户,因此您无法正确设置所有者。检查出来的人将是所有者。
此外,svn不会跟踪权限。它只跟踪文件是否可执行。文件附带的权限由您的umask决定。
答案 2 :(得分:0)
这就是我现在所拥有的。我正在使用post svn update hook,我不知道它有多安全。这仅适用于svn update
。请随时在此陈述您的意见。
在usr/local/bin
中,我根据此创建ssh-action.sh
:
http://top-frog.com/2009/04/23/client-side-pre-and-post-svn-hooks-with-unix-aliases/
我的实际ssh-action.sh
看起来像这样:
#!/bin/bash
REAL_SVN='/usr/bin/svn';
BASE_PATH='/home/unprivileged_user/test_svn/';
$REAL_SVN $@;
wait;
# post-svn actions
if [ $1 = 'up' ] || [ $1 = 'update' ]; then
find -L $BASE_PATH -type f -name 'settings.py' -exec bash -c 'sudo chmod 0400 $0 && sudo chown www-data $0; sudo chgrp www-data $0' '{}' \;
fi
然后在sudo visudo
中,我将其添加到底部:
unprivileged_user ALL = NOPASSWD: /bin/chown www-data */test_svn/settings.py, /bin/chmod 0400 */test_svn/settings.py, /bin/chgrp www-data */test_svn/settings.py
接下来,cd /home/unprivileged_user
,打开.bashrc
,然后将其添加到底部:
alias svn = /usr/local/bin/ssh-action.sh
之后,我需要使.bashrc
不可变,以便非特权者无法编辑它以绕过我的svn钩子。我使用sudo chattr +i .bashrc
希望每当unprivileged_user尝试svn update
test_svn
工作副本时,settings.py
将拥有www-data:www-data
拥有400个权限。你们有什么感想?这里有安全漏洞吗?感谢。