Mengakses file di direktori tanpa izin x?

19

Saya mengalami sedikit kesulitan memahami apa arti izin eksekusi untuk direktori. Apakah saya memahaminya dengan benar bahwa segala sesuatu dalam direktori yang tidak memiliki hak x oleh pengguna tidak dapat diakses bahkan jika hal-hal di dalam direktori tersebut memberikan hak khusus kepada pengguna?

Atau apakah pengguna masih memiliki akses langsung ke hal-hal di direktori, tetapi tidak bisa daftar apa yang ada di direktori?

(Apa yang sebenarnya saya coba pahami adalah seberapa aman direktori dari akses dari pengguna lain jika mereka tidak memiliki izin x untuk itu.)

Leo
sumber

Jawaban:

20

x bit untuk direktori juga disebut sebagai bit pencarian. Sebenarnya, ini memungkinkan Anda untuk mengakses file-file yang terdaftar di dalam folder. Jadi, jika Anda ingin mengakses /home/user/foo/bar.txt maka Anda harus memiliki akses pencarian pada setiap leluhur bar.txt

Mengutip dari halaman

Karena direktori tidak digunakan dengan cara yang sama seperti file biasa, izin bekerja sedikit (tetapi hanya sedikit) berbeda. Upaya daftar file dalam direktori memerlukan izin baca untuk direktori, tetapi tidak pada file dalam. Upaya untuk menambahkan file ke direktori, menghapus file dari direktori, atau mengubah nama file, semua memerlukan izin tulis untuk direktori, tetapi (mungkin mengejutkan) bukan untuk file di dalamnya. Jalankan izin tidak berlaku untuk direktori (direktori juga tidak bisa menjadi program). Tetapi bit izin itu digunakan kembali untuk direktori untuk tujuan lain.

Jalankan izin diperlukan pada direktori untuk dapat cd ke dalamnya (yaitu, untuk membuat beberapa direktori direktori kerja Anda saat ini).

Jalankan diperlukan pada direktori untuk mengakses informasi inode dari file-file di dalamnya. Anda memerlukan ini untuk mencari direktori untuk membaca inode file di dalamnya. Untuk alasan ini izin eksekusi pada direktori sering disebut izin pencarian.

Izin pencarian diperlukan dalam banyak situasi umum. Pertimbangkan perintah cat / home / user / foo. Perintah ini jelas memerlukan izin baca untuk file foo. Tetapi kecuali Anda memiliki izin pencarian pada direktori /, / home, dan / home / user, cat tidak dapat menemukan inode foo dan karenanya tidak dapat membacanya! Anda memerlukan izin pencarian di setiap direktori leluhur untuk mengakses inode file apa pun (atau direktori), dan Anda tidak dapat membaca file kecuali Anda bisa masuk ke inode-nya.

Silakan baca lebih lanjut di bagian direktori izin file.

Pembaruan: Leo mengajukan pertanyaan yang sangat bagus. Jika kita mengetahui inode maka dapatkah kita mengakses file dari direktori yang memiliki x bit tidak disetel? Saya percaya, kita seharusnya tidak dapat melakukannya. Saya tidak mengujinya dengan program c melainkan menggunakan beberapa perintah bash yang berguna untuk mengkonfirmasinya.

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
Amey Jah
sumber
2
Jadi, jika saya memiliki nomor inode file / direktori di dalam direktori tanpa hak pencarian, saya akan dapat mengaksesnya selama izinnya mengizinkannya? (Mendapatkan nomor inode tanpa bisa melakukan stat cukup sulit menurut saya.)
Leo
@ Leo Saya percaya, kita seharusnya tidak bisa melakukannya. Saya telah memperbarui jawabannya. Jika Anda memiliki rintisan kecil, silakan periksa dan beri tahu kami.
Amey Jah
1
@ AmeyJah, Sebenarnya, saya yakin Anda bisa. Pertimbangkan apa yang terjadi ketika Anda menautkan file ke direktori lain yang Anda miliki izinnya. Inode yang sama, tetapi Anda kemudian dapat membacanya. Dengan kata lain, izin baca tidak tergantung pada sistem yang mencari semua folder yang mungkin dimiliki inode dan melihat apakah mereka mendapatkan x bit. Jawaban yang bagus. Terima kasih banyak.
user1477
@ AmeyJah ls , stat dll. Gunakan stat (2) dll. Kalau-kalau Anda tidak tahu sekarang. Saya bisa menulis program C tetapi tes Anda melakukan semua yang program akan tunjukkan meskipun yakin itu bisa melakukan lebih banyak intinya sama: ia menggunakan syscalls (bagian 2). Panggilan pustaka (bagian 3) lebih tinggi dari syscalls tetapi itu tidak mengubah apa-apa (misalnya menghapus (3) menggunakan rmdir (2) untuk direktori dan memutuskan tautan (2) untuk file).
Pryftan
5

Karena Anda meminta direktori:

baca berarti: membaca isinya, yaitu mendaftarkannya dengan ls.

tulis berarti: menulis ke direktur. yaitu membuat file atau subdirektori.

mengeksekusi berarti: masuk ke direktori itu.

membaca dan mengeksekusi izin bisa sedikit rumit untuk direktori.

Sebagai contoh jika Anda memiliki izin baca tetapi tidak mengeksekusi, Anda dapat membuat daftar isi direktori tetapi tidak dapat jatuh ke dalamnya. Anda juga tidak dapat membuat daftar file atau direktori tertentu meskipun Anda tahu namanya.

Jika Anda memiliki izin tetapi tidak membaca, Anda dapat memasukkannya tetapi tidak dapat mendaftar file secara langsung. Tapi, jika Anda tahu nama file atau direktori Anda bisa daftar mereka.

heartsmagic
sumber
2
Jika Anda telah membaca izin tetapi tidak mengeksekusi, Anda dapat membuat daftar (ls) konten direktori tetapi tidak dapat mengakses (cat) file di dalamnya. Jika Anda memiliki izin tetapi tidak membaca dan Anda tahu nama-nama file, Anda dapat mengaksesnya (cat).
dash17291
2

Izin eksekusi pada direktori berarti:

Kemampuan untuk melakukan cd ke direktori ini, dan mengakses file di direktori ini.

Jika Anda tidak memiliki xhak di direktori Anda, Anda tidak dapat:

  • Masukkan ke dalam direktori (yaitu: cd)
  • Tidak dapat mengakses file apa pun di direktori ini (bahkan jika Anda tahu namanya).

Contoh:

$ 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.

Baca Linux File Permission Confusion hal 2 untuk pengenalan yang baik tentang topik ini.

Satu-satunya hal yang xtampaknya tidak dicegah oleh izin adalah mengakses nama - nama file dalam direktori itu.

Contoh:

$ 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
lgarzo
sumber