Özel bir dizin altında ortak dizin oluşturabilir miyim?


20

Sunucuda 700 izinli kişisel bir klasör / a / b var. Başkalarının / a / b içindeki içeriği listelemesini istemiyorum. / A'nın sahibi köküdür.

Şimdi / a / b / c dizininin tüm yetkilerini tüm kullanıcılara açmam gerekiyor.

/ A / b / c'nin iznini 777 olarak değiştirdim, ancak diğerleri için hala erişilemiyor.


2
Dizin geçişine izin vermek için 'yürütme bitini' ayarlamanız gerekir (/ a ve / a / b'de geçiş yapmak için), bu sorununuzu çözebilir:chmod +x /a/b
ex0ns

Yanıtlar:


34

Yapabilirsin. Sadece /a/bdizindeki yürütülebilir biti ayarlamanız gerekir . Bu, herhangi bir şeyi görmeyi engelleyecektir b, ancak doğrudan giderseniz her şeyi yine de yapabilirsiniz a/b/c.

% mkdir -p a/b/c
% chmod 711 a/b
% sudo chown root a/b
% ll a/b
  ls: cannot open directory a/b: Permission denied
% touch a/b/c/this.txt
% ls a/b/c
  this.txt

Diğerlerinin içeriğini listeleyemese de /a/b, dosyanın adını tahmin ederlerse o dizindeki dosyalara erişebileceğini unutmayın.

% echo hello | sudo tee a/b/f
% cat a/b/f
hello
% cat a/b/doesntexist
cat: a/b/doesntexist: No such file or directory

Bu nedenle, bdizindeki tüm diğer dosyalarda / dizinlerde uygun izinleri (grup / dünya yok) koruduğunuzdan emin olun , çünkü bu uyarıdan kaçınacaktır.


Çalıştırılabilir biti ayarlamaya alternatif olarak, başka bir yerde bulunan bir / b / c'ye sabit bir bağlantı da sağlayabilir misiniz?
Moby Disk

2
@MobyDisk Bir dizine sabit bağlantı veremezsiniz.
Michael Hampton


3
Bunun için bazı önemli uyarılar olduğunu unutmayın. Dosyalardan herhangi birinin a/bsıfır olmayan grup / diğer izinleri varsa ve bir rakip adlarını biliyorsa veya tahmin edebiliyorsa, bahsedilen rakip bu dosyalarla etkileşime girebilir.
Kevin

Doğru @Kevin, altındaki her şeyin izinleri, boluşturmadan önce buna karşı korumaya izin vermelidir cve daha sonra bizinlerin yalnızca sahip için güvenli olduğundan emin olmak için diğer öğeler doldurulduğunda özen gösterilmelidir .
stevieb

9

Bu izinlerle hedefinize ulaşamazsınız. Dizine erişmek için c, diğer tüm kullanıcıların bbu dizin için yürütme izni vererek yapılan dizinde geçiş yapmasına izin vermelisiniz . İle /a/bmoda 711 ayarlı, sen dizin geçişi verilmesi ancak okuma ve yazma inkar beri istediğini elde edebilirsiniz. Ancak, diğer kullanıcılar dosyaları listeleyemese de /a/b, adı tahmin ederse ve dosyaların yeterince açık izinlere sahip olduklarında dosyalara erişebileceğini unutmayın.


3

Bir kullanıcı erişemezse /a/b, altındaki herhangi bir dosyaya erişemez /a/b/c. /a/b/cDizin geçişi durduğu için üzerindeki izinler önemsiz /a/b.

İstediğiniz tek şey dizinin /a/blistelenmesini önlemekse, ancak kullanıcıların /a/bbir dosya adı tahmin etmeleri durumunda dosyalara erişme konusunda sorun yaşarsanız, /a/byürütülebilir ancak okunamaz hale getirebilirsiniz . Bir dizinde, okuma izni yalnızca dizin içeriğini listelemeyi denetlerken, yürütme izni bu dizinin girdilerine erişimi denetler.

# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# echo 'hello' >/a/b/existingfile
# su bob -c 'ls -l /a/b'
ls: /a/b: Permission denied
# su bob -c 'cat /a/b/nosuchfile'
cat: /a/b/nosuchfile: No such file or directory
# su bob -c 'cat /a/b/existingfile'
hello
# su bob -c 'ls -l /a/b/c'
 contents of /a/b/

Diğer kullanıcıların, /a/bdışındaki dosyalara erişmesini istemiyorsanız , bağlama bağlaması aracılığıyla başka bir görünümle /a/b/caçığa çıkarabilirsiniz ./a/b/c

# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# mkdir /c
# mount --bind /a/b/c /c
# su bob -c 'ls /a/b/c'
ls: /a/b/c: Permission denied
# su bob -c 'ls -l /c'
 contents of /a/b/
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.