Tự động sao lưu
Tôi muốn triển khai một giải pháp sao lưu với dữ liệu sao chép từ nhiều thư mục khác nhau từ máy chủ Web (Máy chủ Web) sang máy chủ sao lưu cục bộ (BackupServer). Bản sao lưu sẽ chạy không giám sát và do đó tôi muốn sử dụng xác thực dựa trên khóa với khóa riêng không có mật khẩu.
Đặc quyền
Các thư mục tôi muốn sao lưu chỉ có thể đọc được bởi người dùng đặc quyền. Tôi muốn sử dụng rsync để sao chép các tập tin. Tôi đã tạo một người dùng sao lưu chuyên dụng và cho phép người dùng thực thi rsync bằng sudo mà không được nhắc nhập mật khẩu với quy tắc visudo:
backup-user ALL = NOPASSWD: /usr/bin/rsync
Cân nhắc về Bảo mật
Tôi muốn cải thiện bảo mật bằng cách hạn chế các lệnh mà người dùng sao lưu có thể thực thi bằng cách thêm danh sách các lệnh vào tệp ủy quyền của WebServer. Tôi đã cài đặt rrsync như được đề cập trong bài viết này .
command="/usr/bin/rrsync",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAA134143NzaC1yc...
Rrsync mong đợi một thư mục con
Trái ngược với rsync thông thường, rrsync hy vọng thư mục con sẽ được cung cấp trong tệp khóa được ủy quyền, như được mô tả trong bài đăng trên blog này
command="/usr/share/rsync/rrsync /var/backup/client1/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa
Hạn chế này hoạt động nhưng nó chỉ cho phép tôi sao lưu một thư mục cụ thể là / var / backup / client1 /
Tôi muốn cung cấp các thư mục tôi muốn sao lưu từ BackupServer trong lệnh rsync. Có khả năng sử dụng rrsync chính xác như rsync không, ví dụ:
rsync -avze ssh --rsync-path='sudo rrsync' backupuser@111.222.33.44:/media/data /backups/Server/
Làm rõ thêm
Tôi biết rằng phần lệnh = "..." trong ủy quyền_hosts giới hạn các lệnh thực thi cho người dùng này chính xác với các lệnh được cung cấp, nhưng với rsync bình thường, tôi có thể làm một cái gì đó như thế này để cung cấp đường dẫn tôi muốn sao lưu như một tham số:
command="/usr/bin/rsync --server --sender -vlogDtpre.is . ${SSH_ORIGINAL_COMMAND//* \//\/}"
Điều này không hoạt động với rrsync.
Giải pháp được chấp nhận
Mặc dù về mặt kỹ thuật không phải là câu trả lời dứt khoát cho câu hỏi, tôi nghĩ rằng giải pháp được đăng bởi Gilles là một cách tiếp cận rất hay. Tôi đã tạo một thư mục gốc cho tất cả các khung nhìn của thư mục thực tế mà tôi muốn sao lưu. Vì lý do này, tôi chỉ có thể hạn chế xác thực một cách an toàn cho rrsync.
One time todo
sudo mkdir /mnt/Backups-Rsync-Readonly
sudo chown -R rsync-backup /mnt/Backups-Rsync-Readonly
sudo mkdir /mnt/Backups-Rsync-Readonly/VAR-WWW
sudo mkdir /mnt/Backups-Rsync-Readonly/MySQL-Backups
sudo setfacl -m u:rsync-backup:rx /mnt/Backups-Rsync-Readonly/
sudo setfacl -m u:rsync-backup:rx /mnt/Backups-Rsync-Readonly/MySQL-Backups
sudo setfacl -m u:rsync-backup:rx /mnt/Backups-Rsync-Readonly/VAR-WWW
Tạo lượt xem (đi sau khi khởi động lại)
sudo bindfs -o perms=0000:u=rD,force-user=rsync-backup /var/www /mnt/Backups-Rsync-Readonly/VAR-WWW
sudo bindfs -o perms=0000:u=rD,force-user=rsync-backup /MySQL-Dumps /mnt/Backups-Rsync-Readonly/MySQL-Backups
Phiên bản Fstab
/home/stefan/Scans /mnt/Backups-Rsync-Readonly/VAR-WWW fuse.bindfs perms=0000:u=rD,force-user=rsync-backup 0 0
Authorized_keys
command="/usr/bin/rrsync -ro /mnt/Backups-Rsync-Readonly",from="192.168.0.10",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding ssh-rsa AAAAB
command=
tùy chọnauthorized_keys
chỉ chấp nhận một lệnh được chạy. Thế là xong.