我在服务器上安装了 subversion 1.6.17,客户端使用 SSH+SVN 连接变体。自从安装了新操作系统 (SLES 11) 以来,我经常遇到 svn 操作问题,最终导致以下权限被拒绝错误:
svn: Berkeley DB error for filesystem '/local/Storage/svn/myproject-src.rep/db' while checkpointing after Berkeley DB transaction:
DB_RUNRECOVERY: Fatal error, run database recovery
svn: bdb: /local/Storage/svn/myproject-src.rep/db/log.0000007722: log file unreadable: Permission denied
svn: bdb: PANIC: Permission denied
svn: bdb: DB_ENV->log_newfh: 7722: DB_RUNRECOVERY: Fatal error, run database recovery
svn: bdb: txn_checkpoint: log failed at LSN [7722 196676]: DB_RUNRECOVERY: Fatal error, run database recovery
当我运行svnadmin 恢复命令一切又恢复正常,失败的 svn 操作可以成功执行。我的假设是每次创建日志文件时都会发生此错误!recover 命令不会更新任何文件权限,但会修改新的日志文件。此外,每个通过 SSH 连接的用户都可以打开和读取日志文件。
每个日志文件都具有权限-rw-r--r-- 1 根 mygroup这表明它应该是可读的!我不确定它是否也应该是可写的,所以我包装了 svn 脚本以强制权限-rw-rw-r--:
#!/bin/sh
umask 002
/usr/bin/svn_orig "$@"
不幸的是,这并没有改变权限=(
谁能告诉我发生了什么事?
答案1
现在我找到了解决问题的方法!我不得不重新安装/本地/存储具有 ACL 功能并为我的组设置默认权限。
我修改了/etc/fstab如下(添加了acl):
/dev/xvdd /local/Storage ext3 defaults,acl 1 2
如果你想在不重启的情况下进行测试,你也可以使用mount -o 重新挂载,acl /dev/xvdd。然后我更改了我的存储库的权限并为该组设置了 ACL 默认权限。
$> find /local/Storage/svn/myproject-src.rep -type d -exec chmod 2770 {} \;
$> find /local/Storage/svn/myproject-src.rep -type f -exec chmod 660 {} \;
$> setfacl -R -d -m group::rwx /local/Storage/svn/myproject-src.rep
$> chgrp -R mygroup /local/Storage/svn/myproject-src.rep