Izinkan pengguna membaca direktori home beberapa pengguna lain

10

Saya baru mengenal administrasi sistem dan saya memiliki izin terkait permintaan. Saya memiliki grup yang dipanggil administration. Di dalam administrationkelompok, saya memiliki pengguna user1, user2, user3, superuser. Semua pengguna berada di administrationgrup. Sekarang, saya perlu memberikan izin kepada pengguna superuseruntuk dapat melihat /homedirektori pengguna lain. Namun, saya tidak ingin user1, user2, user3untuk melihat rumah pengguna lain selain dirinya sendiri. (Artinya, user1harus bisa melihat user1rumah saja dan sebagainya).

Saya telah membuat pengguna dan grup dan menugaskan semua pengguna ke grup. Bagaimana cara menentukan izin untuk superusersaat ini?

Dengan kata lain, saya berpikir untuk memiliki dua kelompok (katakan NormalUsersdan Superuser). The NormalUserskelompok akan memiliki pengguna user1, user2dan user3. The Superuserkelompok hanya akan memiliki pengguna Superuser. Sekarang, saya perlu Superusermemiliki akses penuh pada file pengguna dalam grup NormalUsers. Apakah ini mungkin di Linux?

Ramesh
sumber
Apa bedanya dengan pertanyaan Anda sebelumnya ?
Gilles 'SO- stop being evil'
Dalam pertanyaan saya sebelumnya, saya lebih peduli dengan mengedit file / etc / sudoers dan menjadikan pengguna sebagai administrator parsial. Di sini, saya mencoba mengubah izin pengguna lokal. Ya, ini mirip dengan apa yang saya coba capai, tetapi saya mencoba untuk mendekati metode yang berbeda di sini.
Ramesh

Jawaban:

10

Jika pengguna kooperatif, Anda dapat menggunakan daftar kontrol akses (ACL). Tetapkan ACL pada direktori home dari user1(dan teman-teman) yang memberikan akses baca superuser. Atur juga ACL default, untuk file yang baru dibuat, dan juga ACL pada file yang ada.

setfacl -R -m user:superuser:rx ~user1
setfacl -d -R -m user:superuser:rx ~user1

user1 dapat mengubah ACL pada file-nya jika dia mau.

Jika Anda ingin selalu memberikan superuserakses baca ke user1file, Anda dapat membuat tampilan lain dari direktori home pengguna dengan izin yang berbeda, dengan bindf .

mkdir -p ~superuser/spyglass/user1
chown superuser ~superuser/spyglass
chmod 700 ~superuser/spyglass
bindfs -p a+rX-w ~user1 ~superuser/spyglass/user1

File diakses melalui ~ superuser / spyglass / user1 dapat dibaca dunia. Selain izin, ~superuser/spyglass/user1adalah tampilan user1direktori home. Karena superusersatu-satunya pengguna yang dapat mengakses ~superuser/spyglass, hanya superuserdapat memperoleh manfaat dari ini.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Pada sistem saya, hak akses dan username adalah bertukar: setfacl -R -m user:superuser:rx ~user1.
Aurélien Ooms
10

Anda dapat menggunakan ACL untuk memberikan akses ke direktori tertentu ke grup sewenang-wenang.

Misalnya, jika Anda berlari setfacl -m g:dba:rwx /home/foo, maka anggota grup dba akan memiliki izin rwx di atasnya, terlepas dari grup mana yang memiliki direktori.

Anda mungkin juga ingin mengatur ACL "default" (ACL untuk objek yang baru dibuat di dalam direktori) untuk juga menyertakan izin ini.

derobert
sumber
ya, persis..Aku juga menemukan hal yang sama tetapi masih tidak yakin apakah itu ide yang baik untuk memberikan ACL di server untuk pengguna LDAP.
Ramesh
@ Ramesh Yah, jika mereka pengguna di sistem (karena Anda menggunakan nss-ldap, sssd, dll.), Maka saya tidak yakin mengapa itu tidak akan apa-apa.
derobert
Saya mencoba untuk mereplikasi ini di test bed. Saat masuk sebagai pengguna (misalnya foo), saya melihat pesan peringatan sebagai "izin harus disetel ke 644". Saya yakin peringatan itu bisa diabaikan. Tapi, saya tidak ingin pengguna lab tahu bahwa akun pengguna mereka telah disusupi. Ketika saya mengubah rwx menjadi hanya r dalam perintah setfacl, saya tidak dapat melihat direktori foo.
Ramesh
2
@ Ramesh Anda perlu + x untuk benar-benar menelusuri direktori. Saya tidak yakin apa yang memberitahu Anda bahwa direktori harus 644, itu konyol, harus 755 atau serupa. Namun demikian, pengguna akan melihat + di bidang izin ls, dan dapat menjalankan getfacl untuk melihatnya — itu bukan rahasia.
derobert
Baiklah, saya mendapatkan pesan peringatan, Direktori $ HOME milik pengguna harus dimiliki oleh pengguna dan tidak dapat ditulis oleh pengguna lain. Saya menghapus izin menulis di perintah setacl dan sekarang saya tidak melihat pesan peringatan.
Ramesh
0

Sayangnya, sebenarnya tidak ada cara untuk melakukan ini secara langsung di vanilla Linux.

Anda mungkin dapat membuat grup baru dalam sudoers untuk admin-parsial dengan daftar putih perintah yang dapat diterima yang Anda ingin mereka jalankan.

Namun, untuk mencapai apa yang Anda minta, Anda harus menggunakan Apparmor atau SELinux untuk mencapai apa yang Anda inginkan. Sayangnya, tak satu pun dari alat ini mudah diatur dan digunakan, dan contohnya jauh di luar ruang lingkup jawaban cepat di sini.

Orang Swiss
sumber
1
Linux telah mendukung ACL untuk sementara waktu sekarang. ACL memungkinkan Anda melakukan ini.
derobert
Ya, saya baru saja menemukan solusi itu dan memperbarui jawabannya. Namun, saya masih tidak tahu apakah itu dapat digunakan di server dan itu juga untuk pengguna LDAP.
Ramesh
@derobert Dari apa yang saya mengerti, tidak mungkin untuk memberikan izin tingkat root seseorang melalui sudo sementara secara bersamaan menggunakan ACL untuk membatasi akses. Anda harus menggunakan SELinux atau MAC lain untuk mencapainya.
Swiss
1
Saya pikir ketika OP mengatakan pengguna "superuser", maksudnya secara harfiah - bukan root.
derobert