Tôi có nên kích hoạt tài khoản root cho rsync không?


10

Làm cách nào để kích hoạt tài khoản root? Tôi biết điều đó thường không được khuyến nghị nhưng tôi muốn thiết lập một tập lệnh không tương tác để sao lưu máy chủ của mình bằng rsync. Tôi có thể sử dụng --rsync-path="sudo rsync"nhưng sau đó tôi sẽ cần lưu trữ mật khẩu sudo của mình rõ ràng, điều này có vẻ tệ hơn nhiều so với việc kích hoạt tài khoản root.

Câu trả lời:


10
  1. Tạo mybackuptài khoản người dùng mới, riêng biệt trên máy khách và máy chủ
  2. Khóa mật khẩu sudo passwd -l mybackupcho các tài khoản này để ngăn đăng nhập trực tiếp
  3. Cho phép, thông qua sudo, các tài khoản mới để chạy một rất cụ thể /usr/bin/rsync/ --some-long-command /from/here /to/therelệnh root với NOPASSWD:trong /etc/sudoerssử dụngsudo visudo
  4. Tạo khóa SSH không mật khẩu mới cho cục bộ cho máy chủ từ xa bằng cách sử dụng sudo -u mybackup ssh-keygen
  5. Thêm sudo -u crontab -evào một hoặc một đầu khác để chạy điều khiển từ xa rsyncbằng cách sử dụng sshvà các phím khi vận chuyển

Bằng cách này, lệnh duy nhất thể chạy dưới quyền root là lệnh mà bạn đã cho phép rõ ràng và người dùng từ xa duy nhất có thể kích hoạt nó là người nắm giữ nửa kia của khóa ssh đã cài đặt, vì nó cũng bị khóa mật khẩu chỉ có thể là ai đó có quyền truy cập sudo hoặc crontab bạn thiết lập.


Đó chính xác là những gì tôi đã không nghĩ đến khi cho phép một lệnh rất cụ thể trong sudoers (tôi đã cho phép 'rsync'). Đề nghị tuyệt vời!
Olivier Lalonde

2
+1 để ghi chú "một lệnh ... rất cụ thể". Mặt khác, cho người dùng quyền chạy sudo rsyncvà cho phép người dùng chọn các tùy chọn được truyền cho rsync có nghĩa là người dùng có thể sử dụng rsync để đọc / ghi /etc/sudoerstệp chẳng hạn và cấp cho mình quyền truy cập sudo đầy đủ.
Suzanne Dupéron

7
  1. Bạn có thể chỉnh sửa /etc/sudoersđể cho phép bất cứ người dùng nào đang chạy lệnh (hoặc tất cả người dùng) chạy nó rootmà không cần mật khẩu (có lẽ hơi nguy hiểm với rsync).

  2. Bạn có thể chạy toàn bộ lệnh / script / bất cứ thứ gì rootkhông? Tôi giả sử điều này sẽ chạy qua cron vì vậy chỉ cần thêm một rootcông việc qua:

    sudo crontab -e
    

    Lưu ý: bạn có thể thực hiện những việc khá phức tạp bằng cách gói lệnh cron của bạn trong một bash -e "..."dấu ngoặc hoặc chỉ thực hiện trong một tập lệnh riêng. Giả sử nó không được thiết lập, nếu rootchạy nó (thông qua cron), nó sẽ chạy như rootvậy sẽ giải quyết vấn đề cho phép của bạn.


Vấn đề là nếu tôi thiết lập tập lệnh trên máy cục bộ của mình và chạy nó dưới quyền root thì nó sẽ gặp vấn đề về quyền trên máy chủ. Nếu tôi thiết lập tập lệnh trên máy chủ của mình và chạy nó dưới quyền root, thì máy cục bộ sẽ là máy có vấn đề về quyền. Nói cách khác, tôi cần phải có quyền root trên cả máy cục bộ và máy chủ.
Olivier Lalonde

Bạn có thể viết một tập lệnh ở mỗi đầu và cho phép nó chạy với sudongười dùng bình thường. Điều đó sẽ an toàn hơn là chỉ cho phép rsync.
Oli

Sudo là một ý tưởng tuyệt vời. Bạn có thể chỉ định chính xác, người dùng nào có thể chạy lệnh nào. Làm đi.
Frank

6

Bạn có thể (nhưng không nên) cung cấp mật khẩu cho người dùng root bằng

sudo passwd root

Chỉnh sửa: bit Setuid không hoạt động cho các tập lệnh. Nếu không, bạn có thể sử dụng bit setuid trên chương trình sao lưu.

sudo chown root backup
sudo chmod u+s backup

Có lẽ, bạn thậm chí muốn chạy bản sao lưu như một công việc định kỳ?


1
Bạn không cần chỉ định "root" vì sudo chạy khi env của root root. ( sudo whoamitrả về, root) vì vậy chỉ sudo passwdcần thiết.
Marco Ceppi

setuid không hoạt động cho các kịch bản
enzotib

Phải, các tập lệnh được thực thi bởi trình bao có tên trong dòng she-bang. Xin lỗi vì thông tin sai lệch.
Frank
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.