komut dosyası: bir bash betiğinde doğru izinlerle setreuid () / setregid () işlevini etkileşimli olarak çağırmamak nasıl?


3

Bir bash betiği ile başladım cap_sys_admin,cap_setgid,cap_setuid+i (bu yetenekler miras kalır) , şifre yazmadan root olmanın komutu nedir (bunun sadece kullanma anlamına geldiğine dikkat edin setreuid(0,0))  ?

Amaç, geliştirici modundayken ya da rootfs doğrulamasını kapatmadan bunu gerçekleştirmektir . Bu, kendim yazmış olduğum bir sargıcıyı arayamayacağım, ne de bir bölüm yürütücüsünü yeniden birleştirmek için cap_sys_admin kullanmanın bir yolu olmadığı sürece python veya perl kullanamıyorum.
Komut önyükleme işlemi sırasında başlatılır.


Yorumlar genişletilmiş tartışmalar için değildir; bu konuşma sohbete taşındı .
DavidPostill

Yanıtlar:


4

Benim ilk gözlemim, 3 yeteneğiniz var. Yeteneğinizi kök salgılayarak tüm yeteneklerinize göre nasıl ayarlayacağınızı sormaya çalışıyor musunuz? İlk bakışta, sadece 3 olan tüm yetenekleri (kök olmak suretiyle) kazanmaya çalışıyorsunuz.

İkinci gözlem, sistemin sınırlama kabiliyetinin ne olduğunu belirlemediğinizdir. Yani, genel sınırlama kümesi sadece bu 3 yetenek ise, o zaman kök olmanın hiçbir etkisi olmayacaktır.

Üçüncü gözlem, “güvenlik duvarlarının” ne olduğunu belirtmemenizdir. Değerlerine bağlı olarak başka yetenekler eklemek imkansız olabilir veya kök olmanın UID'nizi değiştirmekten başka bir şey yapmaması söz konusu olabilir (yani kök artık özel değildir).

Dördüncü gözlem - bash kabuğunuzu listelenen özelliklerle başlatırken, bash'ın gerçekten bu yetenekleri koruduğunu göstermezsiniz. Emin olmak isteyebilirsin.

Ama ben # 1 gözlemine gidip sorduğun şeyin mümkün olmaması gerektiğini söyleyeceğim. Öyleyse, çekirdek güvenlik hatası gibi görünüyor - özellikle bir ayrıcalık artışı. Bunu yapmanın bir yolunu bulursanız, güvenlik hataları genellikle en kısa sürede çözüldüğü için uzun süre kalmayacağını düşünüyorum.

Bunun neden bir güvenlik hatası olmayacağına ilişkin kullanım durumunuzda bir şey eksik mi?


Yorumlar genişletilmiş tartışmalar için değildir; bu konuşma sohbete taşındı .
DavidPostill

2

Cevap mount.exfat-fuse'un sadece izinlere dayanması ve ᴜɪᴅ 0 olup olmadığını kontrol etmemesi şeklinde basit.

/sbin/mount.exfat-fuse /media/removable/Y/dev /media/removable/archive -o exec,nonempty

Tabii ki, bu sadece buldum sayesinde exfat-fuse yükseltildiği için önemsediğim versiyonlarda işe yarıyor .


Çözümünüz, UID == 0 kontrol etmeyen başka bir mount programı çalıştırmaktır. Tamam, şimdi bunun yarın güncellendiğini ve değiştiğini varsayalım. Mesajımdaki noktayı kaçırıyorsunuz - kendi montaj programınızı derlerseniz, yarınlar güncellenirse herhangi bir kontrol yapmanız veya endişelenmeniz gerekmez.
Astara

@ Astara Sadece r58 ve kromun altındaki versiyonlarını önemsiyorum. Ayrıca, rootfs doğrulamasını kısmen devre dışı bırakmadan, ikili yürütülebilir dosyaları yükleyemezsiniz.
user2284570

1

Yeni cevap: Belirlediğiniz gibi (akıllıca) risk almak istemediğiniz sürece, mümkün değildir. Almak istemediğiniz.

Sorunu özetlemek için:

  1. Rootfs dışındaki tüm diskler noexec olarak monte edilmiştir, bu nedenle komut dosyaları içerebilir, ancak programlar
  2. Rootfs (sistem) sağlama toplamıdır ve değiştirilemez
  3. Sistem değiştirme fiilleri sadece geliştirme modunda izin verilir (admin)
  4. Exec ile disklerin yeniden montajı sadece geliştirme modunda mümkündür
  5. Geliştirme modunda olmadığı sürece, intihar ve sistem değiştirme yetenekleri çalışmaz.

Çözümler ve geçici çözümler:

  1. Programlar bir komut dosyası tarafından çalıştırılabilir, o satırda adlandırılan yürütülebilir dosyayı çalıştıracak olan she-bang satırıyla başlar (#! İle başlar). Ancak geliştirme modunda olmadığı sürece, rootfs'tan yalnızca sınırlı sayıda program bu şekilde çalıştırılabilir.
  2. Rootfs doğrulama işlemini kaldırın ve dosya sistemini uyarılara
    sudo /usr/share/vboot/bin/make_dev_ssd.sh --remove_rootfs_verification
    bakınız linki ile yazılabilir hale getirin .
  3. Kendi rootfs'ınızı sağlama toplamıyla yazın ( google önbelleğindeki silinmiş dokümanın bağlantısı ).

[Eski cevap]

CAP_SYS_ADMINHerhangi bir ikili sistemi arka kapıya bağlamak için varolan bir sistemin üzerine yeni bir dosya sistemi bağlamak için, dosya sistemine bağlanma / bağlantı kaldırma kabiliyetini verdiği için kök izin anlamına gelen bir yetenek istediniz .

Chrome OS'de olduğu gibi, tüm güvenlik deliklerini engellemek için, dev modunda değilken intiharı engellemek dahil olmak üzere büyük bir çaba sarf edildi, yeteneklerin de engellenip engellenmediğini bilmiyorum ve test edebileceğim bir Chromebook'um yok (ancak siz ).

Bu yetenekler şu şekilde sağlanabilir:

$  sudo setcap cap_sys_admin+ep executable

Referanslar:


Lütfen bu siteye hiçbir istismar göndermeyin. Sorunuzun yasadışı saldırılar dışında herhangi bir cevabı yoksa, silmelisiniz.
harrymc

You have asked for the CAP_SYS_ADMIN capability, which amounts to root permission as it grants the ability to mount/unmount filesystemsHayır, nasıl kullanılacağını sordum çünkü mount komutu yeteneklerle çalışmayı reddediyor (bu yüzden ᴜɪᴅ 0 değilse çalıştırmayı reddediyor) . Ve yine, kök doğrulama işlemini kapatmak istemediğimi söyledim .
user2284570

Bakın, sorduğunuz şey, istediğiniz modda setcap'ın dev modu kapalıyken çalışıp çalışmadığını kontrol etmek. Olmazlarsa, sorunuz olası bir cevap olmadan kalır. Bulduğun bu istismarın tek çözüm olduğuna inanıyor gibisin - Chromebook'unuz için çalışsa bile, daha yeni bir çekirdek için çalışmayabilir.
harrymc

is to check if setcap with the capabilities you wanted do work or not when dev mode is off.Hayır, çalıştıklarını biliyorum, çünkü bash işleminin the kısmında getcaps açtım ve ekrana bastım cap_sys_admin,cap_setgid,cap_setuid+eip. Soru, yetenekler aracılığıyla ve bir şifre kullanmadan başka bir kullanıcı olmaktır.
user2284570

Eğer yetenekler genel olarak işe yararsa, CAP_SETUID ve CAP_SETGID'yi deneyebilirsiniz.
harrymc
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.