Apakah izin direktori induk penting saat mengakses subdirektori?

160

Jika saya memiliki folder root dengan izin terbatas, katakan saja 600, dan jika folder / file anak memiliki izin 777, apakah semua orang akan dapat membaca / menulis / mengeksekusi file anak meskipun folder root memiliki 600?

Ken Li
sumber
12
Perhatikan bahwa chmodding direktori ke 600 membuatnya tidak dapat diakses bahkan oleh pemiliknya, karena Anda perlu menjalankan izin untuk chdir ke dalamnya ...
Shadur

Jawaban:

183

Aturan tepatnya adalah: Anda dapat melintasi direktori jika dan hanya jika Anda memiliki izin untuk menjalankannya.

Jadi misalnya untuk mengakses dir/subdir/file, Anda perlu menjalankan izin dirdan dir/subdir, ditambah izin fileuntuk jenis akses yang Anda inginkan. Masuk ke kasus sudut, saya tidak yakin apakah itu universal bahwa Anda perlu menjalankan izin pada direktori saat ini untuk mengakses file melalui jalur relatif (yang Anda lakukan di Linux).

Cara Anda mengakses file penting. Misalnya, jika Anda telah menjalankan izin pada /foo/bartetapi tidak aktif /foo, tetapi direktori Anda saat ini /foo/bar, Anda dapat mengakses file /foo/barmelalui jalur relatif tetapi tidak melalui jalur absolut. Anda tidak dapat mengubah /foo/bardalam skenario ini; proses yang lebih istimewa mungkin telah dilakukan cd /foo/barsebelum tidak memiliki hak . Jika file memiliki banyak tautan keras, jalur yang Anda gunakan untuk mengaksesnya menentukan kendala akses Anda.

Tautan simbolik tidak mengubah apa pun. Kernel menggunakan hak akses dari proses panggilan untuk melewatinya. Misalnya, jika symtautan simbolis ke direktori dir, Anda perlu menjalankan izin diruntuk mengakses sym/foo. Izin pada symlink itu sendiri mungkin atau tidak masalah tergantung pada OS dan sistem file (beberapa menghormati mereka, beberapa mengabaikannya).

Menghapus izin eksekusi dari direktori root secara efektif membatasi pengguna ke bagian dari pohon direktori (dimana proses yang lebih istimewa harus berubah menjadi). Ini membutuhkan daftar kontrol akses untuk digunakan. Misalnya, jika /dan /homeberada di luar batas ke joe( setfacl -m user:joe:0 / /home) dan /home/joemerupakan joedirektori home, maka joetidak akan dapat mengakses seluruh sistem (termasuk menjalankan skrip shell dengan /bin/shatau binari terkait secara dinamis yang perlu diakses /lib, jadi Anda harus d perlu masuk lebih dalam untuk penggunaan praktis, misalnya setfacl -m user:joe:0 /*; setfacl -d user:joe /bin /lib).

Izin baca pada direktori memberikan hak untuk menghitung entri. Memberi izin eksekusi tanpa memberikan izin baca terkadang bermanfaat: nama entri berfungsi sebagai kata sandi untuk mengaksesnya. Saya tidak bisa memikirkan kegunaan apa pun dalam memberikan izin baca atau tulis ke direktori tanpa menjalankan izin.

Gilles
sumber
32

Tidak. Izin folder root membatasi izin file anak. Kamu bisa mencobanya.

$ mkdir rootdir
$ touch ./rootdir/childfile
$ chmod 777 ./rootdir/childfile
$ chmod 600 rootdir
$ cat ./rootdir/childfile

Saya mendapatkan ini:

$ cat: ./rootfolder/childfile: permission denied
goovim
sumber
4

Anda dapat membuat direktori anak dapat ditulisi walaupun direktori induknya tidak. Saya melakukan ini untuk grup.

Sebagai contoh: direktori induk dimiliki oleh grup coder

drwxr-sr-x

direktori anak

drwxrwsr-x

Anda (anggota grup coder) masih dapat menulis ke direktori turunan tetapi tidak ke direktori induk.

Kemin Zhou
sumber
1

Anda dapat membuat tautan keras untuk mengakses file bahkan jika Anda tidak memiliki hak istimewa eksekusi di direktori induk. Tapi yang penting di sini adalah Anda harus membuat tautan keras sebelum Anda kehilangan hak istimewa eksekusi di direktori induk

$ ln foo/bar/test_privs privs_test_checking
Kamal
sumber