Setuid bitinin bash üzerinde hiçbir etkisi yok gibi görünüyor


14

Biraz deney yapıyordum ve garip bir şey fark ettim: setuid bitini bulunan bash kopyasına yerleştirmenin /usr/bin/bash-testhiçbir etkisi yok gibiydi. Bir örneğini çalıştırdığımda bash-test, giriş dizinim olarak ayarlanmadı /rootve whoamikomutu çalıştırdığımda bash-testkullanıcı adım olduğu gibi bildirilmedi root, bu bash-testda kök olarak çalışmadığını gösteriyor. Ancak, setuid bitini açıklarsam whoami, beklendiği gibi herhangi bir kabukta kök olduğu bildirildi.

Setuid bitini de ayarlamayı denedim /usr/bin/bashve aynı davranışı gözlemledim.

Üzerinde setuid bitini ayarladığımda bash neden kök olarak çalışmıyor? Selinux'un bununla bir ilgisi olabilir mi?

linux  bash  setuid 

1
bu soruda setuid hakkında ek bilgi bulabilirsiniz .
Anthon

Ayrıca bakınız Chen, Dean ve Wagner tarafından Setuid Demystified . Onun eski bir kağıt ama yine de geçerlidir.

Yanıtlar:


21

Açıklama biraz sinir bozucudur: bunun nedeni bash'ın kendisidir. stracedostumuzdur (bunun çalışması için SUID root olmalıdır):

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

bash, SUID kökü (UID! = EUID) başlatıldığını algılar ve kök gücünü bu gücü atmak için kullanır ve EUID'yi UID'ye sıfırlar. Ve daha sonra FSUID bile, sadece emin olmak için ...:

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

Sonunda: şans yok. Bash'i UID kökü (sudo) ile başlatmanız gerekir.

Düzenle 1

Man sayfası şunu söylüyor:

Kabuk, gerçek kullanıcı (grup) kimliğine eşit olmayan etkin kullanıcı (grup) kimliği ile başlatılırsa ve -p seçeneği sağlanmazsa, başlangıç ​​dosyaları okunmaz, kabuk işlevleri ortamdan devralınmaz, SHELLOPTS , BASHOPTS, CDPATH ve GLOBIGNORE değişkenleri, çevrede görünüyorlarsa yok sayılır ve etkin kullanıcı kimliği gerçek kullanıcı kimliğine ayarlanır. Çağırma sırasında -p seçeneği sağlanırsa, başlatma davranışı aynıdır, ancak etkin kullanıcı kimliği sıfırlanmaz.

Ama bu benim için işe yaramıyor. -pbaşlangıç ​​seçenekleri arasında bile bahsedilmez. Ben de denedim --posix; da işe yaramadı.


2

Her durumda, bir SUID kök programı kök ortamıyla ( , kabuk yapılandırması, ne olursa olsun) çalışmaz$HOME , kök güçlerle çalışır (yani, herhangi bir dosyayı silebilir, izinleri değiştirebilir, vb.).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.