Saya memiliki direktori yang berisi data yang dibagikan di antara sejumlah pengguna. Akses ke direktori ini dan apa pun di bawahnya, akan dikontrol oleh grup direktori, yang akan ditambahkan ke pengguna yang bersangkutan. Karena itu saya membuat folder chmod g+s
set "grup lengket" . Direktori akan berisi struktur pohon dengan direktori dan file, dengan jumlah total file kemungkinan beberapa juta. File akan cukup kecil, saya tidak mengantisipasi apa pun yang lebih besar dari 50MB.
Masalah saya adalah bahwa pemilik file atau direktori masih merupakan pengguna yang membuatnya. Karena itu, bahkan jika saya harus menghapus pengguna itu dari grup akses, saya tidak akan menghapus aksesnya sepenuhnya.
Begitu:
Apakah ada opsi lain yang saya lewatkan untuk memastikan bahwa semua file dan sub-direktori memiliki pemilik yang sama?
Saya berharap saya bisa menjelajahi seluruh direktori secara berkala dengan cron-job, tetapi menurut saya tidak efisien untuk apa yang pada dasarnya adalah perintah sekali-pr-file.
Saya menemukan contoh menggunakan INotify tetapi menurut saya pemeliharaan tinggi, karena itu membutuhkan skrip.
Saya belum bisa mengetahui apakah ACL dapat membantu saya dengan kepemilikan paksa.
Apakah ada cara yang lebih cerdas untuk melakukan ini?
Yang saya inginkan adalah memiliki direktori yang dapat dibagikan dengan menambahkan grup ke pengguna. Apa pun yang dibuat dalam direktori ini mewarisi skema izin dari induknya. Jika ada cara yang lebih baik daripada apa yang saya coba, saya semua telinga.
sumber
chown -hR owner:group
?Jawaban:
Menetapkan pemilik default "secara otomatis" akan memerlukan direktori
setuid
berperilaku sepertisetgid
. Namun, sementara ini dapat dikonfigurasi pada FreeBSD, sistem UNIX & Linux lainnya mengabaikannyau+s
. Namun dalam kasus Anda, mungkin ada solusi lain.Jadi, pada dasarnya, dari apa yang saya lihat, Anda ingin mengontrol akses ke direktori menggunakan mekanisme grup. Namun, ini tidak mengharuskan Anda untuk membatasi izin di seluruh struktur direktori. Sebenarnya,
--x
bit eksekusi direktori bisa menjadi apa yang Anda butuhkan. Biarkan saya memberi Anda sebuah contoh. Berasumsi bahwa...group_dir
direktori adalahourgroup
.ourgroup
grup yang dapat mengaksesgroup_dir
.user1
danuser2
milikourgroup
.... pertimbangkan pengaturan berikut:
Di sini, mari kita asumsikan setiap item diciptakan oleh pemiliknya.
Sekarang, dalam pengaturan ini:
ourgroup
. Siapa pun dari grup dapat membuat, memindahkan, menghapus file di mana saja di dalamgroup_dir
(tetapi tidak lebih dalam).ourgroup
akan diblokirgroup_dir
, dan karenanya tidak dapat memanipulasi apa pun di bawahnya. Misalnya,user3
(yang bukan anggotaourgroup
), tidak dapat membacagroup_dir/user2_submission/README
(meskipun ia memilikir--
izin pada file itu sendiri).Namun, ada sedikit masalah dalam kasus ini: karena umask yang khas, item yang dibuat oleh pengguna tidak dapat dimanipulasi oleh anggota grup lainnya. Di sinilah ACL masuk. Dengan mengatur izin default, Anda akan memastikan semuanya baik-baik saja meskipun nilai umask:
Panggilan ini menetapkan:
rw(x)
Izin default untuk pemilik.rw(x)
Izin default untuk grup.group_dir
, tidak masalah apa pun izin mereka di bawahnya.Sekarang, jika saya membuat item sebagai
user2
:Dengan ACL ini, kami dapat mencoba membangun kembali struktur kami sebelumnya:
Di sini lagi, setiap item dibuat oleh pemiliknya.
Selain itu, jika Anda ingin memberikan sedikit lebih banyak kekuatan / keamanan kepada mereka yang menggunakan direktori, Anda mungkin ingin mempertimbangkan sedikit lengket. Misalnya, ini akan mencegah
user1
penghapusanuser2_submission
(karena ia memiliki-w-
izingroup_dir
):Sekarang, jika
user1
mencoba untuk menghapususer2
direktori, dia akan mendapatkan yang indahOperation not permitted
. Perhatikan bahwa sementara ini mencegah modifikasi struktur direktorigroup_dir
, file dan direktori di bawahnya masih dapat diakses:Satu hal yang perlu dipertimbangkan adalah bahwa ACL yang kami gunakan mengatur izin default . Oleh karena itu, pemilik barang dapat mengubah izin yang terkait dengannya. Misalnya,
user2
dapat berjalan dengan sempurna ...... karenanya menjadikan direktori pengiriman lengkapnya tidak tersedia bagi siapa pun dalam grup.
Namun, karena Anda semula bersedia memberikan
rws
akses penuh kepada siapa pun di grup, saya berasumsi Anda mempercayai pengguna ini, dan bahwa Anda tidak akan mengharapkan terlalu banyak operasi jahat dari mereka.sumber
group_dir
sejak awal, tidak peduli apakah ia memiliki file atau tidak. Satu-satunya "hak istimewa" pemilik adalah bahwa ia dapat mengubah izin ciptaannya (yang saya jelaskan sedikit lebih dalam jawaban saya).group_dir
direktori dimiliki olehroot:ourgroup
dengan-rwxr-x---
, yang berarti bahwa hanya akar dan anggotaourgroup
Mei mengaksesnya, yaitu melakukan apa saja dengan file di bawahnya. Jika Anda tidak memiliki--x
izin pada direktori, Anda tidak dapat mengakses file di dalamnya, bahkan jika Anda memiliki izin file itu sendiri.Ada cara yang lebih cerdas untuk melakukan ini. Ini menggunakan kombinasi set-gid dan ACL default . Jelas, Anda akan membutuhkan sistem file yang diaktifkan acl. Mari kita asumsikan direktori tempat Anda ingin berbagi berada
/var/grpdir
dan bahwa anggota grupsharing
harus dapat mengaksesnya.ACL default diwarisi oleh subdirektori yang dibuat dalam direktori dengan ACL default. Jadi ini berarti, file apa pun yang dibuat di
/var/grpdir
akan memiliki grup itu diatursharing
oleh bit setgid direktori. Selain itu, ia akan mewarisi ACL default, yang akan menggantikan premis gaya default linux, karena kami tidak menentukan ACL dengan pengguna atau grup tertentu. Ini berarti semua file akan dibuat dengan kepemilikan<user>:sharing
dan izinrw-rw----
. Direktori akan sama, kecuali mereka juga akan memiliki ACL default sendiri yang disetel sama dengan induknya (/var/grpdir
), dan tentu saja bit-bit yang dapat dieksekusi ditetapkan untuk pengguna dan grup. Jika Anda menghapus pengguna darisharing
grup, mereka tidak akan dapat mengakses direktori (atau file apa pun di dalamnya, bahkan jika mereka memilikinya).Tidak seperti mengoreksi izin secara berkala dengan cronjob, izin selalu disinkronkan, karena diperbarui secara atomis dengan file dan direktori yang baru dibuat. Solusi ini ringan; tidak ada daemon yang diperlukan, dan tidak ada lonjakan untuk IO sementara mengoreksi izin dalam satu gerakan.
sumber
Saya tidak mengetahui cara yang baik untuk melakukan ini. Cara yang secara teknis paling bersih adalah sistem file FUSE yang melakukan itu. Tentu saja, banyak pekerjaan jika belum ada yang melakukan itu.
Alternatif:
Gunakan samba. samba memiliki
force user
parameter. Anda dapat mengekspor direktori secara lokal dan memasangnya secara lokal. Tidak membuat akses lebih cepat tetapi dapat diterima karena hanya jaringan loop kembali yang terlibat.Gunakan sistem file non-Linux seperti FAT32. Ini harus dikonfigurasi untuk pengguna tertentu untuk memasangnya. Izin akses harus ditangani oleh direktori induk.
sumber
Saya belum pernah mendengar cara untuk mengubah kepemilikan file secara otomatis sehingga pemilik file berubah ketika file dipindahkan ke direktori tertentu. Yang paling dekat adalah bagian yang lengket, tetapi tampaknya Anda telah mengindikasikan bahwa kepemilikan grup tidak cukup, kepemilikan pengguna yang sebenarnya harus diubah.
Dalam hal ini, saya pikir taruhan terbaik Anda adalah pekerjaan cron dengan chown -R flag, seperti yang disebutkan Pandya. Letakkan di cron untuk menjalankan setiap menit atau setiap lima menit.
Jika Anda dapat menjelaskan bagaimana pengguna Anda menggunakan ini, mungkin ada beberapa solusi yang lebih baik.
ACL dapat membantu Anda mendapatkan kontrol butir yang lebih baik tentang siapa yang diizinkan melakukan apa, itu tidak akan secara otomatis mengubah kepemilikan file aktual untuk Anda. Saya pikir Anda perlu mendapatkan pandangan yang lebih tinggi dan mengevaluasi / mendesain ulang solusi Anda atas dasar itu.
sumber
Anda dapat menggunakan inotify-tools dan menulis script bash sederhana seperti di bawah ini. Inotify akan mengawasi web direktori dan melakukan sesuatu kapan saja seperti pembuatan direktori akan terjadi di dalam direktori web. Ada banyak acara yang ada. Anda dapat google atau mungkin telah melihat di situs ini
sumber