Svn rsync pop“u dir”/主页/用户“x”;失败:权限被拒绝,为什么?

Svn rsync pop“u dir”/主页/用户“x”;失败:权限被拒绝,为什么?,svn,unix,permissions,rsync,Svn,Unix,Permissions,Rsync,我目前正在编写一个bashshell脚本,以将最新版本的svn存储库传输到web服务器。这是使用svn导出到服务器A并与Web服务器同步完成的,创建了一个特殊用户(称为sync_user),在每一方(服务器A和Web服务器)上都有足够的权限来执行这些更新。 脚本使用“su sync_user”作为sync_user执行svn导出和rsync: export -f sync_section su sync_user -c "sync_section $source $tmp $dest" 其中

我目前正在编写一个bashshell脚本,以将最新版本的svn存储库传输到web服务器。这是使用svn导出到服务器A并与Web服务器同步完成的,创建了一个特殊用户(称为sync_user),在每一方(服务器A和Web服务器)上都有足够的权限来执行这些更新。 脚本使用“su sync_user”作为sync_user执行svn导出和rsync:

export -f sync_section 
su sync_user -c "sync_section $source $tmp $dest"
其中sync_部分是脚本中的一个函数:

# critical section which performs the actual website update (export & sync)
# takes 3 parameters: source, tmp, dest
function sync_section {

  source=$1
  tmp=$2
  tmp_old=$tmp"_old"
  dest=$3

  #enter critical section
  set -e

    # export to temp folder on server A
    svn export -q --force $source $tmp  --native-eol LF

    # rsync with remote live website folder.
    rsync -avzhiO $tmp $dest

    # clean up
    rm -rf $tmp_old 
    mv -f $tmp $tmp_old 

  # exit critical section
  set +e
}
其想法是,拥有更新/同步Web服务器权限的每个人都知道同步用户的密码,因此可以进入“su同步用户”部分

理论上听起来不错,但rsync对此设置不满意,并给出以下错误消息:(user_x是调用脚本的用户)

在谷歌搜索之后,我发现我遇到的问题是由rsync引起的,因为它要求sync_用户对脚本调用方的主目录拥有完全访问权限。 对吗?如果是,为什么?有什么办法可以解决吗


注意:脚本中根本不使用用户的主目录。仅使用服务器A上的/tmp/和Web服务器上的/var/www/vhosts/

好吧,经过反复思考,我们终于解决了这个问题。 这完全是一个用户权限问题,与rsync本身无关

运行“su sync_user…”时,活动终端指向调用脚本的用户(user_x)的主目录。由于sync_用户甚至不允许位于该文件夹中,因此不允许运行某些命令(如rsync或ls),这会导致错误消息

为了修复它,我在运行“sync_”部分脚本之前添加了一个“cd~”:

su sync_user -c "cd ~; sync_section $source $tmp $dest"
而剧本现在就像一个符咒:)

我希望这对将来的人有帮助

su sync_user -c "cd ~; sync_section $source $tmp $dest"