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-29
Linux sisteminde bir terminal penceresi.
Fatmawati Achmad Zaenuri/Shutterstock

Sı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.
Reklamcılık

-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 

Reklamcılık

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 

Reklamcılık

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.

Reklamcılık

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.

Reklamcılık

$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.

Reklamcılık

İ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.