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?


sumber
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.

Hauke ​​Laging
sumber
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).

vonbrand
sumber