Direktori dengan izin + x, orang tua tanpa itu. Kapan ini berguna?


11

Katakanlah saya memiliki folder bernama folderdi jalur berikut:

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

dan file yang disebut filedi folder itu.

Lalu, katakan saya menjalankan perintah ini untuk menghapus izin grup di bawah / a /

> chmod g-rwx -R /a/

Sekarang, katakan saya memberikan +rxizin kepada folder:

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

Lalu, jika pengguna kedua dalam grup saya berjalan:

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

atau

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

dia mendapat kesalahan izin, dan sejauh yang saya mengerti ini karena saya perlu memberikan g+xakses ke semua orang tua folder. Pertanyaan saya kemudian adalah, kapan atau mengapa akan berguna untuk memberikan +xizin ke direktori yang orang tuanya tidak memilikinya?

Terima kasih


1
Apakah Anda yakin sedang berlari chmod +grx -R /a/b/c/d/e/folder? Itu salah, cara yang tepat untuk mengeksekusinya adalah:chmod g+rx -R /a/b/c/d/e/folder
nozimica

3
Tidak langsung menjawab pertanyaan ini, tetapi merekomendasikan pembacaan latar belakang: penjelasan izin direktori
Gilles 'SO- stop being evil'

Jawaban:


6

Sebagian besar waktu, jika Anda ingin memblokir akses dan penggunaan seluruh direktori (termasuk subdirektori), Anda dapat melakukannya dengan menghapusnya (non-rekursif) -x. Karena itu, Anda mungkin telah meninggalkan subdirektori dengan +x, tanpa membahayakan.

Mempertahankan izin pada subdirektori dapat berguna karena sejumlah alasan (terutama ketika -xtidak berlaku untuk semua orang tetapi setidaknya satu pengguna masih dapat melakukan sesuatu).

Misalnya, Anda dapat memblokir penggunaan direktori kontainer sementara, saat melakukan perubahan lain pada izin dalam struktur direktori itu, dan kemudian mengaktifkan kembali akses ke seluruh pohon dalam satu operasi (memberikan +xke direktori tingkat atas).

Anda juga dapat memiliki situasi di mana skrip (tidak harus dijalankan oleh pemilik) mencadangkan pohon direktori di lokasi sementara (yang seharusnya tidak dapat dibaca oleh orang lain) dan meletakkan segala sesuatu di file tar, mempertahankan pengaturan izin dari isi direktori.


7

Anda memerlukan + x izin pada setiap dan semua direktori induk untuk melakukan cd atau mengakses file dalam direktori.

Anda perlu izin di direktori untuk mendaftar file. Jadi inilah sebuah contoh:

Anda dapat mengeluarkan perintah ini untuk mendapatkan beberapa pengaturan barang:

mkdir -p /a/b

touch /a/b/{file1,file2}

cd /a

echo 1 > b/file1

echo 2 > b/file2

Tanpa hak:

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

Dengan mengeksekusi saja

/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

Sekarang dengan baca:

/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

Bagian ini mungkin agak membingungkan, tetapi dengan hanya membaca dan tidak mengeksekusi, Anda sebenarnya dapat membuat daftar file dalam direktori, tetapi tidak membaca metadata inode, sehingga Anda akan mendapatkan izin ditolak tetapi masih dapat melihat daftar file dalam direktori seperti di bawah ini ..

/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
Terima kasih @ skrewler. Anda berkata: "Anda memerlukan + x izin pada sembarang dan semua direktori induk untuk melakukan cd atau mengakses file dalam direktori", itulah yang saya pikirkan. Pertanyaan saya kemudian adalah: mengapa akan Anda pernah memberikan + x izin ke direktori yang orang tua lakukan tidak memiliki + x izin?
Amelio Vazquez-Reina

Satu-satunya hal yang dapat saya pikirkan adalah jika Anda ingin membuat bind mount langsung di sana, mem-bypass direktori induk tanpa menjalankan izin. Jika itu tidak masuk akal, saya akan menunjukkan sebuah contoh.
pemain skrewler

Seharusnya di atas lebih jelas. Seorang pengguna root dengan izin untuk semua direktori induk dapat membuat bind mount ini untuk memungkinkan pengguna lain untuk mencapai direktori. Karena mereka dapat mencapai / a / b / c / d / e di mana hanya d atau e yang memiliki eksekusi global, Anda dapat membuat bind mount dari / mnt / d -> / a / b / c / d / e dan pengguna dapat menjangkau itu dengan pergi ke titik mount. Itu ide yang sama dengan membuat tautan keras ke suatu tempat jauh di dalam pohon direktori yang kalau tidak akan terjangkau. Tautan simbolik tidak berfungsi seperti ini, diperlukan bind mount.
pemain skrewler

2

Anda ingin menggunakan +xizin non-rekursif dalam situasi yang Anda berikan:

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

(Itu mengasumsikan bahwa pengguna adalah anggota dari setiap grup direktori. Jika tidak, Anda harus melakukannya chmod o+xuntuk direktori semacam itu.)

Agar pengguna ls /a/b/c/d/e/folderberhasil, ia harus memiliki izin mengeksekusi pada setiap direktori di jalan, dan membaca izin pada folder.

Jika Anda melakukannya

chmod g+x -R /a

itu akan berhasil, tetapi Anda akan memberikan izin grup untuk setiap file dan direktori di bawah / a Itu tidak perlu, dan dalam hal file, mungkin salah.


1

Dalam situasi tertentu yang Anda hadapi, masalahnya adalah bahwa bahkan jika foldermemiliki izin yang tepat untuk diakses oleh beberapa pengguna dari grup Anda sendiri, jika salah satu folder induk foldertidak dapat diakses oleh pengguna tersebut, maka ia tidak akan dapat akses yang dalam (apa yang disebut folderdalam contoh Anda).

Jika Anda menjalankan:

chmod g-rwx -R /a/

maka adan semua anak-anaknya akan memiliki izin itu.

Ketika Anda menjalankan:

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

saat itu folderdan semua anak-anaknya akan memiliki izin itu juga. Tapi, dengan perintah ini kemudian, folder a/, a/bdan seterusnya sampai a/b/c/d/etidak akan mengubah hak akses mereka.


0

Kasus umum untuk menghapus bit x pada direktori adalah untuk mengunci pengguna di direktori home mereka. Shell yang dibatasi memiliki opsi untuk tidak mengizinkan cdreferensi nama path absolut dan untuk tidak mengizinkan eksekusi program menggunakan path absolut. Mereka juga tidak bisa cd ..ke direktori induk direktori home mereka dan dengan demikian secara efektif terkunci dan tidak dapat menjalankan program apa pun yang tidak dalam $ PATH.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.