Cho phép tập lệnh rsync (rrsync) bị hạn chế đối với các thư mục tùy ý với ủy quyền


10

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

Và câu hỏi là? command=tùy chọn authorized_keyschỉ chấp nhận một lệnh được chạy. Thế là xong.
Jakuje

Tôi đã cố gắng làm rõ câu hỏi
Stefan

Câu trả lời:


6

Một khả năng có thể là tạo một chế độ xem chỉ đọc các thư mục mà bạn muốn người dùng chuyên dụng đó có thể sao lưu, với các ràng buộc . Không sử dụng sudo chút nào; thực hiện rrsynclệnh duy nhất được phép cho người dùng này. Thiết lập một lần:

mkdir /somewhere/backup-views /somewhere/backup-views/dir1 /somewhere/backup-views/dir2
chmod 700 /somewhere/backup-views
setfacl -m u:rx:backup-user /somewhere/backup-views

Thiết lập sau mỗi lần khởi động:

bindfs -o perms=a+r-w /actual/dir1 /somewhere/backup-views/dir1
bindfs -o perms=a+r-w /actual/dir2 /somewhere/backup-views/dir2

Hoặc các dòng tương ứng trong /etc/fstab:

/actual/dir1 /somewhere/backup-views/dir1 bindfs perms=a+r-w
/actual/dir2 /somewhere/backup-views/dir2 bindfs perms=a+r-w

Sau đó, thiết lập người dùng sao lưu để chạy rsynctrên /somewhere/backup-views.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.