Saya memiliki perintah ini untuk membuat cadangan mesin jarak jauh. Masalahnya adalah saya perlu hak root untuk membaca dan menyalin semua file. Saya tidak memiliki pengguna root yang diaktifkan untuk alasan keamanan dan menggunakan sudo
cara Ubuntu. Apakah saya perlu perpipaan keren atau sesuatu untuk melakukan ini?
rsync -chavzP --stats [email protected]:/ /media/backupdisk/myserverbackup/
root
akun di tempat pertama.sudo
, terutama dikombinasikan denganNOPASSWD
seperti yang direkomendasikan dalam komentar, tidak benar-benar meningkatkan keamanan mesin Anda.Jawaban:
Saya akan merekomendasikan bahwa Anda hanya menggunakan akun root di tempat pertama. Jika Anda mengaturnya seperti ini:
sshd_config
pada mesin target untukPermitRootLogin without-password
.ssh-keygen
pada mesin yang menarik cadangan untuk membuat kunci pribadi SSH (hanya jika Anda belum memiliki kunci SSH). Jangan menetapkan frasa sandi. Google tutorial jika Anda memerlukan detail untuk ini, harus ada banyak./root/.ssh/id_rsa.pub
mesin cadangan ke/root/.ssh/authorized_keys
mesin target Anda.maka setup yang dihasilkan harus cukup aman.
sudo
, terutama dikombinasikan denganNOPASSWD
seperti yang direkomendasikan dalam komentar, tidak memiliki manfaat keamanan hanya dengan menggunakan akun root. Misalnya saran ini:pada dasarnya tetap memberikan
rsyncuser
izin root. Anda bertanya:Yah, sederhana. Dengan konfigurasi yang disarankan,
rsyncuser
sekarang dapat dijalankanrsync
sebagai root tanpa diminta kata sandi.rsync
adalah alat yang sangat kuat untuk memanipulasi file, jadi sekarangrsyncuser
memiliki alat yang sangat kuat untuk memanipulasi file dengan izin root. Menemukan cara untuk mengeksploitasi ini hanya membutuhkan waktu beberapa menit (diuji pada Ubuntu 13.04, membutuhkandash
,bash
tidak berhasil):Seperti yang Anda lihat, saya telah membuat sendiri shell root;
whoami
mengidentifikasi akun saya sebagai root, saya dapat membuat file/etc
, dan saya dapat membaca dari/etc/shadow
. Eksploitasi saya adalah mengatur bit setuid padadash
biner; itu menyebabkan Linux untuk selalu menjalankan biner itu dengan izin dari pemiliknya, dalam hal ini root.Tidak, dengan ceroboh bekerja di sekitar akun root dalam situasi di mana sangat tepat untuk menggunakannya bukan untuk alasan yang baik. Ini hanyalah bentuk lain dari pemrograman pemujaan kargo - Anda tidak benar-benar memahami konsep di balik sudo vs root, Anda hanya secara membuta menerapkan keyakinan "root is bad, sudo is good" karena Anda pernah membacanya di suatu tempat.
Di satu sisi, ada situasi di mana
sudo
pasti merupakan alat yang tepat untuk pekerjaan itu. Misalnya, ketika Anda bekerja secara interaktif pada desktop Linux grafis, katakanlah Ubuntu, maka harus digunakan dengansudo
baik dalam kasus-kasus langka di mana Anda kadang-kadang membutuhkan akses root. Ubuntu sengaja memiliki akun root yang dinonaktifkan dan memaksa Anda untuk menggunakansudo
secara default untuk mencegah pengguna dari selalu menggunakan akun root untuk masuk. Ketika pengguna hanya ingin menggunakan misalnya browser web, kemudian masuk sebagai root akan menjadi hal yang berbahaya , dan karena itu tidak memiliki akun root secara default mencegah orang bodoh melakukan ini.Di sisi lain, ada situasi seperti Anda, di mana skrip otomatis memerlukan izin root untuk sesuatu, misalnya untuk membuat cadangan. Sekarang menggunakan
sudo
untuk bekerja di sekitar akun root tidak hanya tidak ada gunanya, itu juga berbahaya: pada pandangan pertamarsyncuser
tampak seperti akun biasa yang tidak terjangkau. Tapi seperti yang sudah saya jelaskan, akan sangat mudah bagi penyerang untuk mendapatkan akses root penuh jika dia sudah mendapatkanrsyncuser
akses. Jadi pada dasarnya, Anda sekarang memiliki akun root tambahan yang sama sekali tidak terlihat seperti akun root, yang bukan merupakan hal yang baik.sumber
/root/.ssh/authorized_keys
, atau bahkan membuat beberapa akun root dengan rumah yang berbeda sehingga setiap pengguna dapat memiliki shell, rumah, dan.ssh/authorized_keys
:)sshd
umumnya tidak mencatat kunci resmi mana yang digunakan untuk terhubung ke akun, jadi jika Anda terhubung saatbob
itusudo
, Anda mendapatkan jejak audit yang lebih baik daripada jika Anda terhubungroot
langsung denganbob
kunci.Manfaatkan
--rsync-path
opsi untuk membuatrsync
perintah jarak jauh dijalankan dengansudo
hak istimewa. Maka perintah Anda harus berupa:Jika
sudo
diminta kata sandi, Anda harus menghindarinya dengan menggunakanNOPASSWD
hak istimewa dengan akun pengguna jarak jauh (tidak ada gunanya untuk root, mungkin masuk akal dalam kasus penggunaan lain), atau jika Anda tidak ingin melakukan itu:Pastikan bahwa opsi
tty_tickets
ini dinonaktifkan untuk pengguna yang Anda gunakan, dengan menjalankan missudo visudo -f /etc/sudoers.d/local-rsync
dan memasukkan:Pastikan bahwa opsi
requiretty
ini dinonaktifkan untuk pengguna yang Anda gunakan - ini bisa dimatikan secara default. Metodenya sama seperti di atas.Benih
sudo
password pada mesin remote, dengan menjalankan misssh -t [email protected] sudo
sumber
sudo
kata sandi, bukanssh
kata sandisudo /usr/bin/rsync
tanpa meminta frasa sandi; periksaman sudoers
bagaimana melakukan ini; Anda mungkin ingin membuat pengguna cadangan tambahan untuk ini.sudo /usr/bin/rsync
berjalan tanpa memerlukan kata sandi tambahkan yang berikut ke/etc/sudoers
file Anda :rsyncuser ALL= NOPASSWD:/usr/bin/rsync
Ini akan memungkinkan pengguna rsyncuser (seperti yang disebutkan di atas akan lebih baik untuk membuat pengguna cadangan khusus) dengan nama pengguna yang Anda inginkan.rsync
pada dasarnya selalu memiliki izin root; mungkin sangat mudah untuk mendapatkan shell root penuh di akun itu. Saya pikir lebih baik menggunakan akun root yang asli saja.echo "password" | something
saya benar-benar tidak pernah menggunakan ini dan setuju dengan masalah keamanan yang datang dengan membiarkan eksekusi rsync (juga tidak disarankan di sini) tidak baik adalah buruk. Apa yangtty_tickets
sebenarnya saya tidak tahu, tampaknya diperlukan dan masalah keamanan. Ini akan bekerja dengan aman tanpa mengubah apa pun dengan hanya menjalankan sodo di ssh dan kemudian menjalankan perintah, kan? Tetapi karena saya mengajukan pertanyaan itu untuk tujuan penulisan, saya sepenuhnya setuju bahwa ssh berbasis tanpa kunci adalah yang aman dan benar untuk dilakukan. Saya menerima jawaban Martins sebagai gantinya.Salah satu cara sederhana untuk melakukan ini adalah dengan menggunakan
ssh-askpass
program grafissudo
, ini menghilangkan fakta bahwasudo
tidak terhubung ke terminal dan memungkinkan Anda untuk memasukkan kata sandi dengan aman:Tentu saja
ssh-askpass
program harus diinstal di lokasi yang diberikan dan Anda harus menjalankan sesi X pada mesin yang sedang Anda kerjakan. Ada beberapa variasi padassh-askpass
program yang juga berfungsi (versi Gnome / KDE). Jugasudo
program penggantian grafis sepertigksu
ataukdesudo
juga harus bekerja.sumber
rsync --rsh='ssh -X' --rsync-path='gksudo -- rsync' user@host:/ .
tidak bekerjarsync error: syntax or usage error (code 1) at main.c(1634) [server=3.1.1]
. Oh, ubuntu mengirim gnome-ssh-askpass, tapi itu/usr/bin/ssh-askpass
, bukannya/usr/lib/ssh/x11...
. Jadi itu berhasil :)ssh-askpass
. Saya hanya harus mencari arti-chavzPe
, akan bagus untuk menguraikan ini sebagai opsi lama.xeyes
menggunakan SSH.Jika pengguna Anda sudah memiliki hak sudo yang dilindungi dengan kata sandi, saya akan membiarkannya apa adanya dan hanya menambahkan bait untuk menggunakan rsync tanpa kata sandi:
sumber
Saya mengalami masalah ini hari ini dan menyelesaikannya tanpa perlu memodifikasi file konfigurasi atau memberikan izin tingkat root ke akun pengguna. Pengaturan khusus saya adalah bahwa pengguna
A
pada mesinfoo
harus menyalin semua direktori pengguna darifoo
ke mesinbar
dalambackup
direktori yangA
dimiliki pengguna . (PenggunaA
memiliki hak sudo aktiffoo
.)Perintah yang saya gunakan di bawah. Itu dipanggil oleh pengguna
A
di/home
direktori padafoo
.Ini menjalankan rsync sebagai sudo sehingga semua direktori pengguna yang aktif
foo
dapat diakses tetapi ia memberitahu rsync untuk menggunakan ssh untuk mengakses mesinbar
menggunakanA
kredensial pengguna. Kebutuhan saya sedikit berbeda dari pertanyaan di atas tetapi ini memungkinkan saya untuk dengan cepat mendapatkan cadangan dari semua direktori pengguna pada mesin tertentu yang saya kelola tanpa mucking dengan konfigurasi sistem.sumber
-i
opsi untukssh
. Anda dapat menggunakan--rsync-path="sudo /usr/bin/rsync"
jika Anda memiliki sudo pada mesinbar
. Ini kemudian membaca sebagairoot@foo
dan menulis sebagairoot@bar
, tetapi mentransfer melaluiA@foo
->B@bar
. Terima kasih!Menjalankan rsync sebagai daemon pada mesin target memungkinkan Anda melakukan apa yang Anda inginkan.
sumber
Solusi saya adalah menggunakan
--rsync-path="sudo rsync"
tetapi meminta kata sandi, solusi:sumber
$( cat my_password.txt )
yang sedikit lebih baik, tetapi biasanya lebih disukai untuk mengkonfigurasi izin di kedua ujung, dan / atau menggunakan kunci SSH, sedemikian rupa sehingga kata sandi tidak diperlukan pada CLI