Dalam keadaan apa akan chmod
gagal?
Saya melihat halaman manual tetapi hanya menentukan penggunaan dan tidak masuk ke detail tentang keadaan apa itu tidak akan berhasil.
Saya akan berasumsi chmod
akan bekerja jika:
- kamu root
- Anda memiliki file target (dan sedang mengatur bit mode biasa yaitu bit tidak lengket, yang lain)
Dapatkah pengguna menggunakan chmod
untuk mengubah izin pada file yang mereka punya akses grup? Apakah ini terkait dengan akses baca / tulis?
Jawaban:
Hanya pemilik file, atau pengguna root, yang dapat mengubah izin file. Izin saat ini pada file atau pada direktori induknya tidak relevan¹. Ini ditentukan dalam POSIX :
Pada sebagian besar unices, "hak yang sesuai" berarti berjalan sebagai root. Jika kondisi ini tidak terpenuhi,
chmod
biasanya gagal denganEPERM
, meskipun perilaku lain seperti membatalkan program karena pelanggaran keamanan diizinkan.Selain itu, beberapa varian unix memiliki cara otorisasi atau melarang sistem khusus
chmod
. Misalnya, Linux memiliki kemampuan (CAP_FOWNER
) yang memungkinkan proses untuk mengubah izin file dan metadata lainnya terlepas dari pemiliknya.Ada alasan lain yang
chmod
mungkin gagal meskipun file itu ada, dapat diakses dan memiliki pemilik yang sesuai. Yang umum termasuk sistem file read-only atau sistem file yang tidak mendukung izin seperti FAT. Yang kurang umum termasuk pembatasan spesifik sistem seperti atribut yang tidak dapat diubah pada sistem file Linux dan penerusnya.¹ Kecuali sejauh proses yang sedang berjalan
chmod
harus dapat mengakses file, sehingga harus memiliki izin eksekusi pada direktori yang berisi file dan direktori lain yang dilaluinya untuk melakukannya.sumber
Rincian yang Anda inginkan ada di halaman manual untuk pemanggilan sistem chmod (). Alih-alih
man chmod
digunakanman 2 chmod
.man chattr
danman 2 setxattr
akan menarik minat Anda juga; atribut file yang diatur oleh chattr / setxattr () menambah perilaku izin Unix tradisional yang ditetapkan oleh chmod.sumber
Menurut standar UNIX, "ID pengguna yang efektif dari proses harus cocok dengan pemilik file atau proses tersebut harus memiliki hak yang sesuai untuk melakukan ini."
Sedikit tentang hak yang sesuai perlu penjelasan. Pada sistem tradisional, chmod diperbolehkan pada semua file ketika UID efektif (di Linux sistem file UID, tetapi lihat di bawah) dari proses adalah 0 [yaitu root].
Linux memiliki kemampuan yang disebut sistem , dan
CAP_FOWNER
bit mengontrol kemampuan untuk digunakanchmod
pada semua file. Secara default, semua kemampuan diberikan ketikaexecve()
panggilan membuat proses root (baik dengan menjalankan setuid binary atau ketika UID sebenarnya adalah 0) atau ketika UID efektif diatur ke 0 (dan dihapus ketika diatur ke nilai bukan nol) , dan seperangkat kemampuan termasukCAP_FOWNER
diaktifkan ketika UID sistem file diatur ke 0 (dan dinonaktifkan ketika diatur ke nilai bukan nol). Baca halaman manual untuk lebih jelasnya.Anda menyebutkan bit sticky, tetapi mengabaikan fakta bahwa pengguna juga mungkin tidak mengatur bit setgid pada file ketika mereka tidak berada dalam grup yang ditugaskan untuk file tersebut. Setuid atau bit setgid juga dapat diabaikan dalam kondisi tambahan yang ditentukan implementasi.
sumber
Mengapa Anda tidak mencoba dan melihat saja?
sumber
chmod
, dan kemudian memeriksa izin di atasnya. Jika Anda merasa paranoid, lakukanfsync
sebelum memeriksanya.