Pada sistem Linux, Anda dapat berhasil chmod u+s $some_directory
, tetapi alih-alih memaksakan kepemilikan subdirektori dan file baru untuk menjadi pemilik direktori yang berisi (dan mengatur subdirektori u+s
juga) seperti yang Anda harapkan, sistem hanya mengabaikan bit setuid. Subdirektori dan file terus mewarisi UID dari proses pembuatannya, dan subdirektori tidak diatur secara default.
Mengapa setuid diabaikan pada direktori, dan bagaimana saya bisa membuat sistem mengenalinya?
linux
file-permissions
Blacklight Shining
sumber
sumber
nosuid
— walaupun ada satu lagi (ramdisk,/dev/shm
) yang saya / mountnosuid
, dan tampaknya memperlakukansetuid
bit dengan cara yang persis sama. 6_9Jawaban:
Ingatlah bahwa bit setuid dan setgid diciptakan untuk tujuan yang sama sekali berbeda: menyebabkan executable dijalankan dengan uid atau gid pemiliknya, daripada uid atau gid dari pengguna yang menjalankan file. Penggunaan lainnya hanyalah fitur tambahan.
Bit-bit ini tidak memiliki fungsi pada file biasa yang tidak dapat dieksekusi. (Dan juga shell script pada beberapa distro, karena masalah keamanan.) Awalnya, mereka juga tidak memiliki fungsi untuk direktori. Jelas seseorang memutuskan akan keren untuk mengambil setgid yang tidak digunakan pada direktori dan menggunakannya untuk menegakkan konsistensi kepemilikan grup. Lagi pula, jika Anda bermain dengan kepemilikan grup, itu karena lebih dari satu orang bekerja dengan file tersebut, dan mungkin masuk akal untuk semua file dalam direktori yang diberikan milik grup yang sama, tidak peduli siapa yang membuatnya. Kesulitan karena seseorang yang lupa menjalankan newgrp dihilangkan.
Jadi, mengapa tidak menerapkan fitur yang sama untuk setuid dan file uid? Nah, uid jauh lebih mendasar daripada gid. Jika Anda menerapkan ini, seringkali file tidak akan menjadi milik pengguna yang membuatnya! Agaknya pengguna masih dapat memodifikasi file (dengan asumsi umask adalah sesuatu yang waras), tetapi mereka tidak dapat mengubah bit izin. Sulit melihat kegunaannya.
sumber
Saya percaya bahwa jawaban untuk pertanyaan ini dikenakan pada masalah keamanan "file giveaway" yang telah mengakibatkan sebagian besar OS seperti Unix modern tidak mengizinkan "file giveaway". "File giveaway" adalah ketika pengguna non-superuser mengubah kepemilikan file kepada orang lain selain pengguna itu. Kemampuan ini memberikan banyak peluang untuk kerusakan.
Karena hadiah file tidak diizinkan, setuid pada direktori, yang akan melakukan fungsi yang sama dalam bentuk lain, tidak diizinkan, atau diabaikan jika diatur.
Untuk mengubah perilaku, Anda harus memodifikasi pustaka dan utilitas OS.
sumber
Satu kasus penggunaan yang sangat baik untuk mengimplementasikannya adalah ini:
Katakanlah Anda memiliki server multi-situs dengan 3 situs aman. Anda memiliki 3 grup yang dibuat, satu untuk masing-masing pengelola situs yang berbeda. Semua file di semua situs harus dimiliki oleh pengguna apache agar apache dapat membaca dan menulis kepada mereka (drupal / wordpress, dll).
Jika setuid tetapi berfungsi seperti bit setgid untuk izin direktori akan terlihat seperti ini:
Dengan cara ini setiap kelompok pengelola memiliki akses untuk melihat dan menyentuh hanya konten mereka tetapi apache pengguna server web dapat menyajikan semua konten dan tidak perlu bagi pengguna untuk khawatir tentang mengubah kepemilikan file yang diunggah.
Kasus penggunaan lain adalah untuk unggahan ftp / http Anonim atau bahkan sftp / ssh. Grup dan GID pada direktori unggahan akan menjadi root dan begitu pula pemilik dan UID. Izin lainnya adalah
-wx
. Ini akan memungkinkan setiap orang MENULIS akses ke direktori unggahan tetapi mereka tidak dapat membaca apa pun setelah diunggah dan root akan memiliki semua file yang baru dibuat.Jadi ada dua kasus penggunaan yang sangat baik dan valid untuk mengaktifkan fungsi UID pada direktori agar sesuai dengan bit GID.
Steven Mercurio
sumber
<nonexistent feature X>
?"). Namun, itu berkaitan dengan pertanyaan saya, dan saya, sebagai penanya, merasa berguna.Agak terlambat ke pesta, tetapi jika pembaca di masa depan menemukan ini;) Seperti yang dinyatakan oleh orang lain, pada sistem file OS-X standar setUID untuk direktori diabaikan - dan sepertinya tidak ada cara yang mudah untuk mengatasi hal ini (
mount -o
.... atau apa tidak). Seperti yang sering terjadi, halaman manual sebenarnya tidak mematuhi perilaku OS-X yang secara harfiah dinyatakan:tetapi juga mencantumkan kemungkinan untuk mencapai efek yang sama tanpa melepaskan kepemilikan aslinya. Linux menggunakan '[g /] setfacls' untuk efek yang sama (mereka izin tidak benar-benar terlihat pada pandangan pertama, sehingga kadang-kadang bisa menjadi gangguan).
Mengenai 'bagaimana saya bisa mencapai efek serupa', baca seluruh halaman manual dan bermain-main dengan:
Anda dapat memeriksa melalui
jika semuanya terlihat baik-baik saja. Opsi lebih lanjut termasuk memasukkan aturan di posisi tertentu, menghapus atau mengganti aturan tertentu. Dua opsi penting di sini adalah "
file_inherit
dandirectory_inherit
" memungkinkan aturan untuk dilampirkan ke direktori / file baru.Saya tidak terlalu suka menggunakan setUID, tetapi setGID sangat berguna pada server file di mana pengaturan grup 'utama' tidak berfungsi atau klien memiliki file yang tidak diizinkan menulis grup. Itu akan diselesaikan dengan:
sumber
chown
sebenarnya cukup penting! “[…] Jika sistem file yang mendasarinya mendukung fitur ini: lihat chmod (2) dan opsi suiddir untuk me-mount (8).” Sebenarnya saya belum pernah memperhatikannya sebelumnya. Jika HFS mengimplementasikansuiddir
, Anda sebenarnya dapat mewujudkannya pada sistem OS X yang umum.Yah, itu harus menghormati standar. Saya dapat berpikir pada beberapa skenario dengan sftp-hanya bahwa itu akan menyelamatkan saya banyak masalah, baik dengan acl dan acl-mask-set yang sshd lakukan, dan reset yang harus saya lakukan untuk topeng itu.
Keamanan secara default cukup berguna, tetapi jika Anda tidak menjadikannya pilihan, Anda hanya membuat winghtmare.
https://www.gnu.org/software/coreutils/manual/html_node/Directory-Setuid-and-Setgid.html
Either way, itu seperti Linux berjalan sekarang, jadi gunakan saja ACL untuk mengatasi itu.
sumber
Menurut http://en.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_directories bit setuid diabaikan untuk direktori pada sistem UNIX dan Linux. Namun dimungkinkan untuk bertindak seperti yang Anda harapkan di FreeBSD.
sumber
setuid
diabaikan untuk direktori dan apakah mungkin membuatnya dikenali di Linux.linux
, ya, tetapi itu tidak berarti saya akan lebih memilih yang samar-samar "Ini dilakukan dengan cara ini karena sistem lain melakukannya dengan cara ini" menjawab sebuah jawaban yang menjelaskan mengapa hal itu dilakukan pada sistem lain. (Mungkinlinux
tag harus dihapus begitu saja?)