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.
ls
komut değil !
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.
ls
komut değil !
Yanıtlar:
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.
İstediğinizi tam olarak yapabilmek için yerinde olması gereken üç şey vardır:
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-bob
ayarlayı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/tmp
aptalca 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 /tmp
ve bu izin hataları kullanılamaz. Onlar nasılsa root parolasını bulmak bile, için AppArmor profili /bin/bash-bob
hala onlar sonra bile geçerli olacaktır su
çünkü yukarı su
ve bash
süreci yumurtlar çocuklarıdır /bin/bash-bob
.
Zor kısmı bu AppArmor profilini oluşturmaktır.
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.
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.
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.
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/rbash
iç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 $PATH
izin verilen tüm ikili / komut dosyalarının depolandığı bir dizine ayarlayın .
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.
[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
Genellikle bu tür kısıtlamaları uygulama şeklim, birkaç koşulun karşılanmasını gerektirir, aksi takdirde kısıtlama kolayca atlatılabilir:
wheel
gruba 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:rbash
PATH
~/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
, HISTFILE
değişkenler).
staff_u
ve komutları gerektiği gibi diğer kullanıcı gibi yürütme hakları verilir sudo
.kullanıcı var /home
, /tmp
ve muhtemelen /var/tmp
yoluyla 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.init
tü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 ~/bin
sağ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 .