Kabuk programlarının yürütülmesine izin veren kullanıcıların kabuğunu kısıtlama


9

Herhangi bir kullanıcının sisteme zarar verebilecek ls, rm ve diğer sistem komutlarını kullanmaması engellenebilir mi? Ancak kullanıcılar kabuk programlarını yürütebilmelidir.


Bunu neden yapmak istiyorsun? Etkileşimde oldukları bir program yazamaz mısınız?
Joe

Ne tür kabuk programları yürütmeliler?
Mike

Açık güvenlik sorunu olan "kendi yarattığı kabuk programlarını çalıştır" mı demek istediniz ..
pjc50

13
Oh, hayır, tehlikeli lskomut değil !
womble

Yanıtlar:


11

Sorunuz:

Kullanıcılarıma güvenmiyorum. Aptallar internette bir şey görür ve ne yaptığını anlamadan dener. Küstah olanlar etrafta dolaşmayı ve diğer insanların dosyalarına bakmayı ve fikirlerini çalmayı sever. Ve tembel, tembel olanlara başlama.

Sistemimi ve kullanıcılarımı kullanıcılarımdan nasıl koruyabilirim?


İlk olarak, unix çok kapsamlı bir dosya sistemi izin sistemine sahiptir. Bu unix dosya sistemi izinleri hakkında iyi bir öğretici gibi görünüyor . Bunun amacı, dizinlerin bir kullanıcının bir dizine girebileceği ve programları bu dizinden çalıştırabileceği, ancak bu dizinin içeriğini görüntüleyemeyeceği şekilde ayarlanabilmesidir. Bunu yaparsanız, örneğin, / home üzerinde, kullanıcı / home üzerinde ls çalıştırırsa, izin verilmedi hatası alır.

Kullanıcılarınızdan gerçekten korkuyorsanız ve onları bir supermax kısıtlı ortama yapıştırmak istiyorsanız , freebsd'in hapishaneleri veya solaris bölgeleri gibi bir şey kullanın - her kullanıcı kendi özel ortamını elde eder. Eklenen noktalar için ZFS'yi kullanın, böylece oturum açtıklarında ortamın anlık görüntüsünü alabilirsiniz, böylece dosyalarını silerse bunları anlık görüntüden çıkarabilirsiniz.


9

İstediğinizi tam olarak yapabilmek için yerinde olması gereken üç şey vardır:

  1. İlgilendiğiniz komutlardan yoksun özel bir kabuk . Bu, elde edilmesi zor bir şeydir, ancak gerçekten kullanıcıların bazı kabuk ilkellerine erişmesini gerçekten istemiyorsanız, bunları kaldırmanın tek yolu budur.
  2. Dosya izinlerini doğru ayarlayın . Kullanıcıların sisteme zarar vermesini istemiyor musunuz? İzinleri, doğru araçlara sahip olsalar bile sisteme zarar vermeyecek şekilde ayarlayın. Bu üç adımdan en kolay adımı budur.
  3. AppArmor gibi zorunlu bir erişim kontrolü teknolojisi kullanın . AppArmor ve SELinux gibi MAC'ler izinleri çekirdeğe yerleştirir. Bunlar, kullanıcıların bir yerde bulsalar bile doğru araçları çalıştırmasını önler (ve dosya izinleri gibi, kısıtlı kutunun dışında kullanmalarını önler).

Kemer, jartiyer ve iyi bir ölçü için zımba tabancası. Orada yanlış gitmek zor.

AppArmor ilginçtir, çünkü belirli bir yürütülebilir dosyanın MAC'si tüm çocukları tarafından devralınır. Bir kullanıcının giriş bilgilerini /bin/bash-bobayarlayın, söz konusu ikili hak için AppArmor profilini ayarlayın ve bu izin hapishanesinden çıkmanın tek yolu çekirdek istismarlarıdır. Bazı tembel yükleme komut dosyaları /var/opt/vendor/tmpaptalca bir nedenden ötürü global olarak yazılabilir halde kalırsa /bin/bash-bob, kabuğu olarak kullanan kullanıcı oraya yazamaz . Bash-bob profilini yalnızca ana dizinlerine yazmaya izin verecek şekilde ayarlayın /tmpve bu izin hataları kullanılamaz. Onlar nasılsa root parolasını bulmak bile, için AppArmor profili /bin/bash-bobhala onlar sonra bile geçerli olacaktır suçünkü yukarı suve bashsüreci yumurtlar çocuklarıdır /bin/bash-bob.

Zor kısmı bu AppArmor profilini oluşturmaktır.

  1. / Bin / bash-bob için bir AppArmor profili oluşturun ve denetim moduna ayarlayın
  2. Bob'un giriş kabuğunu / bin / bash-bob olarak ayarlayın
  3. Bob olarak giriş yapın. Bob'un yapabilmesini istediğiniz her şeyi yapın.
  4. AppArmor profilini oluşturmak için auditlog'u kullanın (SUSE bunun için araçlar içerir, diğer Linux dağıtımlarından emin değilim). Bu korkunç derecede sıkıcıdır, ancak bu güvenlik düzeyine ihtiyacınız varsa gerçekleşmesi gerekir.
    1. Şöyle şeyler yapacaksınız:
      • Sistem kitaplıklarının çoğuna okuma erişimini onaylama
      • Seçilen birkaç izin verilen sistem komutunun okuma ve yürütme haklarını onaylama
      • Geçici alanlara yazma erişimini onaylama
      • Gerekirse soket oluşturmayı onaylama
  5. Politikayı uygulanacak şekilde ayarlayın.
  6. Bob olarak giriş yapın, bir şeyler yapın.
  7. Ayarlamaları yapmak.

Benim düşünceme göre, sadece 2. ve 3. adımlara ihtiyacınız var, çünkü ikisi birlikte, her iki adımda da dikkatlice oluşturulmuş kutunun dışında zararlı bir şey yapma yeteneğini engelliyor.


4

Eh, sen yapabilirsiniz kullanıcının kabuğun ayarlanması yalnızca onları bazı kabuk komut dosyalarını çalıştırmanızı sağlar olduğunu yazdım bir programa.

Tabii ki bu sadece program ve kabuk komut dosyaları kadar güvenli olurdu; pratikte, bu tür kısıtlı kabuklar genellikle akıllı bir saldırgana karşı güvenli değildir.


3

Komutları denemeyin ve sınırlamayın, dosya izinlerini sınırlandırmayın. İnsanların sistem çağrılarına erişimini pratik olarak sınırlandıramazsınız, bu yüzden birinin yapması gereken tek şey, yürütmelerini istemediğiniz "tehlikeli" komutların kendi kopyasını sağlamaktır ve doldurulur.


2

Kullanıcının yalnızca belirli komut dosyalarını / ikili dosyaları çalıştırabilmesini istiyorsanız, kısıtlanmış bir kabuk kullanabilirsiniz . Bu (Wikipedia makalesinde bahsedildiği gibi) tamamen güvenli değildir, ancak çalışmasına izin verilen hiçbir uygulamanın yeni bir kabuk çalıştıramayacağını garanti edemiyorsanız, iyi bir alternatiftir.

Kullanıcı tarafından kısıtlanmış bir kabuk ayarlamak /bin/rbashiçin, ikili kabuk r *** name * olarak adlandırıldığında çoğu kabuk kısıtlı moda girer . Ardından, **. Bashrc (veya eşdeğerini) düzenleyin ve $PATHizin verilen tüm ikili / komut dosyalarının depolandığı bir dizine ayarlayın .


1

Evet, mümkün, ama pratikte çok fazla çalışma ve planlama gerekiyordu. Komut dosyaları oluşturabilir ve bunların ayrıcalıklı bir kullanım olarak çalışmasını sağlayabilir, ardından söz konusu kullanıcıdan tüm ayrıcalıkları kaldırabilirsiniz. Veya kullanıcının kabuğunu, yalnızca açıkça izin verdiğiniz şeyi yapmalarına izin veren kendi yaptığınız bir şeye ayarlayabilirsiniz.

Ancak, linux'daki standart izinler, normal bir kullanıcının "sisteme zarar vermesini" neredeyse imkansız hale getirir. Ne tür zararları önlemeye çalışıyorsunuz? Kullanıcıların ana dizinlerinin dışında yazılım yükleyebilmelerini veya programları çalıştırabilmelerini önlemek çok önemlidir ve sistemi daha da kilitlemek için chroot'u kullanabilirsiniz.


Ben rm -rf / bin, ls / home / *, rm -rf / usr / bin, ls / .................... gibi olası komutları önlemeye çalışıyorum .....

2
Standart linux dosya izinlerini kullananları engelleyebilirsiniz ...
ChristopheD

1

[Lshell] [1] (sınırlı kabuk) 'u denemek isteyebilirsiniz.

lshell, bir kullanıcının ortamını sınırlı komut kümeleriyle kısıtlamanıza, SSH üzerinden herhangi bir komutu etkinleştirmeyi / devre dışı bırakmayı (örn. SCP, SFTP, rsync, vb.), kullanıcının komutlarını günlüğe kaydetmeyi, zamanlama kısıtlamasını uygulamayı, ve dahası.

[1]: http://lshell.ghantoos.org/ Genel bakış lshell


1

Genellikle bu tür kısıtlamaları uygulama şeklim, birkaç koşulun karşılanmasını gerektirir, aksi takdirde kısıtlama kolayca atlatılabilir:

  • Kullanıcı wheelgruba ait değil , yalnızca yetkili su(PAM aracılığıyla zorunlu kılındı ).
  • Kullanıcıya özel olarak işaret eden salt okunur bir şekilde güvenli bir şekilde verilir , bu dizin basit yardımcı programlara bağlantılar içerir:rbashPATH~/bin~/bin/

    $ ll ~/bin
    total 0
    lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear*
    lrwxrwxrwx. 1 root dawud  7 Sep 17 08:58 df -> /bin/df*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep*
    lrwxrwxrwx. 1 root dawud  8 Sep 17 08:58 env -> /bin/env*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep*
    lrwxrwxrwx. 1 root dawud  9 Sep 17 08:58 grep -> /bin/grep*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 rvim -> /usr/bin/rvim*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo*
    lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail*
    lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
    
  • Kullanıcı kısıtlı, salt okunur bir ortam verilir (gibi şeyler düşünmek LESSSECURE, TMOUT, HISTFILEdeğişkenler).

  • kullanıcı SELinux kullanıcısıyla eşlenir staff_uve komutları gerektiği gibi diğer kullanıcı gibi yürütme hakları verilir sudo.
  • kullanıcı var /home, /tmpve muhtemelen /var/tmpyoluyla polyinstantiated edilir /etc/security/namespace.conf:

    /tmp       /tmp/.inst/tmp.inst-$USER-     tmpdir:create   root
    /var/tmp   /tmp/.inst/var-tmp.inst-$USER- tmpdir:create   root
    $HOME      $HOME/$USER.inst/              tmpdir:create   root
    

    Ayrıca, /etc/security/namespace.inittüm iskelet dosyalarını kullanıcı için salt okunur yapar ve sahip olunur root.

Bu yolla $USER, kendi adına herhangi bir komutu ( yukarıda açıklandığı gibi ~/binsağlanan özel dizindeki bir bağlantı aracılığıyla /etc/skel), diğer kullanıcı adına (üzerinden sudo) veya hiçbiri yerine getirip getiremeyeceğini seçebilirsiniz .


0

Evet, sadece bu komutların izinlerini değiştirin.

Gereksinimlerinize uygun davranan bir kabuk komutu yazarak daha iyi bir dövüş şansınız olabilir.

Linux'ta normal kullanıcılar için varsayılan izinlere uygun olmayan nedir?

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.