Tôi hiện đang viết tập lệnh bash shell để chuyển bản sửa đổi mới nhất của kho svn của chúng tôi sang máy chủ web. Điều này được thực hiện bằng cách sử dụng xuất khẩu svn đến máy chủ A và rsync'ing nó với máy chủ web, một người dùng đặc biệt (gọi là sync_user) đã được tạo ra với đủ quyền trên mỗi bên (máy chủ A và máy chủ web) để thực hiện các cập nhật này. Các kịch bản sử dụng "su sync_user" để thực hiện việc xuất khẩu svn và rsync như sync_user:rsync pop_dir "/ home/user_x" không thành công: quyền bị từ chối, tại sao?
export -f sync_section
su sync_user -c "sync_section $source $tmp $dest"
nơi sync_section là một chức năng trong kịch bản:
# 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
}
Ý tưởng là bất cứ ai có quyền truy cập đến cập nhật/đồng bộ hóa máy chủ web biết mật khẩu của sync_user, do đó có thể nhập vào phần "su sync_user".
Âm thanh tốt về mặt lý thuyết nhưng rsync là không hài lòng với thiết lập này và mang lại cho tôi thông báo lỗi sau: (user_x là người sử dụng gọi script)
#### 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]
Sau một googeling tôi phát hiện ra rằng vấn đề tôi đang gặp phải do rsync gây ra vì nó yêu cầu sync_user có quyền truy cập đầy đủ vào thư mục chính của người gọi script. Điều đó có đúng không? và nếu vậy thì sao? và có một công việc xung quanh cho nó?
Lưu ý: Thư mục chính của người dùng không được sử dụng chút nào trong tập lệnh. Chỉ/tmp/trên máy chủ A và/var/www/vhosts/trên máy chủ web được sử dụng.