Haruskah saya mengaktifkan akun root untuk rsync?

10

Bagaimana saya bisa mengaktifkan akun root? Saya tahu ini biasanya tidak disarankan tetapi saya ingin mengatur skrip non-interaktif untuk membuat cadangan server saya menggunakan rsync. Saya bisa menggunakan --rsync-path="sudo rsync"tetapi kemudian saya harus menyimpan kata sandi sudo saya dengan jelas yang tampaknya jauh lebih buruk daripada mengaktifkan akun root.

Olivier Lalonde
sumber

Jawaban:

10
  1. Buat mybackupakun pengguna baru yang terpisah di klien dan server
  2. Kunci kata sandi sudo passwd -l mybackupuntuk akun ini untuk mencegah masuk langsung
  3. Izinkan, melalui sudo, mereka account baru untuk menjalankan sangat spesifik /usr/bin/rsync/ --some-long-command /from/here /to/thereperintah sebagai root dengan NOPASSWD:di /etc/sudoersmenggunakansudo visudo
  4. Buat kunci SSH tanpa kata sandi baru untuk lokal ke host jarak jauh menggunakan sudo -u mybackup ssh-keygen
  5. Tambahkan ke sudo -u crontab -esatu atau ujung lainnya untuk menjalankan remote rsyncmenggunakan sshdan kunci sebagai transportasi

Dengan cara ini, satu-satunya perintah yang dapat dijalankan sebagai root adalah perintah yang telah Anda izinkan secara eksplisit, dan satu-satunya pengguna jarak jauh yang dapat mengaktifkannya adalah pemegang separuh lain dari sif kunci ssh yang dipasang, yang juga memiliki kata sandi terkunci hanya bisa seseorang dengan sudo mengakses diri mereka sendiri, atau crontab yang Anda atur.

dibebani
sumber
Itulah tepatnya yang saya tidak pikirkan untuk mengizinkan perintah yang sangat spesifik pada sudoers (saya mengizinkan 'rsync'). Saran bagus!
Olivier Lalonde
2
+1 untuk mencatat "perintah ... yang sangat spesifik". Jika tidak, memberi pengguna hak untuk menjalankan sudo rsyncdan memungkinkan pengguna untuk memilih opsi yang diteruskan ke rsync berarti bahwa pengguna dapat menggunakan rsync untuk membaca / menulis /etc/sudoersfile misalnya, dan memberikan dirinya sendiri akses sudo penuh.
Suzanne Dupéron
7
  1. Anda dapat mengedit /etc/sudoersuntuk mengizinkan pengguna apa pun yang menjalankan perintah (atau semua pengguna) untuk menjalankannya roottanpa kata sandi (mungkin agak berbahaya dengan rsync).

  2. Tidak bisakah Anda menjalankan seluruh perintah / skrip / apa pun root? Saya menganggap ini akan dijalankan melalui cron jadi tambahkan saja rootpekerjaan melalui:

    sudo crontab -e
    

    Catatan: Anda dapat melakukan hal-hal yang cukup rumit dengan membungkus perintah cron Anda di bash -e "..."penjepit atau hanya melakukannya dalam skrip terpisah. Dengan asumsi itu tidak ditetapkan, jika rootdijalankan (melalui cron), itu akan berjalan rootsehingga harus menyelesaikan masalah izin Anda.

Oli
sumber
Masalahnya adalah jika saya mengatur skrip pada mesin lokal saya dan menjalankannya sebagai root, itu akan memiliki masalah izin di server. Jika saya mengatur skrip di server saya dan menjalankannya sebagai root, maka mesin lokal akan menjadi orang dengan masalah izin. Dengan kata lain, saya perlu memiliki hak akses root pada mesin lokal dan server.
Olivier Lalonde
Anda dapat menulis skrip di setiap ujung dan memungkinkannya dijalankan sudooleh pengguna normal. Itu akan lebih aman daripada sekadar membiarkan rsync.
Oli
Sudo adalah ide bagus. Anda dapat menentukan dengan tepat, pengguna mana yang dapat menjalankan perintah mana. Lakukan.
Frank
6

Anda bisa (tetapi tidak boleh) memberikan kata sandi kepada pengguna root

sudo passwd root

Sunting: Setuid bit tidak berfungsi untuk skrip. Kalau tidak, Anda bisa menggunakan bit setuid pada program cadangan.

sudo chown root backup
sudo chmod u+s backup

Mungkin, Anda bahkan ingin menjalankan backup sebagai tugas cron?

jujur
sumber
1
Anda tidak perlu menentukan "root" karena sudo berjalan sebagai root env penggunanya adalah root. ( sudo whoamiPengembalian, root) jadi sudo passwddibutuhkan.
Marco Ceppi
setuid tidak berfungsi untuk skrip
enzotib
Benar, skrip dieksekusi oleh shell bernama di baris she-bang. Maaf atas informasi yang salah.
Frank