Debian Gnu / Linux ile ilgili yetenekleri deniyorum.
/ Bin / ping komutunu şu anki çalışma dizinime kopyaladım. Beklendiği gibi çalışmıyor, başlangıçta setuid kökü idi.
Daha sonra pingimi asgari yetenekleri (root değil) vererek veriyorum sudo /sbin/setcap cap_net_raw=ep ./pingve pingim beklendiği gibi çalışıyor.
Sonra sudo /sbin/setcap -r ./pingbu yeteneği iptal etmek. Şimdi beklendiği gibi çalışmıyor.
Şimdi ping'i kullanmaya çalışıyorum capsh.
capsh hiçbir ayrıcalık vardır, bu yüzden kök olarak çalıştırmak gerekir, ama sonra kök ve böylece diğer tüm ayrıcalıkları bırakın.
Ben de ihtiyacım olduğunu düşünüyorum secure-keep-caps, bu belgelenmemiştir capsh, ancak yetenek kılavuzundadır. Biraz rakam aldım /usr/include/linux/securebits.h. Doğru görünüyorlar, çünkü çıktıların --printbu bitlerin doğru olduğunu gösteriyor.
Saatlerdir uğraşıyorum, şimdiye kadar buna sahibim.
sudo /sbin/capsh --keep=1 --secbits=0x10 --caps="cap_net_raw+epi" == --secbits=0x10 --user=${USER} --print -- -c "./ping localhost"
Bununla birlikte pinghatalar ping: icmp open socket: Operation not permitted, bu özelliği olmadığında olan şeydir. Ayrıca --printşovlar Current: =p cap_net_raw+i, bu ihtiyacımız yok e.
sudo /sbin/capsh --caps="cap_net_raw+epi" --print -- -c "./ping localhost"bunu Current: = cap_net_raw+eipdoğru ayarlayacaktır , ama bizi olarak bırakır root.
Düzenleme-1
Şimdi denedim sudo /sbin/capsh --keep=1 --secbits=0x11 --caps=cap_net_raw+epi --print -- -c "touch zz; ./ping -c1 localhost;"
Bu aşağıdakileri üretir:
touch: cannot touch `zz': Permission denied
ping: icmp open socket: Operation not permitted
İlk hata şu şekilde bekleniyor: secure-noroot: yes
İkincisi değilCurrent: = cap_net_raw+eip
Düzenleme-2
Daha ==önce koyarsam --print, şimdi gösterir Current: = cap_net_raw+i, böylece önceki hatayı açıklar, ancak neden kökten çıkarken kapasitemizi kaybettiğimizi değil, bunu secure-keep-capsdüzeltmeliyim.
Düzenleme-3
Görebildiğim kadarıyla exec çağrıldığında Etkili (e) ve İzin Verilen (p) değerlerini kaybediyorum. Bu beklenir, ancak güvenli tutma kapaklarının kaybolmalarını durdurması gerektiğini düşündüm. Bir şey mi kaçırıyorum?
Düzenleme-4
Daha fazla araştırma yapıyorum ve kılavuzu tekrar okuyorum. Normalde eve pyetenekler şu durumlarda kaybolur gibi görünüyor : kullanıcıdan geçiş yaptığınızda root(veya uyguladığınızda secure-noroot, kök kökünü normal bir kullanıcı yaptığınızda), bu geçersiz kılınabilir secure-keep-caps; aradığınızda exec, söyleyebildiğim kadarıyla bu bir değişmez.
Anlayabildiğim kadarıyla, bu kılavuza göre çalışıyor. Söyleyebildiğim kadarıyla yararlı bir şey yapmanın bir yolu yok capsh. Anlayabildiğim kadarıyla, yetenekleri kullanmak için: dosya yeteneklerini kullanmak veya kullanmayan yeteneklere duyarlı bir programa sahip olmak exec. Bu nedenle ayrıcalıklı bir paketleyici yok.
Şimdi sorum ne eksik olduğum, ne capshiçin.
Düzenleme-5
Ortam yeteneklerine bir cevap ekledim. Belki capshde devralınan yeteneklerle kullanılabilir, ancak yararlı olması için bunların yürütülebilir dosyada ayarlanması gerekir. Capsh'ın ortam özellikleri olmadan nasıl faydalı bir şey yapabileceğini veya miras alınan yeteneklere izin veremiyorum.
sürümleri:
capshpaketlibcap2-binversiyonundan1:2.22-1.2- edit-3'ten önce en son sürümü
capshaldımgit://git.debian.org/collab-maint/libcap2.gitve kullanmaya başladım. uname -aLinux richard-laptop 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/LinuxKullanıcı-arazi 32bit.
capshortamın yokluğunda (başlangıçta olduğu gibi) kullanımının ne olduğudur . Neyi kaçırıyorum. Bir faydası olmalı.
capshcollab-Maint repo “son” teşekkür vermezdimcapsh, Debian paketi hala ortam yetenekleri desteklemez. Memba 2.27 yapar.