gpt4 book ai didi

svn - rsync pop_dir "/home/user_x"失败 : permission denied, 为什么?

转载 作者:行者123 更新时间:2023-12-04 15:46:34 25 4
gpt4 key购买 nike

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

export -f sync_section 
su sync_user -c "sync_section $source $tmp $dest"

其中 sync_section 是脚本中的一个函数:
# 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
}

这个想法是每个有权更新/同步网络服务器的人都知道sync_user的密码,因此可以进入“su sync_user”部分。

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

building file list ... rsync: pop_dir "/home/user_x" failed: Permission denied (13)
rsync error: errors selecting input/output files, dirs (code 3) at flist.c(1314) [sender=2.6.8]

经过一番谷歌搜索后,我发现我遇到的问题是由 rsync 引起的,因为它要求 sync_user 对脚本调用者的主目录具有完全访问权限。
那是对的吗?如果是这样,为什么?是否有解决方法?

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

最佳答案

好吧,经过一些来回,我们设法解决了问题。
这完全是用户权限问题,与 rsync 无关。

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

为了修复它,我在运行 'sync_section 脚本之前添加了一个 'cd ~':

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

脚本现在就像一个魅力:)

我希望这对 future 的人有所帮助!

关于svn - rsync pop_dir "/home/user_x"失败 : permission denied, 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12365980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com