Mengapa "chmod 1777" dan "chmod 3777" keduanya mengatur bit sticky?

15

Untuk mengatur bit sticky pada direktori, mengapa perintah chmod 1777dan chmod 3777keduanya berfungsi?

Liao Zhuodi
sumber
2
Anda mengusulkan operasi yang berpotensi berisiko. Kombinasi sedikit lengket dan izin rwx untuk semua adalah praktik yang buruk. Siapa saja dapat mengubah dan mengeksekusi file dan s-bit memungkinkan beralih ke pengguna root tanpa pasword.
jippie
1
@jippie setuid dan bit setgid hilang jika file diubah, jadi Anda tidak bisa mendapatkan akses root seperti itu.
Kyle Jones
@KyleJones, masih berbahaya. Jika passwdbiner bisa ditulis oleh dunia, Anda tidak akan bisa mendapatkan akses root dengan memodifikasinya, seperti yang Anda katakan, tetapi Anda bisa menggantinya dengan beberapa biner lain yang akan dijalankan oleh semua orang setelahnya, pikir itu passwd.
Wildcard
@ Kartu Kredit Setuju.
Kyle Jones

Jawaban:

29

Setiap angka (juga disebut sebagai oktal karena basis8) dalam pengelompokan itu mewakili 3 bit. Jika Anda mengubahnya menjadi biner, itu membuatnya jauh lebih mudah.

1 = 0 0 1
3 = 0 1 1
5 = 1 0 1
7 = 1 1 1

Jadi jika Anda melakukan 1777, 3777, 5777, atau 7777 Anda akan mengatur bit lengket karena kolom ketiga akan menjadi 1. Namun, dengan 3777, 5777, dan 7777 Anda juga menetapkan bit lain (SUID untuk kolom pertama, dan SGID untuk kolom kedua).

Sebaliknya, nomor lain di tempat itu (hingga maksimum 7) tidak akan mengatur bit lengket karena kolom terakhir tidak akan menjadi 1 atau "pada."

2 = 0 1 0
4 = 1 0 0
6 = 1 1 0

JZeolla
sumber
3
+1 untuk deskripsi yang bagus tentang bagaimana angka oktal bekerja dan bagaimana itu berlaku untuk bit izin file.
CVn
1
Ini disebut "bitmask", dan +1 juga untuk menjelaskan / menunjukkan bagaimana ia dapat mengatur dan clearkolom Grup Pemilik & Lainnya.
Chris K
16

Izin yang diteruskan sebagai argumen ke chmod ditentukan sebagai nilai oktal . Setiap angka dalam nilai mewakili tiga bit. Jika tiga angka diberikan, Anda mengatur bit baca, tulis, dan eksekusi untuk pemilik file, grup, dan lainnya (semua orang). Jika empat angka diberikan, angka paling kiri menetapkan bit setuid, setgid dan sticky. Oktal 1 mengatur bit yang lengket. Oktal 2 mengatur bit setgid. Oktal 2 + oktal 1 adalah oktal 3 yang mengatur bit setgid dan bit sticky.

Kyle Jones
sumber
1
Bukankah ini oktal 2 | oktal 1 daripada oktal 2 + oktal 1? Operasi kebetulan memiliki hasil yang sama dalam kasus ini, tetapi secara umum ini agak bitwise atau yang penting, bukan?
gerrit
1
@gerya Ya, dalam kasus umum Anda harus melihat binary oroperator. Namun, seperti yang Anda tunjukkan, dalam hal ini hasilnya sama, dan lebih banyak orang yang terbiasa dengan penambahan.
CVn