Kami memiliki lingkungan beberapa ribu pengguna yang menjalankan aplikasi pada sekitar 40 cluster mulai dari 20 node komputasi hingga 98.000 node komputasi. Pengguna pada sistem ini menghasilkan file besar (kadang-kadang> 1PB) yang dikendalikan oleh izin unix tradisional (ACL biasanya tidak tersedia atau praktis karena sifat khusus dari sistem file).
Saat ini kami memiliki program yang disebut "beri", yang merupakan program suid-root yang memungkinkan pengguna untuk "memberikan" file ke pengguna lain ketika izin grup tidak mencukupi. Jadi, pengguna akan mengetik sesuatu seperti berikut ini untuk memberikan file ke pengguna lain:
> give username-to-give-to filename-to-give ...
Pengguna penerima kemudian dapat menggunakan perintah yang disebut "take" (bagian dari program give) untuk menerima file:
> take filename-to-receive
Izin file kemudian secara efektif ditransfer ke pengguna penerima.
Program ini telah ada selama bertahun-tahun dan kami ingin meninjau kembali hal-hal dari sudut pandang keamanan dan fungsional.
Rencana tindakan kami saat ini adalah menghapus bit busuk dalam implementasi "pemberian" kami saat ini dan mengemasnya sebagai aplikasi open source sebelum kami memindahkannya ke dalam produksi.
Adakah yang punya metode lain yang mereka gunakan untuk mentransfer file yang sangat besar antar pengguna ketika hanya izin unix tradisional yang tersedia?
sumber
chown
harus melakukannya .. Sepertinya Anda juga ingin menyalin file, setelah kedua belah pihak yang terlibat setuju.Jawaban:
Jika emitor benar-benar mau memberikan file itu, Anda dapat menggunakan biner SUID yang memindahkan file ke direktori yang dapat ditulisi oleh semua dan memiliki bit yang lengket (seperti
/tmp
), kemudian mengubah kepemilikan ke pemilik baru.chown(3)
sudah mengurus menghapusset-user-ID
danset-group-ID
bit untuk Anda. Dengan cara ini pemilik baru dapat melakukan apa yang diinginkannya dengan file tersebut, termasuk memindahkannya.Direktori ini dapat ditulisi oleh semua orang dapat menjadi direktori home pengguna, jika Anda ingin menggunakan beberapa filesystem untuk direktori home dan ingin memastikan Anda tidak melewati batas filesystem karena kinerjanya akan langsung mengerikan. Dalam hal ini, Anda mungkin ingin memastikan penerima tahu kapan file baru ditawarkan.
Email akan melakukan trik. Solusi Unixy yang lebih banyak adalah
/etc/profile
yang mencantumkan file yang baru Anda kirim. Bonus tambahan jika Anda menawarkan fitur ini denganpam_echo
( misalnya denganfile=/tmp/deliveries/%u
, lihatpam_echo(8)
). Seperti halnya PAM apa pun yang terkait, Anda ingin memeriksa bahwa semua implementasi Anda menawarkan modul semacam itu terlebih dahulu.sumber
Anda dapat menggunakan sistem dengan direktori bersama, (mungkin tanpa mengeksekusi perms.), Di mana hal-hal untuk pengguna tertentu diarsipkan dengan struktur nama file tertentu (
to-$username_from-$username.tar
, misalnya). Berikan membuat file danchowns
itu kepada pengguna target; ambil ekstrak file dan hapus.Jika Anda ingin melakukannya sebagai gerakan yang benar-benar (IE, mengubah lokasi file dan izin; tidak ada penyalinan karena ukuran file raksasa), Anda mungkin bisa lolos dengan pindah ke direktori bersama dengan -x perms (sehingga tidak ada yang bisa daftar file di sana), dan
chown
metode yang sama .mv
,chown
/mv
.sumber
Seperti yang dikatakan xryl669, Anda dapat menggunakan direktori untuk benar-benar berbagi file. Seharusnya terlihat seperti ini:
Perintah memberi menjadi
Perintah take terlihat seperti ini:
sumber
Saya sarankan untuk menulis ulang aplikasi untuk meniru "memberi" dan "menerima", tetapi "mendorong" dan "menariknya" dari direktori yang dilindungi. Direktori Anda hanya dapat diakses untuk aplikasi push / pull - yang menangani pemindahan file. Atau, aplikasi / skrip Anda dapat membuat direktori sementara yang acak dengan izin yang ditetapkan hanya untuk pengirim dan penerima.
Ingin memiliki keamanan lebih? Anda dapat PGP mengenkripsi / menandatangani file (menggunakan kunci publik penerima).
Dalam hal mengulanginya dari "sudut pandang keamanan dan fungsional", saya sangat menyarankan untuk tidak membuat program SUID. Jika Anda tidak menjatuhkan hak istimewa dengan cara yang benar, Anda dapat mengakses file apa saja di sistem. Jika program Anda bermasalah (buffer overflow, dll ...) - Anda dapat mengeksploitasi ini untuk mendapatkan akses root pada sistem Anda.
sumber
Ini mungkin tidak berguna bagi Anda tetapi untuk referensi cp --reflink target sumber melakukan salinan tipis file menggunakan copy-on-write.
Ini berarti Anda dapat menyalin file itu langsung dan hanya blok yang diubah yang benar-benar akan disalin. Tidak seperti tautan keras, file baru memiliki inode dan metadata sendiri yang berarti Anda kemudian dapat memberikan salinan file ke pengguna baru menggunakan hal-hal chown standar.
Sejauh yang saya tahu ini adalah fitur yang hanya tersedia di OCFS2 dan btrf saat ini. Saya kira itu tidak memecahkan masalah Anda tetapi melihat ketersediaan itu tidak luas itu mungkin tidak akan berguna.
sumber