Bagaimana cara kerja bit yang lengket?


148

SUID

The bit lengket diterapkan untuk program-program executable lesu sistem untuk menjaga citra program di memori setelah program selesai dijalankan.

Tapi saya tidak tahu apa yang tersimpan di memori. Dan bagaimana saya bisa melihatnya, dalam hal ini?


Berikut ini adalah tutorial yang bagus dengan contoh dan penjelasan yang berhasil. Kunci untuk memahami ini adalah sistem oktal yang terlibat. Tutorial Bit Lengket Linux Dengan Contoh yang Dikerjakan .
CMP

Jawaban:


193

Ini mungkin salah satu hal saya yang paling menjengkelkan yang selalu dikacaukan orang. Bit SUID / GUID dan sticky-bit adalah 2 hal yang sangat berbeda.

Jika Anda melakukannya, man chmodAnda dapat membaca tentang SUID dan bit-lengket. The man page tersedia di sini juga.

Latar Belakang

kutipan

Huruf rwxXst memilih bit mode file untuk pengguna yang terpengaruh: baca (r), tulis (w), jalankan (atau cari direktori) (x), jalankan / cari hanya jika file tersebut adalah direktori atau sudah memiliki izin eksekusi untuk beberapa pengguna (X), atur ID pengguna atau grup pada eksekusi , bendera penghapusan terbatas atau bit sticky (t) .

SUID / GUID

Apa halaman manual di atas coba katakan adalah bahwa posisi bit x mengambil rwxrwxrwx untuk oktal pengguna (grup 1 rwx) dan grup oktal (grup 2 rwx) dapat mengambil status tambahan di mana x menjadi sebuah s. Ketika ini terjadi file ini ketika dieksekusi (jika itu sebuah program dan bukan hanya skrip shell) akan berjalan dengan izin dari pemilik atau grup file.

Jadi jika file tersebut dimiliki oleh root dan bit SUID dihidupkan, program akan berjalan sebagai root. Bahkan jika Anda menjalankannya sebagai pengguna biasa. Hal yang sama berlaku untuk bit GUID.

kutipan

SETUID DAN SETGID BITS

chmod menghapus bit set-group-ID dari file biasa jika ID grup file tidak cocok dengan ID grup efektif pengguna atau salah satu ID grup tambahan pengguna, kecuali jika pengguna memiliki hak istimewa yang sesuai. Pembatasan tambahan dapat menyebabkan bit set-user-ID dan set-group-ID MODE atau RFILE diabaikan. Perilaku ini tergantung pada kebijakan dan fungsi panggilan sistem chmod yang mendasarinya. Jika ragu, periksa perilaku sistem yang mendasarinya.

chmod mempertahankan bit set-pengguna-ID dan set-grup-ID direktori kecuali Anda secara eksplisit menentukan sebaliknya. Anda dapat mengatur atau menghapus bit dengan mode simbolik seperti u + s dan gs, dan Anda dapat mengatur (tetapi tidak menghapus) bit dengan mode numerik.

Contoh SUID / GUID

no suid / guid - hanya bit rwxr-xr-x yang ditetapkan.

$ ls -lt b.pl
-rwxr-xr-x 1 root root 179 Jan  9 01:01 b.pl

suid & bit yang dapat dieksekusi pengguna diaktifkan (huruf kecil) - bit rwsr-xrx diatur.

$ chmod u+s b.pl 
$ ls -lt b.pl 
-rwsr-xr-x 1 root root 179 Jan  9 01:01 b.pl

suid diaktifkan & bit yang dapat dieksekusi dinonaktifkan (huruf besar S) - bit rwSr-xr-x diatur.

$ chmod u-x b.pl
$ ls -lt b.pl 
-rwSr-xr-x 1 root root 179 Jan  9 01:01 b.pl

bit executable guid & group diaktifkan (huruf kecil) - bit rwxr-sr-x diatur.

$ chmod g+s b.pl
$  ls -lt b.pl 
-rwxr-sr-x 1 root root 179 Jan  9 01:01 b.pl

panduan diaktifkan & bit yang dapat dieksekusi dinonaktifkan (huruf besar S) - bit rwxr-Sr-x diatur.

$ chmod g-x b.pl
$  ls -lt b.pl 
-rwxr-Sr-x 1 root root 179 Jan  9 01:01 b.pl

sedikit lengket

Bit sticky di sisi lain dilambangkan sebagai t, seperti dengan /tmpdirektori:

$ ls -l /|grep tmp
drwxrwxrwt. 168 root root 28672 Jun 14 08:36 tmp

Bit ini seharusnya selalu disebut "bit penghapusan terbatas" mengingat itulah yang benar-benar berkonotasi. Ketika bit mode ini diaktifkan, ia membuat direktori sehingga pengguna hanya dapat menghapus file & direktori di dalamnya yang menjadi pemiliknya.

kutipan

FLAG PENGHAPUSAN YANG TERBATAS ATAU GIGI STICKY

Bendera penghapusan terbatas atau bit sticky adalah bit tunggal, yang interpretasinya tergantung pada jenis file. Untuk direktori, ini
mencegah pengguna yang tidak memiliki hak untuk menghapus atau mengganti nama file dalam direktori kecuali mereka memiliki file atau direktori; ini disebut flag penghapusan terbatas untuk direktori, dan umumnya ditemukan pada direktori yang dapat ditulis oleh dunia seperti / tmp. Untuk file biasa pada beberapa sistem yang lebih lama, bit menyimpan gambar teks program pada perangkat swap sehingga akan memuat lebih cepat saat dijalankan; ini disebut bit yang lengket.


43
Sebenarnya bit-sticky sebelumnya dapat diterapkan ke executable, yang menyebabkan ini tetap dalam swap setelah mereka pertama kali dimuat. Ini dapat menghemat banyak disk / jaringan (NFS) yang tidak perlu dan penggunaan CPU untuk program yang banyak digunakan. Namun, baik Linux maupun sebagian besar (semua?) Sistem Unix tidak mendukung ini lagi (sudah dihapus dari kernel). Ini "lengket", karena executable terjebak dalam swap. Selain itu, itu digunakan untuk direktori seperti yang Anda gambarkan.
Baard Kopperud

4
Sebenarnya "banyak digunakan atau sangat besar" akan menjadi deskripsi yang lebih baik. Ingat kampus saya memiliki browser web Netscape sebagai "lengket" pada komputer HP-UX mereka pada tahun 1995. Jadi, program kecil yang sangat sering digunakan (mis. Perintah sistem sering dijalankan oleh cron) dan program besar (mis. Netscape) adalah kandidat utama untuk dibuat "lengket". Dalam kedua kasus, terus-menerus memuatnya dari disk / NFS akan sia-sia.
Baard Kopperud

8
Program sticky-bit dimaksudkan untuk tetap berada di RAM, bukan di swap (memuat gambar dari file swap tidak jauh lebih cepat daripada memuatnya dari disk sistem file). Itu dimaksudkan untuk perintah tingkat OS penting seperti ls. Jelas, hanya pengguna super yang dapat mengatur bit lengket pada file. Itu menjadi kurang penting setelah memori virtual dan perpustakaan bersama diperkenalkan, dan terutama ketika pager menjadi lebih pintar dan secara dinamis dapat memutuskan halaman mana yang akan tetap ada.
alexis

4
Dan karena properti lengket tidak masuk akal untuk direktori, bit yang sama dari topeng izin kemudian ditafsirkan untuk memodifikasi semantik pembuatan file tradisional untuk direktori.
alexis

5
@alexis: Awalnya, program bit lengket disimpan di ruang swap. Ini jauh lebih cepat daripada membaca dari sistem file karena membaca swap file gambar adalah sektor yang berdekatan dan sehingga sebagian besar dapat dibaca secara tidak sinkron. Dengan filesystem awal, tidak ada sektor "run lengths" dan sebagian besar driver filesystem awal membaca satu sektor pada satu waktu bahkan jika sektor tersebut terjadi berturut-turut. Hasil pada PDP-40 adalah program lengket tampaknya memuat langsung sementara program tidak lengket mengambil satu atau dua yang biasa. Saya pikir kita hanya edlengket.
wallyk

8

"Bit lengket diterapkan pada program yang dapat dieksekusi menandai sistem untuk menyimpan gambar program dalam memori setelah program selesai berjalan."

Saya pikir itu info yang cukup usang, hari ini sebagian besar Unix modern mengabaikannya. Di Linux, bit lengket hanya relevan untuk direktori. Lihat di sini dan artikel Wikipedia yang cukup informatif .

Lagi pula, dalam perilaku lama itu gambar (hanya "kode", bukan data) hanya disimpan dalam memori virtual - secara normal ditukar, bukan dalam memori nyata, sehingga dapat dijalankan lebih cepat di waktu berikutnya.


3

Apa itu bit yang lengket?

Bit sticky adalah bit izin yang ditetapkan pada direktori yang memungkinkan hanya pemilik file di dalam direktori itu atau pengguna root untuk menghapus atau mengganti nama file. Tidak ada pengguna lain yang memiliki hak yang diperlukan untuk menghapus file yang dibuat oleh beberapa pengguna lain.

Ini adalah langkah keamanan untuk menghindari penghapusan folder penting dan kontennya (sub-direktori dan file), meskipun pengguna lain memiliki izin penuh.


1

7
@ AB Tampaknya cukup akurat bagi saya, hampir seperti memparafrasekan awal artikel Wikpedia yang Anda kutip. Apakah ada yang salah?
roaima

Saya akan mengatakan bahwa jawabannya tidak lengkap. "Sticky" juga menunjukkan bahwa executable akan disimpan di ruang swap agar berjalan lebih cepat. Sekarang, ini adalah sejarah kuno tetapi dalam driver sistem file yang lebih lama digunakan untuk membaca satu sektor pada satu waktu bahkan jika sektor tersebut terjadi berturut-turut. Ini membuat executable non-lengket menjadi lambat, lengket membuat banyak akal pada saat itu.
GhostCode
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.