Berikan izin pengguna ke semua file dan folder

9

Saya ingin memiliki pengguna yang memiliki akses ke semua file dan folder di sistem. Ini untuk tujuan menggunakan RSYNC pada mesin lokal untuk membuat cadangan mesin jarak jauh.

Saat ini kami menggunakan pengguna backupsdan meskipun kami telah menambahkan pengguna ini ke grup sudodan adminrsync masih mengembalikan pesan seperti:

rsync: opendir "/ location / to / folder" gagal: Izin ditolak (13)

rsync: send_files gagal membuka "/ location / to / file": Izin ditolak (13)

Setiap gagasan tentang bagaimana kami memberikan backupsizin kepada pengguna untuk mengakses segalanya (singkatnya menambahkan pengguna ke semua grup - server jarak jauh yang kami coba cadangkan adalah server hosting khusus di mana setiap akun memiliki pengguna sendiri pada sistem).

Terima kasih atas bantuannya.

Thomas Clayson
sumber
1
Bisakah Anda memberi contoh jalan? Jika ada /proc, /devdll maka kesalahan akan terjadi.
Phil
tambahkan pengguna backupske sudodan adminjangan ubah apa pun.
favadi
@ Phil Saya mencoba mencadangkan seluruh direktori home /. File / direktori yang gagal adalah /home/a/c/account/users/mail:usernameyang memiliki izin seperti drwx------dan dimiliki oleh mail:4096. Saya berasumsi bahwa karena pengguna backupsberada dalam grup sudoatau admintidak memiliki akses karena tidak ada izin akses untuk grup? Saya tidak tahu, tetapi kesalahan pada folder / file seperti itu.
Thomas Clayson
@ favadi saya sudah melakukan itu ... masih belum berfungsi.
Thomas Clayson
Anda harus menjalankan rsyncperintah dengan sudo.
Phil

Jawaban:

6

Hanya menambahkan pengguna backupske grup pengguna sudotidak secara otomatis memberikan akses akun ke semua file di sistem. Ini memberi pengguna izin untuk menjalankan sudoperintah.

Karena Anda menggunakan otentikasi kunci publik (mungkin tanpa frasa sandi), saya akan melakukan pendekatan ini dengan mempertimbangkan keamanan dan kemudahan implementasi. Menggunakan sshmemungkinkan Anda untuk membatasi pengguna untuk hanya menjalankan perintah yang sangat spesifik. Dalam hal ini, Anda dapat mengizinkan pengguna backupsuntuk mengeksekusi rsyncdengan izin pengguna super.

Anda telah melakukan pertukaran kunci dan otentikasi terverifikasi berhasil. Dalam authorized_keysfile di host jarak jauh tempat Anda mendukung /homedirektori, Anda bisa menambahkan command=arahan ke kunci yang digunakan oleh pengguna backups. Direktif ini hanya akan memungkinkan bahwa perintah yang akan dijalankan ketika itu kunci digunakan untuk otentikasi. Jadi bidang pertama kunci akan terlihat mirip dengan ini:

command="/path/to/sudo /path/to/rsync -az /home /local/folder" ssh-rsa AAAAB3NzaC1yblahblahblah

Anda dapat melangkah lebih jauh dan menambahkan lebih banyak opsi ke tombol, seperti from=myhost,no-pty,no-X11-forwarding.

Ini akan memberi Anda keamanan yang layak dan tidak mengharuskan Anda untuk memodifikasi izin sistem file yang mendasarinya. Anda mungkin perlu bermain dengan perintah yang Anda tempatkan di authorized_keysfile sampai berfungsi seperti yang Anda harapkan; mungkin butuh sedikit untuk membungkus otak Anda di sekitarnya. Perintah yang ditentukan pada authorized_keysdasarnya akan menggantikan rsyncopsi yang akan Anda lewati dari host penghubung.

Banyak informasi bagus di man sshd. Anda ingin secara khusus membaca bagian FORMAT AUTHORIZED_KEYS.

George M.
sumber
Ok, saya mengikuti saya pikir. Menambahkan arahan itu ke file Authorized_key akan memungkinkan Anda untuk menjalankan perintah jarak jauh dengan izin pengguna super kan? Bagaimana cara saya mengubah perintah rsync -e ssh -az [email protected]:/home /location/of/local/folderuntuk memerintahkannya berjalan sebagai superuser pada mesin jarak jauh? Atau akankah itu melakukannya secara otomatis? Terima kasih atas waktu dan bantuan Anda. :)
Thomas Clayson
1
Arahan tidak secara otomatis memungkinkan Anda untuk menjalankan perintah sebagai superuser. Ketika kunci spesifik itu digunakan untuk otentikasi, itu membatasi pengguna untuk HANYA perintah yang ditentukan. Izin pengguna super berasal dari "sudo". Secara teknis, Anda bisa meletakkan seluruh perintah "rsync" Anda di file Authorized_key dan hanya memulai koneksi ssh dari host cadangan. Seluruh proses kemudian akan mulai secara otomatis setelah otentikasi selesai. Saya akan memulai koneksi dengan sesuatu seperti "ssh backups @ remotehost sudo rsync"
George M
Memang butuh sedikit untuk menyelimuti otak Anda, tetapi itu cukup keren ketika akhirnya mengklik dan Anda menyadari apa yang dapat Anda lakukan.
George M
2

Salah satu opsi adalah menjalankan server rsync pada sistem jarak jauh.

Pada dasarnya, buat rsync.confdengan uid=rootkemudian gunakan rsync -az rsync://domain.com.

Lihat http://pastebin.com/5hQx1mRV untuk contoh yang ditulis orang lain dan Mengkonfigurasi daemon rsync untuk beberapa dasar mengaktifkan server di Ubuntu.

Perhatikan bahwa Anda harus mempertimbangkan keamanan ini. Pendekatan yang lebih baik mungkin untuk membuat sistem jarak jauh mendorong ke sistem lokal Anda.

Mikel
sumber
Itu terlihat cukup bagus, terima kasih. Apakah itu akan mengembalikan semuanya dari /backup/lcfolder di server jauh? Apakah saya mengubah pathsedikit agar bisa /homeberfungsi?
Thomas Clayson
Terima kasih atas suntingan Bung. Satu-satunya masalah dengan itu adalah bahwa kami tidak dapat menjamin alamat IP statis di mana kami berada, dan kami ingin melakukan ini melalui cron sehingga hanya terjadi setiap saat. Jika kami "menekan" itu bisa berhenti bekerja jika alamat IP kami berubah. : /
Thomas Clayson
@ThomasClayson: Untuk itulah DNS dinamis digunakan. :)
Warren Young
1

Anda mungkin dapat menggunakan ACL jika sistem file yang mendasarinya mendukungnya.

Anda harus menambahkan cadangan grup di ACL dari setiap file dan direktori. Tetapi untuk ditambahkan secara otomatis untuk file dan direktori yang baru dibuat, Anda harus terlebih dahulu mengatur ACL default untuk semua direktori yang ada. Jadi pada server jarak jauh:

sudo find /home -type d -print0 | xargs -0 setfacl -d -m group:backup:r-x

Maka Anda harus memiliki izin rx untuk semua direktori yang ada dan membaca file. Anda dapat melakukan ini dengan 2 perintah (tanpa -d saat ini)

sudo setfacl -R -m group:backup:r-- /home
sudo find /home -type d -print0 | xargs -0 setfacl -m group:backup:r-x

Ini akan memberi Anda izin ekstra untuk membaca file ke cadangan grup tanpa mengubah pengguna dan grup yang ada yang memiliki setiap file.

Catatan: untuk mempercepat pencarian | perintah xargs Anda dapat menambahkan opsi berikut ke perintah xargs: -P ndengan n jumlah proses paralel. Anda dapat mengaturnya ke jumlah cpu yang Anda miliki di mesin Anda + 1.

Huygens
sumber
Xargal paralel tidak akan mempercepat dalam hal ini, karena hambatannya adalah I / O, bukan CPU.
Mikel
Linux menggunakan cache di memori sebelum melakukan perubahan ke disk, sehingga terasa lebih cepat dari sudut pandang pengguna. Dan bahkan sebuah notebook hdd kecil dapat menangani beban pengaturan beberapa ACL secara paralel. Ini tidak terlalu banyak I / O. Cobalah :)
Huygens
Saya baru saja membaca di sini superuser.com/a/422954/53206 yang bisa Anda gunakan: sudo setfacl -Rm d:group:backup:r-X,group:backup:r-X /home:) jauh lebih sederhana!
Huygens