Bagaimana saya bisa mengubah izin file dan direktori secara rekursif?

65

Saya telah menginstal ubuntu di komputer lokal saya dengan apache / php / mysql.

Saya sekarang memiliki direktori di / var / www - di dalamnya saya memiliki beberapa proyek yang sedang berjalan. Saya juga bekerja dengan opensource (drupal, magento, sugarcrm).

Masalah yang saya hadapi adalah mengubah izin file dengan terminal. Kadang saya perlu mengubah izin seluruh folder dan sub-folder serta file berikutnya. Saya harus mengganti menggunakan secara individual

sudo chmod 777 foldername

Bagaimana saya bisa melakukan ini secara rekursif.

Juga mengapa saya harus selalu melakukannya 777 , saya mencoba 755 untuk folder dan 644 untuk file, tetapi itu tidak akan berhasil.

Nikhil
sumber

Jawaban:

90

Cukup tambahkan -Ropsi untuk mengubah izin file secara rekursif. Contoh, secara rekursif menambahkan izin baca dan tulis untuk pemilik dan grup di foldername:

chmod -R ug+rw foldername

Izinnya akan seperti 664 atau 775.

Mengatur izin ke 777 sangat tidak dianjurkan . Anda mendapatkan kesalahan di Apache atau editor Anda tentang izin karena apache berjalan di bawah pengguna yang berbeda ( www-data) daripada Anda.

Jika Anda ingin menulis /var/www, tambahkan diri Anda ke www-datagrup dan setel umask + izin yang sesuai.

  • Tambahkan diri Anda ke www-datagrup:sudo adduser $USER www-data
  • Ubah kepemilikan file di /var/www:sudo chown -R www-data:www-data /var/www
  • Ubah umask, sehingga file yang baru dibuat oleh Apache memberikan izin menulis kepada grup juga. Tambahkan umask 007ke /etc/apache2/envvars.
  • Memberikan diri Anda (secara teknis, kelompok www-data) menulis perizinan: sudo chmod -R g+w /var/www.
Lekensteyn
sumber
ya saya menambahkan r flag di tempat yang salah, saya menambahkannya setelah o + w untuk chmod.
JohnMerlino
Juga, jika Anda mencoba menggunakan chmod -r blablabla(kecil -r bukan -R) Anda mungkin akhirnya menghapus izin baca untuk semua orang ...
Cyril Duchon-Doris
1
Setelah instruksi ini, sebaiknya periksa apakah tidak ada .htaccessfile dengan izin tulis untuk apache. find /var/www/ | grep .htaccess | xargs ls -l.
reynoldsnlp
23

kasar:

sudo find foldername -exec chmod a+rwx {} ";"

Apa yang tidak bekerja Lebih spesifik!

sudo find foldername -type d -exec chmod 755 {} ";"
sudo find foldername -type f -exec chmod 644 {} ";"
Pengguna tidak diketahui
sumber
ketika Anda berada di dalam folder, hapus "foldername"
Enrique
4
... dan gantikan dengan.
Djjeck
4

Anda tidak perlu 777 untuk apa pun. Kasus terburuk, Anda harus mengubah pemilik file dan direktori tertentu menjadi pengguna "www-data".

sudo find /var/www -type d -print0 | xargs -0 chmod 755
sudo find /var/www -type f -print0 | xargs -0 chmod 644
sudo find /var/www/some/subset -print0 | xargs -0 chown www-data:www-data

Jika Anda menggunakan metode keanggotaan grup Lekensteyn, ubah masing-masing 755 ke 775 dan 644 ke 664 di atas, lalu paksakan kelekatan grup:

sudo find /var/www/some/subset -type d -print0 | xargs -0 chmod g+s
Kees Cook
sumber
3

Anda dapat mengubah subfolder dan file di Nautilus. Seperti yang bisa Anda lihat pada gambar di bawah ini. Untuk memiliki izin pada tombol, Anda dapat mengaktifkan opsi di Ubuntu Tweak.

masukkan deskripsi gambar di sini

Alfredo Hernández
sumber
Gunakan LANG=C [command]untuk mendapatkan terjemahan bahasa Inggris.
Lekensteyn
1

Jika Anda ingin agar semua file Anda dapat dibaca oleh dunia (mis. Hanya set statis file HTML / gambar), maka gunakan perintah ini:

chmod -R a+r <base directory>

Itu akan secara rekursif melalui semua file & subdirektori dan menambahkan izin baca untuk mereka.

PERINGATAN : Jangan lakukan ini untuk file yang dapat dieksekusi! Hanya file yang harus dilihat oleh semua orang.

Ryan Shillington
sumber
Apakah Anda mengatakan "jangan lakukan chmod -R a+xapa pun", atau "jangan lakukan chmod -R a+rpada executable"?
aleclarson
Aku telah memperbaikinya. Yang kemudian benar. Berhati-hatilah dengan mengizinkan orang lain mengakses ke executable yang Anda buat.
Ryan Shillington