Bir dizindeki dosyalara x-izni olmadan mı erişiyorsunuz?


19

Yürütme izninin dizinler için ne anlama geldiğini anlamakta biraz sorun yaşıyorum. Dizin içindeki şeyler kullanıcıya belirli haklar verse bile, bir kullanıcının x-hakları olmayan bir dizinde hiçbir şeye erişilemediğini doğru anladım mı?

Veya kullanıcı dizindeki şeylere doğrudan erişebilecek mi, ancak dizinde ne olduğunu listeleyemez mi?

(Gerçekten anlamaya çalıştığım, bir dizinin, x-izni yoksa diğer kullanıcıların erişiminden ne kadar güvenli olduğudur.)

Yanıtlar:


20

dizin için x bit arama biti olarak da adlandırılır. Aslında, klasörün içinde listelenen dosyaların düğümlerine erişmenizi sağlar. Bu nedenle /home/user/foo/bar.txt dosyasına erişmek istiyorsanız, bar.txt dosyasının her atasında arama erişiminizin olması gerekir

Sayfadan alıntı

Dizinler normal dosyalarla aynı şekilde kullanılmadığından, izinler biraz (ancak yalnızca biraz) farklı çalışır. Bir dizindeki dosyaları listeleme girişimi, dizin için okuma izni gerektirir, ancak içindeki dosyalar için değil. Bir dizine dosya ekleme, dizindeki bir dosyayı silme veya bir dosyayı yeniden adlandırma girişimlerinin tümü dizin için yazma izni gerektirir, ancak (belki şaşırtıcı bir şekilde) içindeki dosyalar için değil. Yürütme izni dizinler için geçerli değildir (bir dizin program da olamaz). Ancak bu izin biti dizinler için başka amaçlarla yeniden kullanılır.

Bir dizine cd yazabilmek için bir dizinde yürütme izni gerekir (yani, bir dizini geçerli çalışma dizininiz yapmak için).

İçindeki dosyaların inode bilgilerine erişmek için bir dizinde yürütme gereklidir. İçindeki dosyaların düğümlerini okumak için bir dizinde arama yapmak için buna ihtiyacınız vardır. Bu nedenle, bir dizindeki yürütme iznine genellikle arama izni denir.

Birçok yaygın durumda arama izni gerekir. Cat / home / user / foo komutunu düşünün. Bu komut açıkça foo dosyası için okuma izni gerektirir. Ancak, /, / home ve / home / user dizinlerinde arama izniniz yoksa, kedi foo'nun inode'unu bulamaz ve bu nedenle okuyamaz! Herhangi bir dosyanın (veya dizinin) inode'una erişmek için her ata dizinde arama iznine ihtiyacınız vardır ve inode'a erişemediğiniz sürece bir dosyayı okuyamazsınız.

Lütfen daha fazla dosya izin dizini bölümünden okuyun.

Güncelleme: Leo çok iyi bir soru sordu. Eğer inode'u bilirsek, x biti ayarlanmamış bir dizinden bir dosyaya erişebilir miyiz? İnanıyorum ki, bunu yapamamalıyız. Ben c programı tarafından test etmedi ama yerine onaylamak için bazı kullanışlı bash komutları kullanılır.

user@user-desktop:~/test$ ls -lart
total 12
drwxr-xr-x 49 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x  3 user user 4096 2011-11-30 22:37 .
drwxr-xr-x  2 user user 4096 2011-11-30 22:38 level1
user@user-desktop:~/test$ ls -lart level1/
total 12
drwxr-xr-x 3 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x 2 user user 4096 2011-11-30 22:38 .
-rw-r--r-- 1 user user    8 2011-11-30 22:38 file1
user@user-desktop:~/test$ stat level1
  File: `level1'
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 808h/2056d  Inode: 95494       Links: 2
Access: (0755/drwxr-xr-x)  Uid: ( 1000/    user)   Gid: ( 1000/    user)
Access: 2011-11-30 22:46:16.576702105 +0530
Modify: 2011-11-30 22:38:12.386701913 +0530
Change: 2011-11-30 22:46:08.876702102 +0530
user@user-desktop:~/test$ stat level1/file1 
  File: `level1/file1'
  Size: 8           Blocks: 8          IO Block: 4096   regular file
Device: 808h/2056d  Inode: 60775       Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/    user)   Gid: ( 1000/    user)
Access: 2011-11-30 22:38:19.846701917 +0530
Modify: 2011-11-30 22:38:16.366701915 +0530
Change: 2011-11-30 22:38:16.366701915 +0530
user@user-desktop:~/test$ chmod -x level1
user@user-desktop:~/test$ stat level1/file1 
stat: cannot stat `level1/file1': Permission denied
user@user-desktop:~/test$ ls -lart level1/
ls: cannot access level1/..: Permission denied
ls: cannot access level1/.: Permission denied
ls: cannot access level1/file1: Permission denied
total 0
-????????? ? ? ? ?                ? file1
d????????? ? ? ? ?                ? ..
d????????? ? ? ? ?                ? .
user@user-desktop:~/test$ cat level1/file1
cat: level1/file1: Permission denied
user@user-desktop:~/test$ find . -inum 95494
./level1
user@user-desktop:~/test$ find . -inum 60775
user@user-desktop:~/test$ find ./level -inum 60775
find: `./level': No such file or directory
user@user-desktop:~/test$ find ./level1 -inum 60775

2
Yani, arama hakları olmayan bir dizin içinde bir dosya / dizinin inode numarası varsa, izinleri izin verdiği sürece ona erişmek mümkün olacak? (Herhalde stat yapmadan inode numarasını almak oldukça zordur.)
Leo

@Leo inanıyorum, bunu yapamamalıyız. Cevabı güncelledim. Küçük bir c sapınız varsa, lütfen kontrol edin ve bize bildirin.
Amey Jah

1
@AmeyJah, Aslında, yapabilirsin. Bir dosyayı izninizin olduğu başka bir dizine zorla bağladığınızda ne olacağını düşünün. Aynı inode, ancak daha sonra okuyabilirsiniz. Başka bir deyişle, okuma izni, inode'un ait olabileceği tüm klasörleri arayan ve x bitine sahip olup olmadıklarını gören sisteme bağlı değildir. Büyük cevap olsa. Çok teşekkürler.
user1477

@AmeyJah ls , stat vb stat (2) vb . Kullanın. Şimdiye kadar bilmediğiniz durumda. Bir C programı yazabilirim ama testiniz programın göstereceği her şeyi yapar, ancak daha fazla şey yapabileceğinden emin olur, aynıdır: sistem çağrılarını kullanır (bölüm 2). Kütüphane çağrıları (bölüm 3), sistem çağrılarından daha yüksektir ancak hiçbir şeyi değiştirmez (örneğin, remove (3) dizinler için rmdir (2) kullanır ve dosyalar için bağlantıyı kaldır (2)).
Pryftan

5

Dizinler istediğiniz için:

okuma anlamına gelir: içeriği okumak, yani ls ile listeleme.

yazma demek: yönetmen yazmak. yani dosya veya alt dizin oluşturmak.

execute: bu dizine girin.

okuma ve yürütme izinleri dizinler için biraz zor olabilir.

Örneğin, okuma izniniz varsa ancak yürütmüyorsanız, dizinin içeriğini listeleyebilirsiniz, ancak dizinin içine bırakamazsınız. Ayrıca, adlarını bilmenize rağmen belirli dosyaları veya dizinleri listeleyemezsiniz.

Yürütme iznine sahipseniz ancak okumadıysanız, izin verebilirsiniz ancak dosyaları doğrudan listeleyemezsiniz. Ancak, dosyaların veya dizinlerin adlarını biliyorsanız bunları listeleyebilirsiniz.


2
Eğer okuma izniniz var ama yürütmüyorsanız, dizinin içeriğini listeleyebilir (ls) ancak içindeki dosyalara erişemezsiniz (cat). Yürütme iznine sahipseniz ancak okumuyorsanız ve dosyaların adlarını biliyorsanız bunlara erişebilirsiniz (cat).
dash17291

2

Dizinlerde yürütme izni şu anlama gelir:

Bu dizine cd yazma ve bu dizindeki dosyalara erişme yeteneği.

Dizininizde xdoğru hakkınız yoksa şunları yapamazsınız:

  • (Yani: dizine girin cd)
  • Bu dizindeki herhangi bir dosyaya erişilemiyor (adını biliyor olsanız bile).

Misal:

$ ls -ld testdir
drw------- 2 xxxxxx xxxxxx 14 2011-11-29 19:38 testdir

$ cd testdir
bash: cd: testdir: Permission denied

$ cat testdir/a
cat: testdir/a: Permission denied

$ chmod 700 testdir
$ cat testdir/a
Some text.

Konuyla ilgili iyi bir tanıtım için Linux Dosya İzni Karışıklık pt 2'yi okuyun .

xİznin engellemediği tek şey, o dizindeki dosyaların adlarına erişmektir .

Misal:

$ ls -ld testdir
drw------- 2 xxxxxx xxxxxx 14 2011-11-29 19:38 testdir

$ ls testdir
ls: cannot access testdir/a: Permission denied
ls: cannot access testdir/b: Permission denied
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.