chown setuid bitini kaldırır: hata veya özellik?


14

Yeniden oluşturma adımları:

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

Debian sıkma ve Ubuntu 12.04 ile test edildi


Bunu Fedora 17'de de yapıyor.
BenjiWiebe

Yanıtlar:


17

Chown belgelerine göre bir hata değil:

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

Teşekkürler jlliagre. Daha info coreutilsönce bilmiyordum . Sadece man sayfasını okudum ve internette arama yaptım.
Germar

12

Bu tasarım gereğidir ve standart davranıştır. AlıntıPOSIX standardından :

Chown uygun ayrıcalıklara sahip bir işlem tarafından çağrılmadığı sürece, normal bir dosyanın set-user-ID ve set-group-ID bitleri başarıyla tamamlandıktan sonra silinir; diğer dosya türlerinin set-user-ID ve set-group-ID bitleri temizlenebilir.

(s bu arada yapışkan değil setuid (veya grup sütununda setgid).)

Bu davranış, temel alınan sistem çağrısının davranışını izler (bazı sistemlerde, setxid bitleri yalnızca yürütülebilir dosyalar için temizlenir).

Setuid bitini kaldırmanın nedeni, sahibin değiştirilmesinin hangi kullanıcının sürecin etkili kullanıcı kimliği olacağını değiştirmesidir. Özellikle, kullanıcının bir dosyayı verebileceği sistemlerde cp /bin/sh foo; chmod u+s foo; chown joe foo, dev bir güvenlik deliği olan joe'ye ait bir setuid yürütülebilir dosyası oluşturur.


Nitpick için upvoting! SUID / SGID "yapışkan" bit değildir!
Jim Dennis

SUID / SGID'yi korumanın güvenlik etkileri hakkında büyük bir nokta. O cümleyi okuyana kadar davranıştan rahatsız oldum. Ben, ekleme ancak hiç görmedim chown olurdu değil root olarak çalıştırırken bile, bitleri temizlemek. "Uygun ayrıcalıkların" ne anlama geleceğini merak ediyorum.
vastlysuperiorman

1
@vastlysuperiorman Klasik bir Unix platformunda, “uygun ayrıcalıklar” kullanıcı kimliği 0 anlamına gelir. Ancak POSIX, sistemlerin kendi güvenlik politikalarını tanımlamasına izin verir. Örneğin, Linux'taki birçok işlem için, “uygun ayrıcalıklar” bir yetenek olarak uygulanır (yalnızca kök varsayılan olarak alınır). Bu özel durumda, tüm Unix varyantları olmasa da çoğu gibi ayrıcalıklardan bağımsız olarak chown üzerindeki setxid bitlerini bastırır. Ancak Windows'taki bir POSIX katmanı farklı şekilde çalışabilir.
Gilles 'SO- kötü olmayı kes
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.