Saya kira file yang dapat dieksekusi dengan set bit SetUID harus berjalan sebagai pemiliknya tetapi saya tidak dapat mereproduksinya. Saya mencoba yang berikut ini.
$ cat prep.sh cp / bin / bash. chown root.root bash chmod 4770 bash # Terverifikasi $ sudo sh prep.sh $ ./bash $ id -u 1000 $ keluar $
$ cat test.c #termasuk <stdio.h> #termasuk <unistd.h> int main () { printf ("% d,% d \ n", getuid (), geteuid ()); return 0; } $ gcc -o test test.c $ chmod 4770 test # Terverifikasi $ sudo chown root.root test $ ./test 1000.1000 $ # Kenapa ???
Namun
$ su # ./bash # id -u 0 # ./uji 0,0 # keluar # keluar $
Catatan: Titik pemasangan tidak memiliki nosuid
atau noexec
mengatur.
Adakah yang bisa menjelaskan mengapa itu gagal bekerja di Ubuntu 16.04 LTS?
sudo
? Ada bug atau salah ketik di dalamnya, meskipun,chmod
tidak ada nama file.Jawaban:
Untuk executable yang dikompilasi, dari
man 2 chown
:Membalikkan
chown
danchmod
pesanan berfungsi untuk saya:sumber
Dalam kasus pertama Anda, Bash yang tidak suka dijalankan sebagai setuid.
Lihat: manual Bash pada file startup , juga bit Setuid tampaknya tidak berpengaruh pada bash .
Dalam kasus kedua, itu urutan
chmod
danchown
yang penting, karena muru sudah menjawab . Mengubah pemilik akan mereset bit setuid.sumber
Bisa juga bahwa sistem file yang berisi tes yang dapat dieksekusi dipasang dengan
nosuid
opsi ; Saya telah mendengar bahwa distribusi yang lebih baru akan melakukan ini secara default/tmp
, dan ada argumen yang bagus untuk menerapkannya/home
juga.nosuid
menyebabkan kernel mengabaikan bit setuid dan setgid pada semua file executable dalam sistem file. (Hal yang tidak terkait yang terjadi ketika Anda membuat direktori setgid tidak terpengaruh.)sumber