Yanıtlar:
İlk önce ihtiyacınızı yeniden değerlendirin. Çözmeye çalıştığınız sorun nedir? Neden kullanıcıların ev dizinlerini terk etmelerini önlemek istiyorsunuz? Diğer kullanıcıların giriş dizinleri gibi belirli başka dizinlere girmelerini istemiyor olmanız yerine, değil mi?
Kullanıcıların ana dizinden çıkmalarını önlemek çok zordur. Aslında bu da biraz saçma (açıklama izleniyor). Kullanıcıların, girmelerini istemediğiniz dizinlere girmesini önlemek çok daha kolaydır.
Öncelikle, evet, kullanıcılara kısıtlı bir kabuk denebilir , bkz man rbash
. Bu, cd
başka yerlere girmelerini engeller , ancak yalnızca bu kabuğun içinde. Kullanıcı başlarsa vi
veya nano
(veya bir dosyayı açmaya muktedir herhangi bir başka programı) onlar yine açık dosyaları herhangi bir yere sistemde. Nitekim, kısıtlanmış bir kabuk örneğin cat /etc/passwd
;
Bir sonraki adım bir kök hapishane. Topluluk wiki ve bu soruda daha fazla bilgi . Bir kök hapishanesi, kullanıcıları kasıtlı olarak koyduğunuz dosya ve komutlardan başka hiçbir şeye erişemedikleri duvarlı bir bahçenin içine kilitlese de, kök hapishaneler gerçekten kullanıcılardan ziyade güvenilmeyen yazılımları izole etmeye yöneliktir . Özellikle, yüksek ayrıcalıklarla çalışması gereken yazılımlar içindir - dolayısıyla bir kök hapishanesidir.
Diğer taraftan, kullanıcılar güvenilirdir : yüksek ayrıcalıklara sahip olmadan kimliklerini doğrulamak ve çalıştırmak zorunda kalmışlardır . Bu nedenle, dosya izinleri, sahip olmadıkları dosyaları değiştirmekten ve görmemesi gereken şeyleri görmekten alıkoymak için yeterlidir. Kullanıcıların bir dosyanın içeriğini okumasını önlemek için, dünyadaki okunabilirliğini ile kaldırın chmod o-r FILE
. Kullanıcıları bir dizinin dışında tutmak için dünya ile erişilemez duruma getirin chmod o-rwx DIR
.
Dünyada okunabilirlik yine de iyi bir sebepten ötürü varsayılandır: kullanıcılar aslında dosya sistemindeki malzemelerin çoğuna ihtiyaç duyarlar . Kullanıcıları kendi evlerinde kilitlemeyin, çünkü dışarıda sırlar vardır.
Kullanıcıları kendi dizinlerinde kilitlemek neden biraz saçma
Yararlı bir şey yapmak için kullanıcıların komutlara ve uygulamalara erişmesi gerekir. Bunlar /bin
ve gibi dizinlerdedir /usr/bin
, bu yüzden ihtiyaç duydukları tüm komutları oradan ev dizinlerine kopyalamazsanız, kullanıcıların /bin
ve erişimine ihtiyaçları olacaktır /usr/bin
. Ama bu sadece başlangıç. Uygulamalar, /usr/lib
ve altındaki kütüphanelere ihtiyaç duyarlar ve /lib
bunlar içinde bulunan sistem kaynaklarına /dev
ve içindeki /etc
ve yapılandırma dosyalarına erişebilir /usr/share
.
Bu sadece salt okunur bölümdü. Uygulamalar ayrıca isteyecek /tmp
ve sık sık /var
yazmak isteyecektir . Bu nedenle, bir kullanıcıyı ana dizini dahilinde sınırlamak istiyorsanız, ona çok fazla kopyalamak zorunda kalacaksınız. Aslında, hemen hemen tüm bir temel dosya sistemi - zaten sahip olduğunuz, yer almaktadır /
.
Ben kullanıcıya erişim sağlamak için gerekli sam
üzerindeki /var/xyz
diğer klasörlere sadece ve blok listeleme içeriğini içinde/var/
Aşağıdaki komut dizisini kullandım:
setfacl -R -m user:sam:--- /var/
setfacl -m user:sam:rx /var/
setfacl -R -m user:sam:rwx /var/xyz/
Böylece kullanıcı, altında listelenen dizinleri görebilir, /var/
ancak alt dizinleri altındaki içerikleri göremez /var/xyz
.
Diğer dizinlere, özellikle diğer kullanıcıların ev dizinlerine erişimi kısıtlamanın yanı sıra, bir kullanıcının ll /home
sistemdeki diğer kullanıcıların adlarını da görmesini ve görmesini istemedim .
Bunu önlemek için kök çalıştırma chmod 701 /home
. Bu, /home
dizinin kendisinin elbette "okuma / yazma / çalıştırma" olmasını sağlar, ancak yalnızca herkese "çalıştırma" yapar. /home
hala erişilebilir cd
, ancak kullanıcılar içeriklerini okuyamıyor - diğer kullanıcıların ana klasörleri ve dolayısıyla kullanıcı adları.