GNU/Linux >> Belajar Linux >  >> Linux

Mengapa setuid diabaikan pada direktori?

Ingatlah bahwa bit setuid dan setgid diciptakan untuk tujuan yang sama sekali berbeda:menyebabkan sebuah executable berjalan dengan uid atau gid pemiliknya, bukan uid atau gid dari pengguna yang menjalankan file. Penggunaan lainnya hanyalah fitur tambahan.

Bit ini tidak memiliki fungsi pada file biasa yang tidak dapat dieksekusi. (Dan juga skrip shell di beberapa distro, karena masalah keamanan.) Awalnya, mereka juga tidak memiliki fungsi untuk direktori. Jelas seseorang memutuskan akan keren untuk mengambil setgid yang tidak terpakai 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 jika semua file dalam direktori tertentu menjadi milik grup yang sama, tidak peduli siapa yang membuatnya. Kerumitan karena seseorang lupa menjalankan newgrp dihilangkan.

Jadi, mengapa tidak mengimplementasikan fitur yang sama untuk setuid dan file uid? Yah, uid jauh lebih mendasar daripada gid. Jika Anda menerapkan ini, sering kali file bukan 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 untuk melihat kegunaannya.


Saya percaya bahwa jawaban atas pertanyaan ini ada pada masalah keamanan "pemberian file" yang mengakibatkan sebagian besar OS mirip Unix modern tidak mengizinkan "pemberian file". "Pemberian file" adalah saat pengguna non-pengguna super mengubah kepemilikan file menjadi orang lain selain pengguna tersebut. Kemampuan ini memberikan banyak peluang untuk kenakalan.

Karena hadiah file tidak diizinkan, setuid pada direktori, yang akan menjalankan fungsi yang sama dalam bentuk lain, tidak diizinkan, atau diabaikan jika disetel.

Untuk mengubah perilaku, Anda harus memodifikasi pustaka dan utilitas OS.


Satu kasus penggunaan yang sangat bagus untuk mengimplementasikannya adalah ini:

Katakanlah Anda memiliki server multi-situs dengan 3 situs aman. Anda telah membuat 3 grup, satu untuk masing-masing pengelola situs yang berbeda. Semua file di semua situs harus dimiliki oleh pengguna apache sehingga apache dapat membaca dan menulis ke mereka (drupal/wordpress, dll).

Jika setuid tetapi berfungsi seperti bit setgid untuk izin direktori akan terlihat seperti ini:

/var/www/sitea - apache:groupa  rwS rwS ---
/var/www/siteb - apache:groupb  rwS rwS ---
/var/www/sitec - apache:groupc  rwS rwS ---

Dengan cara ini setiap grup pengelola memiliki akses untuk melihat dan menyentuh hanya konten mereka tetapi pengguna server web apache dapat melayani semua konten dan pengguna tidak perlu khawatir tentang mengubah kepemilikan file yang diunggah.

Kasus penggunaan lainnya adalah untuk pengunggahan ftp/http Anonim atau bahkan sftp/ssh. Grup dan GID pada direktori unggahan akan menjadi root dan demikian pula pemilik dan UID. Izin lainnya adalah -wx . Ini akan memungkinkan semua 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 bagus dan valid untuk mengaktifkan fungsionalitas UID pada direktori agar cocok dengan bit GID.

Steven Mercurio


Linux
  1. izin ditolak pada file authorized_key

  2. file host tampaknya diabaikan

  3. Centos 7 - menambahkan pengguna ke grup sudoers - masih belum ada dalam file sudoers - mengapa?

  1. Pengantar pemantauan akun pengguna Linux

  2. Mengapa Pengguna Normal Tidak Dapat `chown` Sebuah File?

  3. Linux – Alasan Tidak Jelas Sebuah File Hanya-Baca?

  1. Ganti Nama Direktori Pengguna Default?

  2. Kesalahan Pengguna Pengelola File

  3. Manajer File Pengguna – CWP