+ X izinli dizin, onsuz ebeveynler. Bu ne zaman faydalı olur?


11

Diyelim ki folderşu yolda bir klasör var :

my_path = /a/b/c/d/e/folder

ve filebu klasörde adı verilen bir dosya .

Sonra / a / altındaki grup izinlerini kaldırmak için bu komutu çalıştırdığımı varsayalım

> chmod g-rwx -R /a/

Şimdi, vermek demek +rxiçin izinleri folder:

> chmod g+rx /a/b/c/d/e/folder

Sonra, grubumdaki ikinci bir kullanıcı çalışırsa:

> ls /a/b/c/d/e/folder

veya

> cat /a/b/c/d/e/folder/file 

izin hataları alıyor ve anladığım kadarıyla bunun g+xtüm ebeveynlerine erişim sağlamam gerektiği için folder. Öyleyse sorum şu, ebeveyni olmayan bir dizine ne zaman veya neden+x izin vermek yararlı olur?

Teşekkürler


1
Kaçtığına emin misin chmod +grx -R /a/b/c/d/e/folder? Yanlış, onu yürütmek için doğru yol:chmod g+rx -R /a/b/c/d/e/folder
nozimica

3
Bu soruya doğrudan cevap vermez, ancak önerilen arka plan okuması: dizin izinlerinin açıklaması
Gilles 'SO- kötü olmayı bırak'

Yanıtlar:


6

Çoğu zaman, bir dizinin tamamına (alt dizini de dahil) erişimi ve kullanımını engellemek istiyorsanız, dizini kaldırarak (özyinelemesiz olarak) yapabilirsiniz -x. Bu nedenle, alt dizinleri +xherhangi bir zarar vermeden bırakmış olabilirsiniz .

Alt dizinlerdeki izinleri tutmak birkaç nedenden dolayı yararlı olabilir (özellikle -xherkes için geçerli değilse, ancak en az bir kullanıcı yine de bir şeyler yapabilir).

Örneğin, bu dizin yapısındaki izinlerde başka değişiklikler yaparken, kap dizininin kullanımını geçici olarak engelleyebilir ve ardından tek bir işlemde ( +xen üst düzey dizine vererek) tüm ağaca erişimi yeniden etkinleştirebilirsiniz .

Ayrıca, bir komut dosyasının (sahip tarafından çalıştırılması zorunlu değildir) dizin ağacını geçici bir konumda yedeklediği (başkaları tarafından okunmaması gereken) ve her şeyi tar dosyasına yerleştirerek, izin ayarlarını koruyarak da karşılaşabilirsiniz. dizinin içeriği.


7

Bir dizindeki cd'ye erişmek veya bir dosyaya erişmek için üst dizinlerin hepsinde + x izinlerine ihtiyacınız vardır.

Dosyaları listelemek için dizinlerde + r izinlerine ihtiyacınız vardır. İşte size bir örnek:

bazı şeyleri ayarlamak için şu komutları verebilirsiniz:

mkdir -p /a/b

touch /a/b/{file1,file2}

cd /a

echo 1 > b/file1

echo 2 > b/file2

Haksız:

pwd
/a$ pwd
/a
/a$ chmod -rwx b
/a$ ls -l
d---------  4 mike  admin  136 Jun  1 14:44 b/
/a$ ls -l b/
ls: : Permission denied
/a$ cat b/file1
cat: b/file1: Permission denied

Yalnızca yürütme ile

/a$ chmod +x b
/a$ ls -l
total 0
d--x--x--x  4 mike  admin  136 Jun  1 14:44 b/
/a$ ls -l b
ls: b: Permission denied
/a$ cat b/file1
a
/a$ ls -l b/file1
-rw-r--r--  1 mike  admin  2 Jun  1 14:43 b/file1

Şimdi okuma ile:

/a$ chmod +r b/
/a$ ls -l
/a$ ls -l
total 0
dr-xr-xr-x  4 mike  admin  136 Jun  1 14:44 b/
/a$ ls -l b/
total 16
-rw-r--r--  1 mike  admin  2 Jun  1 14:43 file1
-rw-r--r--  1 mike  admin  2 Jun  1 14:43 file2

Bu bölüm biraz kafa karıştırıcı olabilir, ancak sadece okuma ve yürütme olmadan, dizindeki dosyaları listeleyebilirsiniz, ancak inodes meta verilerini okuyamazsınız, böylece izin reddedilir, ancak yine de dosya listesini görebilirsiniz aşağıdaki gibi bir dizinde ..

/a$ chmod -x b/
/a$ ls -l
total 0
dr--r--r--  4 mike  admin  136 Jun  1 14:44 b/
/a$ ls -l b
ls: file1: Permission denied
ls: file2: Permission denied

2
Teşekkürler @skrewler. " Düşündüğüm şey budur , herhangi bir ve tüm üst dizinlerde cd veya bir dizindeki bir dosyaya erişmek için + x izinlerine ihtiyacınız var" dediniz . Sorum o zaman: neden hiç kimin bir dizine + x izni verecek veliler do not + x iznine sahip?
Amelio Vazquez-Reina

Düşünebileceğim tek şey, doğrudan orada bir bağlama bağlama yapmak, yürütme izinleri olmadan üst dizinleri atlamak istiyorsanız. Bu mantıklı gelmediyse bir örnek göstereceğim.
skrewler

Yukarıdakiler daha açık olmalıydı. Tüm üst dizinlerin izinlerine sahip bir kök kullanıcı, diğer kullanıcıların dizine erişmesine izin vermek için bu bağlama bağını yapabilir. Yalnızca d veya e'nin global yürütme işlemine sahip olduğu / a / b / c / d / e'ye ulaşabildikleri için / mnt / d -> / a / b / c / d / e'den bir bağlama bağlantısı yapabilir ve bir kullanıcı montaj noktasına giderek. Bir dizin ağacının derinliklerinde başka bir yere ulaşılamayacak sert bir bağlantı kurmakla aynı fikirdir. Sembolik bağlantılar böyle çalışmaz, bir bağlama montajı gereklidir.
skrewler

2

+xVerdiğiniz durumda özyinelemesiz izinler kullanmak istiyorsunuz:

chmod g+x /a /a/b /a/b/c /a/b/c/d /a/b/c/d/e

(Bu, kullanıcının her bir direktör grubunun üyesi olduğunu varsayar. Aksi takdirde, bu chmod o+xtür dizinler için yapmanız gerekir .)

Bir kullanıcının ls /a/b/c/d/e/folderbaşarılı bir şekilde yapabilmesi için , yoldaki her dizinde yürütme iznine ve okuma iznine sahip olması gerekir folder.

Eğer yaptıysan

chmod g+x -R /a

işe yarayacaktır, ancak / a altındaki her dosya ve dizine grup yürütme izni vermiş olursunuz . Bu gereksizdir ve dosyalar söz konusu olduğunda muhtemelen yanlıştır.


1

Karşılaştığınız özel durumda, sorun, folderkendi grubunuzdan bir kullanıcı tarafından uygun izinlere sahip olsa bile , üst klasörlerinden herhangi birine foldero kullanıcı tarafından erişilemiyorsa, iç kısma erişin ( folderörneğinizde çağrılan ).

Eğer yürütürseniz:

chmod g-rwx -R /a/

o zaman atüm çocukları bu izne sahip olacak.

Yhou yürüttüğünde:

chmod g+rx -R /a/b/c/d/e/folder

o zaman foldertüm çocukları da bu izne sahip olacak. Ancak bu daha sonra komutla, klasörler a/, a/bve kadar bu kadar a/b/c/d/eizinlerini değiştirmez.


0

Dizinlerdeki x bit'in kaldırılması için genel durum, kullanıcıları ana dizinlerindeki kilitlemektir. Kısıtlanmış kabuklar , cdmutlak yol adlarına başvurmaya izin vermeme ve mutlak yollar kullanarak programların yürütülmesine izin vermeme seçeneğine sahiptir . Ayrıca cd ..ana dizininin üst dizinine bağlanamazlar ve böylece etkili bir şekilde kilitlenirler ve $ PATH içinde olmayan programları çalıştıramazlar.

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.