Mengapa chmod 644 membuat direktori tidak dapat diakses?

8

Saya memiliki banyak file media (yang hanya perlu 644) yang merupakan campuran dari berbagai izin. Beberapa adalah grup atau dapat ditulis secara global jadi saya pikir, hanya untuk aman, saya akan chmod mereka semua kembali ke 644.

Masalahnya adalah ada hierarki direktori dan untuk semua direktori yang tertangkap dalam ini ls -lmenampilkannya sebagai:

d????????? ? ? ? ?            ? Dirname

Jika saya chmod ke 744, itu sudah diperbaiki.

Pertanyaan saya adalah: Apa yang terjadi di sini? Apakah direktori harus dapat dieksekusi?

Oli
sumber

Jawaban:

7

Seperti yang tercantum dalam manual untuk chmodterkait dengan izin:

Huruf rwxXst memilih bit mode file untuk pengguna yang terpengaruh: baca (r), tulis (w), jalankan (atau cari direktori) (x), jalankan / cari hanya jika file tersebut adalah direktori atau sudah memiliki izin eksekusi untuk beberapa pengguna (X)

Bit yang dapat dieksekusi pada folder dijelaskan di atas sebagai izin 'pencarian'; yaitu bit eksekusi hanya memungkinkan Anda untuk mengakses folder dalam browser file atau pindah ke folder dari terminal dengan menjalankan cdperintah atau menjalankan ls ~/folderdaftar file-file di folder.

Folder harus dapat dieksekusi untuk pemilik , meskipun superuser masih dapat mengakses folder seperti ketika menggunakan sudofile atau direktori apa pun dapat diakses atau dihapus. Selain itu, izin direktori dan file dijelaskan lebih lanjut dalam artikel bermanfaat ini di Stackoverflow .

Penting juga untuk dicatat bahwa 'mengeksekusi' folder tidak berarti Anda benar-benar menjalankan kode atau perintah seperti ketika biner atau skrip yang dapat dijalankan dijalankan.

Untuk pengguna Desktop rumahan (meskipun mungkin bukan untuk server Anda) sebagian besar folder di dalamnya $HOMEmemiliki izin eksekusi yang ditetapkan untuk pengguna, grup, dan lainnya jika dilihat dengan stat ~/myfolder(kutipan di bawah):

Access: (0755/drwxr-xr-x)  Uid: ( 1000/    mike)   Gid: ( 1000/    mike)

Izin standar untuk folder di dalamnya $HOME adalah 755 atau 775 dan untuk file itu adalah 644. Namun, sisa sistem file akan berbeda. Sekali lagi, folder harus memiliki bit eksekusi untuk pemilik atau mereka tidak akan dapat dibuka olehnya. Penting untuk berhati-hati chmodketika mengubah izin dan terutama ketika melakukannya secara rekursif karena situasinya dapat dengan cepat menjadi kacau.

Untuk informasi lebih lanjut, lihat man chmodatau manual Ubuntu secara online , dan artikel ini di Superuser .

pencuci mulut
sumber
0

Direktori memerlukan xbit set (untuk direktori yang bit dilihat sebagai bit pencarian) untuk dibuka. Banyak orang menemukan bahwa ketika mereka menghapus bit yang dapat dieksekusi dengan chmod -Rpada seluruh folder, maka mereka tidak dapat mengaksesnya lagi. Untuk memperbaikinya saya menggunakan ini treesehingga saya hanya dapat mengatur folder dan menghindari mimpi buruk memiliki semua file ditetapkan sebagai executable (opsi untuk pohon adalah -d List directories only.):

sudo tree -faid dirname | xargs -L1 -I{} sudo chmod +x "{}"

jika Anda tidak punya tree:

find  dirname -type d -exec chmod +x {} 

Peringatan!!! Anda harus mempertimbangkan ini:

  • menggunakan chmod atau chown rekursif pada /direktori root atau direktori sistem akan menghancurkan OS Anda (sebenarnya apa pun yang rekursif pada /direktori atau direktori sistem berbahaya)

  • ini bukan praktik keamanan yang baik untuk mengatur izin massal seperti itu

Eduard Florinescu
sumber
@Melebius Ok terima kasih, saya senang kami mencapai kesepahaman
Eduard Florinescu