EXECUTE ve WRITE izni olmayan sadece ve sadece OKU izniyle linux kullanıcısı nasıl oluşturulur?


3

Ben kullanıcı yarattım, örneğin ronly, şimdi onlara diğer kullanıcı evlerinde olduğu gibi birkaç kullanıcı dizinine yalnızca okuma erişimi izni vermek istiyorum. abc/,xyz/,pqr/Bu ronlykullanıcıyı başkalarına koydum, bu kullanıcı ronlyiçin yukarıdaki dizinler için başkaları olacağı anlamına gelmez. Beklentiye göre çalışın ancak tek sorun, okuması gereken ancak yürütmemesi gereken abc/,xyz,pqr/bazı kabuk betiklerinin olmasıdır ronly.

Böyle kabuk komut sahip izni -rwxrw-r-- test.shkullanıcı anlamına ronlygibi kabuk komut dosyalarını yürütme gibi sadece tek yön, bu işi komut dosyalarını görebilirsiniz ancak bunları yürütmek olmamalıdır ./test.shbu verir permission deniedfakat sh test.shve /bin/sh test.shizin verebilir ronlykomut yürütmek.

Peki onları kabuk komut dosyaları çalıştırmak için kısıtlamak herhangi bir yolu var mı?

Lütfen ACL veya SElinux'u önermeyin. Bazı kısıtlamalar nedeniyle bunu etkinleştirmek istemiyorum.

Yanıtlar:


2

Doğrulamayı betiğin başına yerleştirebiliriz.

userid=`id -u -n`
#echo "$userid" ;

ownuser=`ls -l ${abosolutepath}/${your_script.sh} | awk '{print $3}'`
#echo "$ownuser" ;

if [ ! "$userid" = "$ownuser" ]; then
        echo permission denied
        exit 1
fi

Doğrulamanın üstünde, bu betiği çalıştıran kullanıcının bu betiğin sahibi ile aynı olup olmadığını kontrol eder. Kullanıcı eşleşmezse, yürütme sonlandırılır.

Bunu kendi ortamımda uyguladım ve iyi çalışıyor.


2

Genel olarak, bu mümkün değildir. Bir kabuğu çalıştırabilen herhangi bir kullanıcı okuyabildiği herhangi bir kabuk komut dosyasını da çalıştırabilir. Kabuk, terminalden gelen komutlar ile bir dosyadan gelen komutlar arasında ayrım yapmaz.

Bu yüzden muhtemelen bir çeşit sınırlı “kabuk” a ihtiyacınız olacak. Prensip olarak herhangi bir program bir giriş kabuğu olarak kullanılabilir.


2

ACL veya SELinux'u dahil etmeden bulabildiğim tek yol, betiğin başına şunu eklemektir:

if [ "$USER" = "ronly" ]; then
  echo 'Access denied'
  exit 1
fi

Bu mükemmel olmaktan uzak, çünkü:

  1. Kullanıcı ronlybetiği okuyabilir, böylece içeriği bir betiğe kendi evinde kopyalayabilir ve çalıştırabilir.
  2. Herhangi bir kullanıcı $ USER ortam değişkenini serbestçe ayarlayabilir, örneğin USER değişkenini abckısıtlamayı geçecek olan betiğe ayarlayabilir ve çalıştırabilir.

Bunu yalnızca "yanlışlıkla" yürütmeleri önlemek için yapıyorsanız , o zaman işe yarar, ancak amacınız yürütmeyi GERÇEKTEN yasaklamaksa, gerçekleştirmez.

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.