Bir Linux Kullanıcısının Yapabileceklerini Sınırlamak için Kısıtlı Kabuk Nasıl Kullanılır
Yayınlanan: 2022-01-29Sınırlı bir kabuk, bir kullanıcı hesabının Linux'ta yapabileceklerini sınırlar. Kısıtlı bir kullanıcı dizinini değiştiremez ve hangi komutlara erişebileceğini siz kontrol edersiniz. Linux'ta kısıtlı bir kabuğun nasıl kurulacağı aşağıda açıklanmıştır.
Kısıtlı Kabuklar
Kısıtlanmış bir kabuk, farklı bir kabuk değildir. Standart bir kabuğun farklı bir modudur. Bash, Korn, Fish ve diğer mermilerin tümü kısıtlı mermi modunda başlatılabilir. Bu makalede Bash'i kullanacağız, ancak aynı ilkeler diğer kabuklar için de geçerlidir.
Kısıtlanmış mermiler, standart kabuğunuzu kullanmanın başka bir yolu olduğundan, kurulumları kolaydır. Yüklenecek bir şey yok ve Linux'un olduğu her yerde kullanılabilirler.
Kısıtlanmış kabuklar, komut dosyalarına da uygulanabilir. Bu, yanlış yazılmış olmaları durumunda neden olabilecekleri herhangi bir hasarın kendi kısıtlı dünyalarının sınırlarıyla sınırlı olmasını ve tüm bilgisayarınıza erişimlerinin olmamasını sağlar.
Yine de, sınırlı mermilerin tamamen kaçışa dayanıklı olmadığını unutmayın. Yeterli bilgiye sahip biri kısıtlı bir kabuktan kaçabilir. Sıradan bir kullanıcıya güvenli sınırlar koymak için harikadırlar, ancak bir üretim sisteminde herhangi bir gerçek dünya güvenliği için kısıtlı kabuklara güvenmeyin.
İLGİLİ: Bash, Zsh ve Diğer Linux Kabukları Arasındaki Fark Nedir?
Kısıtlı Bash
Bash'i kısıtlı bir kabuk olarak çalıştırdığınızda, kullanıcının bazı yetenekleri onlardan kaldırılır. Özellikle, kullanıcı şunları yapamaz :
- Çalışma dizinini değiştirmek için
cd
kullanın. -
$PATH
,$SHELL
,$BASH_ENV
veya$ENV
çevresel değişkenlerinin değerlerini değiştirin (ancak mevcut değerleri okuyabilirler). -
$SHELLOPTS
kabuk çevre seçeneklerini okuyun veya değiştirin. - Bir komutun çıktısını yeniden yönlendirin.
- Onları bulmak için bir yol gerektiren komutları çağırın. Yani, içinde bir veya daha fazla eğik çizgi “
/
” olan bir komut veremezsiniz. - Kabuk için farklı bir işlemi değiştirmek için
exec
. - Bir komut dosyasındaki kısıtlanmış özelliklerden herhangi birini kullanın.
-r
(sınırlı) seçeneğini kullanarak kısıtlı bir Bash kabuğunu çağırabilirsiniz. Çalışma dizinini değiştirmek gibi basit bir görevi yapmaya çalışmak yasaktır. Kısa ve öz bir mesaj size cd
kısıtlı olduğunu söyler.
bash -r
cd Belgeleri
Bash kabuğu, "bash" yerine "rbash" kullanılarak ne zaman çağrıldığını da algılayabilir. Bu da onun kısıtlı bir kabuk olarak başlamasına neden olur. Bu, belirli bir kullanıcı için yakında kullanacağımız varsayılan kabuğu ayarlamak için uygun bir yol sağlar.
Ubuntu üzerinde rbash
dosyalarını aramak için whereis
komutunu kullanırsak, yürütülebilir dosyanın “usr/bin” dizininde olduğunu görürüz. Man sayfası “/usr/share/man/man1” dizinindedir.
ls
komutunu -l
(uzun) seçeneğiyle kullanmak, rbash
aslında bash
ile sembolik bir bağlantı olduğunu ortaya çıkarır.
nerede rbash
ls -l /usr/bin/rbash
Manjaro ve Fedora'da rbash
sembolik bağının yaratılması gerekiyordu. Bu, her iki dağıtımda da çalışır:
nerede rbash
sudo ln -s /bin/bash /bin/rbash
nerede rbash
whereis
komutunu ikinci kez kullandığımızda, “/usr/bin” dizininde rbash
bulur.
Kullanıcıyı Kısıtlama
“Minnie” adında yeni bir kullanıcı hesabı oluşturalım. useradd
komutunun -s
(kabuk) seçeneğini kullanarak onların kabuğunu kısıtlı kabuk olarak ayarlayacağız. Ayrıca passwd
komutunu kullanarak hesabın şifresini belirleyeceğiz ve onlar için bir ana klasör oluşturacağız.
mkdir
komutundaki -p
(ebeveynler) bayrağı, mkdir
hedef dizini ve oluşturması gereken tüm üst dizinleri oluşturmasını söyler. Yani “/home/minnie/bin” dizini oluşturarak aynı zamanda “/home/minnie” dizinini de oluşturuyoruz.
sudo useradd minnie -s /bin/rbash
sudo şifresi minnie
sudo mkdir -p /home/minnie/bin
Minnie giriş yaptığında, kısıtlı bir kabukta çalışıyor olacak.
CD
Bir eğik çizgi " /
" içermesi gereken komutları çalıştıramaz:
/usr/bin/ping
Ancak yine de yolda bulunan komutları yürütebilir.
ping atmak
Beklediğiniz davranış bu değil ve kesinlikle istediğimiz de bu değil. Kısıtlamaları daha da sıkılaştırmak için, minnie'nin kabuğunun komutları aramak için kullanacağı yolu değiştirmemiz gerekiyor.
Kısıtlamaları Sıkıştırmak
Minnie'nin ana dizini “/home/minnie” oluşturduğumuzda, bir “/home/minnie/bin” dizini de oluşturduk. Bu dizinin devreye girdiği yer burasıdır.
Minnie'nin “.bash_profile” dosyasını düzenleyeceğiz ve yolunu sadece o dizine işaret edecek şekilde ayarlayacağız. Ayrıca minnie'nin “.bash_profile” dosyasını sadece root'un düzenleyebileceği şekilde kısıtlayacağız. Bu, başka hiçbir kullanıcının bu dosyayı düzenleyemediği ve yolunu değiştiremeyeceği anlamına gelir.
sudo gedit /home/minnie/.bash_profile
Ya mevcut “PATH=” öğesini düzenleyin ya da aşağıdaki satırı ekleyin:
YOL=$GİRİŞ/bin
Dosya 'yı kaydet. chown
komutunu kullanarak dosyanın sahibini root olarak değiştireceğiz ve chmod
komutunu kullanarak dosya izinlerini değiştireceğiz. Dosyayı yalnızca kök kullanıcı düzenleyebilir.
sudo chown root:root /home/minnie/.bash_profile
sudo chmod 755 /home/minnie/.bash_profile
ls -l /home/minnie/.bash_profile
Kullanıcı minnie bir sonraki oturum açtığında, yolu tek bir klasöre işaret ediyor.
Kısıtlı kullanıcı minnie'miz yalnızca echo
, alias
ve logout
gibi Bash yerleşik komutlarını kullanabilir. ls
bile kullanamıyor!
ls
Yararlı bir şey yapabilmelerini istiyorsak, boğazımızı biraz gevşetmemiz gerekecek. Minnie'nin “bin” dizininden, minnie'nin kullanabilmesini istediğimiz komutlara bazı sembolik bağlantılar oluşturacağız.
sudo ln -s /bin/ls /home/minnie/bin
sudo ln -s /bin/top /home/minnie/bin
sudo ln -s /bin/uptime /home/minnie/bin
sudo ln -s /bin/pinky /home/minnie/bin
Minnie bir sonraki oturum açtığında, Bash'in yerleşik komutlarını ve bağlantılı komutları kullanabileceğini görecek.
ls
serçe davet
çalışma süresi
Mevcut Kullanıcıları Kısıtlama
Minnie'yi yeni bir kullanıcı olarak oluşturduk. Mevcut bir kullanıcının kabuğunu değiştirmek için usermod
komutunun -s
(kabuk) seçeneğini kullanabiliriz.
sudo usermod -s /bin/rbash mary
Hangi kabuğun bir kullanıcının varsayılan kabuğu olarak ayarlandığını hızlı bir şekilde görmek için “/etc/passwd” dosyasındaki less
komutunu kullanabilirsiniz.
daha az /etc/passwd
Mary kullanıcısının bir sonraki oturum açtığında kısıtlı kabuğu kullanacağını görebiliriz.
$PATH
ortam değişkenlerini kısıtlamak için diğer değişiklikleri uygulamayı ve mary kullanıcısının yürütmesini istediğiniz komutları ayarlamayı unutmayın.
Komut Dosyalarını Kısıtlama
Normal, sınırsız bir kullanıcı, kısıtlı bir kabukta yürütülen komut dosyalarını başlatabilir. Aşağıdaki satırları kopyalayın ve bir düzenleyiciye yapıştırın. Dosyayı “restricted.sh” olarak kaydedin ve düzenleyiciyi kapatın.
#!/bin/bash # betik normal Bash kabuğunda başlar echo "## Sınırsız modda! ##" Eko echo "Geçerli dizin: `pwd`" echo "Dizin değiştiriliyor" cd /usr/paylaşım echo "Artık dizinde: `pwd`" echo "Ana dizine geçiliyor" cd ~ echo "Artık dizinde: `pwd`" # Kısıtlı modu ayarlama -r'yi ayarla Eko echo "## Kısıtlı modda! ##" Eko echo "Geçerli dizin: `pwd`" echo "Dizin /home/ olarak değiştiriliyor" cd /ev echo "Hala dizinde: `pwd`" Eko echo "Başka bir kabuk başlatmaya çalışıyorum" /bin/bash Eko echo "Komut çıktısını yeniden yönlendirmeye çalışılıyor" ls -l $HOME > my_files.txt kedi my_files.txt Eko 0 çıkışı
Komut dosyasını çalıştırılabilir hale getirmek için chmod
komutunu +x
(yürüt) bayrağıyla birlikte kullanmamız gerekiyor.
chmod +x kısıtlı.sh
Komut dosyasının ilk kısmı normal bir kabukta çalışır.
./kısıtlı.sh
Komut dosyasının ikinci kısmı ("set -r" satırından sonraki kısım) kısıtlı bir kabukta çalışır.
Girişilen eylemlerin hiçbiri komut dosyasının kısıtlı bölümünde başarılı olmaz.
İlk satıra -r
eklenerek bir betiğin tamamı kısıtlı bir kabukta çalıştırılabilir:
!#/bin/bash -r
Houdini'yi hatırla
Kısıtlı mermiler faydalıdır, ancak tamamen yanılmaz değildir. Yeterince yetenekli bir kullanıcı bunlardan kaçabilir. Ancak akıllıca kullanıldıklarında, belirli bir hesap için bir dizi sınırlama oluşturmanın yararlı bir yoludur.