Sudo'nun içindekiler nasıl çalışır?


74

sudoDahili olarak nasıl çalışır? Aksine, root şifresi olmadan root olabileceği nasıl mümkün olabilir su? Hangi sistemler, vb. Süreç içerisinde yer almaktadır? Linux'ta bir güvenlik açığı değil mi (örneğin, neden sudodüzenli bir şekilde yapılan sudo, ancak imtiyazsız kullanıcının şifresini istemeyen ağır yamalı bir derleme yapamadım )?

Giriş ve su içlerini okudum . Ayrıca , sudo'nun nasıl kullanılmaya yönelik olduğunu da okudum. ama başlık rağmen, bunlar çoğunlukla arasındaki farklılıklar ile anlaşma suve sudo.

Yanıtlar:


80

Yürütülebilir dosyaya bakarsanız sudo:

$ which sudo
/usr/bin/sudo
$ ls -la /usr/bin/sudo
---s--x--x 2 root root 208808 Jun  3  2011 /usr/bin/sudo

İzin bitlerini taşıdığını fark edeceksiniz ---s--x--x. Bunlar aşağıdaki gibi bozulabilir:

-|--s|--x|--x
-      - first dash denotes if a directory or a file ("d" = dir, "-" = file)  
--s    - only the setuid bit is enabled for user who owns file
--x    - only the group execute bit is enabled
--x    - only the other execute bit is enabled

Bu nedenle bir program setuid biti etkin olduğunda (ayrıca SUID olarak da adlandırılır), bu programı çalıştırdığında, dosyanın sahibi olan kullanıcının kimlik bilgileriyle çalışacağı anlamına gelir, aka. Bu durumda kök.

Örnek

Aşağıdaki komutu kullanıcı saml olarak çalıştırırsam:

$ whoami
saml

$ sudo su -
[sudo] password for saml: 

sudoAslında yürütmenin kök olarak çalıştığını fark edeceksiniz :

$ ps -eaf|grep sudo
root     20399  2353  0 05:07 pts/13   00:00:00 sudo su -

setuid mekanizması

SUID'in nasıl çalıştığını merak ediyorsanız, bir göz atın man setuid. İşte adam sayfasından benden daha iyi açıklayan bir alıntı:

setuid () çağıran işlemin etkin kullanıcı kimliğini ayarlar. Arayanın etkin UID'si root ise, gerçek UID ve kayıtlı kullanıcı kimliği de ayarlanır. Linux altında, setuid (), _POSIX_SAVED_IDS özelliğine sahip POSIX sürümü gibi uygulanır. Bu, bir kullanıcı kimliği (root dışında) programının tüm kullanıcı ayrıcalıklarını bırakmasına, bazı ayrıcalıklı olmayan bir iş yapmasına ve ardından orijinal etkin kullanıcı kimliğini güvenli bir şekilde değiştirmesine olanak tanır.

Kullanıcı root veya program set-user-ID-root ise, özel dikkat gösterilmelidir. Setuid () işlevi, arayanın etkin kullanıcı kimliğini kontrol eder ve eğer süper kullanıcı ise, işlemle ilgili tüm kullanıcı kimlikleri kullanıcı kimliğine ayarlanır. Bu gerçekleştikten sonra, programın kök ayrıcalıklarını yeniden kazanması imkansızdır.

Buradaki anahtar kavram, programların gerçek bir kullanıcı kimliğine (UID) ve etkili bir programa (EUID) sahip olmasıdır. Setuid, bu bit etkinleştirildiğinde etkin kullanıcı kimliğini (EUID) ayarlıyor.

Bu nedenle, çekirdek açısından, bizim örneğimizde, samlhala asıl mal sahibi (UID) olduğu bilinmektedir, ancak EUID, çalıştırılabilir mal sahibinin sahibiyle birlikte belirlendi.

setgid

Ayrıca, sudo komutundaki izinleri bozduğumuzda ikinci bit grubunun grup izinleri için olduğunu söylemeliyim. Grup bitleri ayrıca set grup kimliği (aka. Setgid, SGID) olarak adlandırılan setuid'e benzer bir şeye sahiptir. Bu işlem, sahibi kimlik bilgileri yerine grup kimlik bilgileriyle işlemi yürütmesi dışında SUID ile aynı şeyi yapar.

Referanslar


4
Bunun sudo -syerine kullanmalısın sudo suçünkü işe yaramaz su. :)
Totor

4

Gerçek sudoikili setuid köküdür ve sadece bu şekilde ayarlanmış olan varoluşları dosyalayamazsınız.

setuid ve setgid (sırasıyla "yürütme sırasında kullanıcı kimliği ayarla" ve "yürütme sırasında grup kimliği ayarla" için kısa) [1], kullanıcıların sırasıyla çalıştırılabilir sahibinin veya grubun izinleriyle çalıştırılabilir çalıştırmasına izin veren Unix erişim hakları bayraklarıdır ve dizinlerde davranışını değiştirmek için.


tamam, bu sorumun bir parçası.
sudo'nun

2

Kimsenin dokunmadığı sistemler hakkında bir cevap vermek için, önemli sistemlerden biri setresuid () veya setresgid () 'dir. Eminim ki diğerleri de var, ancak bu ikisi setuid / sudo'ya özgü görünüyor.

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.