chown menghapus bit setuid: bug atau fitur?

14

Langkah-langkah mereproduksi:

germar@host:~$ cd /tmp/
germar@host:/tmp$ touch test && chmod u+s test && ls -la test
-rwSr--r-- 1 germar germar 0 Nov  2 20:11 test
germar@host:/tmp$ chown germar:germar test && ls -la test
-rw-r--r-- 1 germar germar 0 Nov  2 20:11 test

Diuji dengan Debian squeeze dan Ubuntu 12.04

Germar
sumber
Apakah itu pada Fedora 17 juga.
BenjiWiebe
1
fitur
mikeserv

Jawaban:

17

Bukan bug menurut dokumentasi chown:

$ info coreutils 'chown invocation'

   The `chown' command sometimes clears the set-user-ID or set-group-ID
permission bits.  This behavior depends on the policy and functionality
of the underlying `chown' system call, which may make system-dependent
file mode modifications outside the control of the `chown' command.
For example, the `chown' command might not affect those bits when
invoked by a user with appropriate privileges, or when the bits signify
some function other than executable permission (e.g., mandatory
locking).  When in doubt, check the underlying system behavior.
Jlliagre
sumber
Terima kasih jlliagre. Saya tidak tahu info coreutilssebelumnya. Saya hanya membaca halaman manual dan mencari di web.
Germar
12

Ini adalah desain, dan itu perilaku standar. Mengutip standar POSIX :

Kecuali chown dijalankan oleh proses dengan hak istimewa yang sesuai, bit set-user-ID dan set-group-ID dari file biasa akan dihapus setelah berhasil diselesaikan; bit set-user-ID dan set-group-ID dari tipe file lain dapat dihapus.

( sadalah setuid (atau setgid di kolom grup), tidak lengket, omong-omong.)

Perilaku ini mengikuti panggilan sistem yang mendasarinya (kecuali bahwa pada beberapa sistem, bit setxid hanya dihapus untuk file yang dapat dieksekusi).

Alasan untuk menghapus bit setuid adalah bahwa mengubah pemilik juga mengubah pengguna mana yang akan menjadi ID pengguna efektif proses. Secara khusus, pada sistem di mana pengguna dapat memberikan file, cp /bin/sh foo; chmod u+s foo; chown joe fooakan membuat setuid executable milik joe, lubang keamanan raksasa.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Upvoting untuk nitpick! SUID / SGID bukan bagian "lengket"!
Jim Dennis
Poin bagus tentang implikasi keamanan pelestarian SUID / SGID. Saya terganggu oleh perilaku sampai saya membaca kalimat itu. Saya akan menambahkan, bagaimanapun, saya belum pernah melihat chown tidak menghapus bit, bahkan ketika dijalankan sebagai root. Saya ingin tahu apa yang dimaksud dengan "hak istimewa yang sesuai".
extremelylysuperiorman
1
@vastlysuperiorman Pada platform Unix klasik, "hak istimewa yang sesuai" berarti ID pengguna 0. Tetapi POSIX memungkinkan sistem untuk menentukan kebijakan keamanan mereka sendiri. Sebagai contoh, untuk banyak operasi di Linux, "hak istimewa yang sesuai" diimplementasikan sebagai kemampuan (yang hanya didapat secara default oleh root). Dalam kasus khusus ini, tidak menekan bit setxid pada chown terlepas dari privilege, seperti kebanyakan jika tidak semua varian Unix. Tetapi lapisan POSIX pada Windows mungkin bekerja secara berbeda.
Gilles 'SO- stop being evil'