Bit setuid tampaknya tidak berpengaruh pada bash


14

Saya bereksperimen sedikit dan melihat sesuatu yang aneh: mengatur bit setuid pada salinan bash yang terletak di /usr/bin/bash-testtampaknya tidak berpengaruh. Ketika saya menjalankan instance bash-test, direktori home saya tidak disetel ke /rootdan ketika saya menjalankan whoamiperintah dari bash-test, nama pengguna saya tidak dilaporkan root, menyarankan bahwa bash-testitu tidak berjalan sebagai root. Namun, jika saya mengaktifkan bit setuid whoami, saya dilaporkan sebagai root di shell apa pun, seperti yang diharapkan.

Saya mencoba mengatur bit setuid /usr/bin/bashdan juga mengamati perilaku yang sama.

Mengapa bash tidak berjalan sebagai root ketika saya mengatur bit setuid di atasnya? Bisakah selinux ada hubungannya dengan ini?

linux  bash  setuid 

1
Anda menemukan info tambahan tentang setuid dalam pertanyaan ini .
Anthon

Juga lihat Setuid Demystified oleh Chen, Dean dan Wagner. Ini kertas tua tapi masih berlaku.

Jawaban:


21

Penjelasannya agak menjengkelkan: bash sendiri adalah alasannya. straceadalah teman kami (harus SUID root itu sendiri agar ini berfungsi):

getuid()                                = 1000
getgid()                                = 1001
geteuid()                               = 0
getegid()                               = 1001
setuid(1000)                            = 0
setgid(1001)                            = 0

bash mendeteksi bahwa ia telah memulai SUID root (UID! = EUID) dan menggunakan kekuatan rootnya untuk membuang kekuatan ini, mengatur ulang EUID ke UID. Dan kemudian bahkan FSUID, hanya untuk memastikan ...:

getuid()                                = 1000
setfsuid(1000)                          = 1000
getgid()                                = 1001
setfsgid(1001)                          = 1001

Pada akhirnya: tidak ada peluang. Anda harus memulai bash dengan root UID (yaitu sudo).

Edit 1

Halaman manual mengatakan ini:

Jika shell dimulai dengan id pengguna (grup) yang efektif tidak sama dengan id pengguna (grup) yang sebenarnya, dan opsi -p tidak disediakan, tidak ada file startup yang dibaca, fungsi shell tidak diwarisi dari lingkungan, SHELLOPTS , Variabel BASHOPTS, CDPATH, dan GLOBIGNORE, jika muncul di lingkungan, diabaikan, dan id pengguna yang efektif ditetapkan ke id pengguna yang sebenarnya. Jika opsi -p disediakan saat doa, perilaku startup adalah sama, tetapi id pengguna yang efektif tidak diatur ulang.

Tetapi ini tidak berhasil untuk saya. -pbahkan tidak disebutkan di antara opsi startup. Saya juga mencoba --posix; juga tidak berhasil.


2

Bagaimanapun, program root SUID tidak berjalan dengan lingkungan root ( $HOME, konfigurasi untuk shell, apa pun), itu berjalan dengan kekuatan root (yaitu, ia dapat menghapus file apa pun, mengubah izin apa pun, dll).

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.