Praktik yang disarankan mengenai izin file / direktori Joomla dan kepemilikan pada sistem linux?

26

Di masa lalu saya sering mengalami masalah dengan izin dan kepemilikan file / direktori Joomla pada sistem linux.

Termasuk masalah

  • Tidak dapat mentransfer file ke server menggunakan program seperti WinSCP.
  • Tidak dapat menginstal ekstensi Joomla, plugin, dll.
  • File dan folder tidak aman karena izin berbahaya dan pengaturan kepemilikan.

Apa praktik terbaik yang disarankan untuk mengatur izin dan kepemilikan di Joomla pada sistem linux?

Berusaha lebih keras
sumber

Jawaban:

22

Ada beberapa penyebab potensial untuk masalah izin file dan folder pada hosting Linux.

1. Izin File dan Folder

Periksa izin folder diatur ke 0755 dan izin file diatur ke 0644. Perhatikan bahwa izin file dan folder dapat diatur ulang ke pengaturan aman standar ini di seluruh situs menggunakan versi gratis atau versi berbayar dari Alat Admin Akeeba.

2. Parameter PHP

Periksa parameter upload_max_filesize di tab Informasi PHP di Informasi Sistem sudah cukup. Anda sering dapat mengganti pengaturan default di lingkungan hosting bersama melalui pengaturan PHP di cPanel atau php.inifile khusus .

3. Path salah dalam configuration.php

Anda mungkin memiliki jalur yang salah yang ditentukan untuk folder tmp dan log. Ini ditentukan dalam Konfigurasi Sistem atau dapat diperbarui secara langsung dalam file configuration.php jika Anda merasa nyaman mengedit file sistem secara langsung. Jika Anda tidak yakin tentang apa jalurnya, buat dan unggah file whereami.php(atau serupa) ke folder root situs web Anda dengan konten berikut:

<?php
  print 'Current folder is ' . dirname(__FILE__);
?>

Jelajahi untuk [mywebsite].com/whereami.phpmelihat path ke folder root.

Setelah Anda memiliki jalur yang benar, ingatlah untuk menghapus whereami.phpfile.

4. Penangan File PHP yang Tidak Sesuai

Hosting web Anda mungkin dikonfigurasikan dengan penangan file PHP default tetapi idealnya harus menggunakan suPHP atau FastCGI atau serupa sehingga Joomla dapat mengunggah dan mengeksekusi file menggunakan izin file aman.

Anda dapat melihat apa yang sedang digunakan PHP handler System -> System Information -> WebServer to PHP Interface.

Ada artikel bagus tentang manfaat relatif dari penangan file PHP di: http://boomshadow.net/tech/php-handlers

Di lingkungan hosting bersama Anda biasanya tidak memiliki akses untuk mengubah penangan file PHP mana yang diaktifkan tetapi perusahaan hosting web Anda mungkin dapat mengubahnya untuk Anda.

Kadang-kadang sebagai penyelesaian, izin file dan folder diubah menjadi 0777 tetapi ini membuat situs web Anda dalam keadaan rentan dan izin file 0777 umumnya harus dihindari.

Jika perusahaan hosting web Anda tidak dapat mengaktifkan suPHP atau FastCGI, satu-satunya pilihan lain adalah menemukan perusahaan hosting web baru.

5. Ruang Disk

Periksa Anda belum melampaui kuota ruang disk Anda.

DAFTAR PERIKSA MASALAH

Apa praktik terbaik yang disarankan untuk mengatur izin dan kepemilikan di Joomla pada sistem linux?

Lihat 1 dan 4.

Tidak dapat mentransfer file ke server menggunakan program seperti WinSCP.

Lihat 1, 2, mungkin 4, dan 5.

Tidak dapat menginstal ekstensi Joomla, plugin, dll.

Lihat 1, 2, 3, 4 dan 5.

File dan folder tidak aman karena izin berbahaya dan pengaturan kepemilikan.

Lihat 1 dan 4.

Neil Robertson
sumber
1
Dalam kasus saya, saya pikir penangan PHP adalah bagian besar dari masalah.
TryHarder
1
+1 Jawaban Anda tidak benar-benar memperbaiki masalah saya, tetapi saya terinspirasi untuk memeriksa pengaturan PHP server saya - Safe Mode dan ternyata itu ON - enabled. Karena itu dengan mematikannya adalah solusinya. Jadi untuk pembaca masa depan jika tidak ada yang diperbaiki, periksa Safe Mode Anda juga :)
Mohammed Joraid
12

Silakan periksa level izinnya, masing-masing harus 644 dan 755 untuk file dan folder.

Sering kali tingkat izinnya baik-baik saja, bahkan ketika beberapa masalah dihadapi. Ini berarti bahwa Anda harus memeriksa kepemilikan dan grup file dan folder tertentu . Biasanya grup dan kepemilikan dapat diubah menjadi www-data untuk apache (digunakan di server web berbasis ubuntu).

Jangan ragu untuk memeriksa dokumen Joomla yang menarik ini berdasarkan memverifikasi izin file.

Shyam
sumber
Apakah Joomla biasanya milik grup www-data?
TryHarder
1
Bersamaan dengan jawaban Shyam, kami menggunakan modul SuPHP Apache . Kami menemukan bahwa ketika ekstensi dipasang, kami tidak dapat memodifikasi file-file itu melalui FTP dan sebaliknya (masalah kepemilikan file). SuPHP memperbaikinya untuk kami dengan memastikan bahwa skrip PHP dijalankan dengan izin dari pemiliknya.
Zachary Draper
1
proses apache dijalankan di bawah 'www-data' sebuah unix-group. Tidak hanya joomla, semua aplikasi berbasis apache.
Shyam
Apakah mungkin untuk mengembangkan dan menjalankan skrip shell untuk secara otomatis memperbaiki semua izin file?
NivF007
1
Iya nih. gist.github.com/ssv445/11204300 Anda dapat menjalankan skrip di cron.
Shyam
8

Solusi mudah bagi saya adalah dengan sering membiarkan PHP berjalan dalam mode (cepat) CGI dan mengatur kepemilikan direktori Joomla kepada pengguna FTP. Jadi Anda akan dapat mengunggah dan menimpa file melalui FTP dan Joomla akan dapat menulis file juga.

Cara untuk melakukan ini pada lingkungan hosting bersama (jika diizinkan), adalah menambahkan sesuatu seperti ini ke file .htaccess Anda:

AddHandler php53-cgi .php

Lihat juga ikhtisar tentang berbagai mode .

fruppel
sumber
7

Izin harus 644 dan 755 seperti yang dijelaskan oleh Shyam.

Di Joomla Anda dapat menghindari semua masalah yang Anda sebutkan, dengan metode berikut.

Tidak dapat mentransfer file ke server menggunakan program seperti WinSCP.

  • Ini mungkin terjadi karena izin (444) seperti Joomla configuration.phpmemiliki izin ini yang tidak diizinkan secara default (untuk keamanan).
  • Situasi lain untuk kesalahan yang sama ini adalah ketika Anda mentransfer situs atau folder dari satu server ke yang lain.

Tidak dapat menginstal ekstensi Joomla, plugin, dll.

  • Ini akan terjadi karena temp/logizin buruk folder. (Diperlukan 755)

  • Atau alasan lain mengapa temp/logjalan salahconfiguration.php

File dan folder tidak aman karena izin berbahaya dan pengaturan kepemilikan.

  • Ini adalah yang paling penting Joomla selalu merekomendasikan tidak menggunakan 777 file dan folder jika Anda tidak menyadari ini .

Semoga ini bisa membantu ..

Jobin Jose
sumber
7

Izin harus 644 dan 755 seperti yang dijelaskan oleh Shyam.

Masalah yang Anda hadapi kemungkinan besar terkait dengan cara server Anda diatur. Sebagian besar waktu ini terjadi pada host bersama di mana Apache berjalan di bawah pengguna yang berbeda dari akun FTP Anda. Karena Anda biasanya mengunggah Joomla menggunakan FTP, Apache bukan pemilik file dan karenanya tidak memiliki izin yang diperlukan untuk mengubahnya.

Ada mode FTP dalam Joomla yang memungkinkan Anda untuk melewati masalah ini. Anda dapat mengaktifkannya di konfigurasi global Joomla. Kemudian akan melakukan semua pengaksesan file menggunakan pengguna FTP, bukan pengguna Apache biasa.

Namun cara yang lebih baik adalah meminta host Anda untuk memperbaiki masalah ini. Mereka dapat mengatur PHP (Apache) untuk dijalankan di bawah pengguna khusus, yang dalam hal ini adalah pengguna FTP Anda. Maka semuanya akan bekerja dengan baik.

Bakual
sumber
Pengguna / grup adalah jawabannya, seperti yang Anda katakan memiliki pengguna khusus untuk PHP memecahkan ini terutama jika itu bertepatan dengan pengguna FTP.
jackJoe
5

Ya, izinnya harus 644 dan 755 seperti yang dijelaskan oleh Shyam , tetapi poster lain lupa menyebutkan bahwa ini adalah jika file tersebut dimiliki oleh server web Anda, dan grup tersebut adalah grup milik Anda.

Misalnya, di FileZilla Anda akan melihat izin seperti ini:

Filename      Size   Filetype  Last Modified          Permissions   Owner/Group
somefile.txt  11KB   txt file  2014-04-23 3:43:00 AM      www-data myGroup 

Izin drwxr-xr-x adalah 755 (abaikan saja dr terkemuka jadi itu wxr-xr-x). Izin baca bernilai 4, Izin menulis bernilai 2 dan jalankan izin bernilai 1 .. sehingga semuanya ditambahkan hingga 7, dan itulah yang dimiliki oleh pemilik file ini. Grup telah membaca dan mengeksekusi izin tetapi tidak menulis, sehingga mereka memiliki 5, dan semua orang juga memiliki 5. membuat izin 755.

754 adalah pemilik yang telah membaca, menulis, mengeksekusi. Grup telah membaca dan mengeksekusi, dan semua orang hanya memiliki izin baca.

Pada contoh di atas, Anda dapat melihat bahwa pemilik file adalah www-data (yang merupakan grup server web default untuk banyak server Apache) dan Grup adalah grup myGroup, yang merupakan Grup (admin) yang menjadi milik saya.

Angka pertama adalah izin pemilik, yang kedua adalah izin grup, dan angka ketiga adalah izin semua orang. Jelas, Anda harus berhati-hati untuk memberikan izin yang dibutuhkan server web ... dan pastikan file yang perlu dikunci tidak dapat ditulis atau dieksekusi oleh sembarang orang (nomor ketiga). Berikut ini arti angka-angkanya:

Dengan anggapan Webserver memiliki file, admin Anda ada di grup, dan tentu saja, semua orang adalah nomor ketiga.

644: File dengan izin yang diatur ke 644 dapat dibaca oleh semua orang dan hanya dapat ditulis oleh pemilik file / folder.

755: File dengan izin yang diatur ke 755 dapat dibaca dan dieksekusi oleh semua orang, tetapi hanya dapat ditulisi oleh pemilik file / folder.

777: File dengan izin yang diatur ke 777 dapat dibaca, ditulis, dan dieksekusi oleh semua orang. Jangan gunakan set izin ini, karena alasan keamanan, di server web Anda kecuali benar-benar diperlukan, dan hanya sementara. Ini adalah bencana yang menunggu untuk terjadi, terutama jika direktori memiliki izin tersebut .. itu berarti siapa pun dapat mengunggah file dan menjalankannya.

Berikut adalah perintah Linux untuk mengatur Joomla! izin yang disarankan dari baris perintah. Izin File Joomla yang Direkomendasikan

Set ownership:   sudo chown -R www-data:myName /path/to/your/domain.com
Set Directories: sudo find /path/to/your/domain.com -type d -exec chmod 755 {} \;
Set files :      sudo find /path/to/your/domain.com -type f -exec chmod 644 {} \;

CATATAN - banyak orang akan menunjukkan kepada Anda perintah-perintah ini tanpa path, tetapi saya lebih suka SELALU menggunakan path lengkap, karena jika Anda lupa mengubah direktori ke root Joomla! direktori instalasi dan jalankan tanpa path, Anda baru saja mengubah izin untuk setiap file dan direktori di direktori teratas itu, dan membuat kekacauan besar.

Setelah Anda menjalankan perintah ini, Anda harus memperbaiki izin untuk direktori apa pun yang membutuhkan izin lebih banyak ... misalnya ... pengguna mengunggah gambar dll.

JIKA ANDA HANYA MENGGUNAKAN JOOMLA! antarmuka, dan Anda tidak memiliki akses admin atau FTP ke server, lalu GUNAKAN KEPEMILIKAN dan IZIN DI ATAS.

BERHENTI DI SINI JIKA ANDA ADALAH NOVICE .. Di bawah ini hanya untuk orang yang benar-benar memahami apa yang dilakukan izin dan kepemilikan.

Namun, saya merasa memiliki kepemilikan dan izin seperti itu sangat tidak mudah karena saya sering menggunakan FileZilla dan baris perintah sesi Terminal, dan saya mengunggah banyak file secara manual. Tetapi saya tidak dapat menimpa file apa pun karena saya tidak memilikinya dan saya tidak punya izin untuk menulis. Saya dapat meminta FileZilla masuk di bawah akun server web, TAPI ... Saya ingin FileZilla masuk di akun saya, jadi saya juga dapat menelusuri direktori lain, bukan hanya file yang dapat diakses oleh server web ... SO ... Saya mengubah kepemilikan dan izin untuk ini:

Filename      Size   Filetype  Last Modified          Permissions   Owner/Group
somefile.txt  11KB   txt file  2014-04-23 3:43:00 AM  drwxr-xr-x    myName www-data

Saya menjadikan diri saya pemilik, dan meletakkan server web di Grup ... dan saya mengubah izin untuk direktori menjadi 775, dan untuk file menjadi 664. Membuat hidup saya jauh lebih mudah ... tapi saya tidak merekomendasikannya untuk semua orang.

Jika Anda melakukannya dengan cara saya, ini adalah perintahnya:

 Set ownership:   sudo chown -R myName:www-data /path/to/your/domain.com
 Set Directories: sudo find /path/to/your/domain.com -type d -exec chmod 775 {} \;
 Set files :      sudo find /path/to/your/domain.com -type f -exec chmod 664 {} \;  
bgies
sumber
"drwxr-xr-x adalah 755" - ini akan menjadi 751 (izin baca tidak tersedia untuk umum), bukan 755. (Meskipun 755 akan lebih "normal" untuk direktori.)
MrWhite
4

Jawaban lain memberikan penjelasan yang baik tentang apa yang harus dilakukan, saya hanya ingin menambahkan skrip untuk memperbaiki izin jika Anda sudah mengunggah komponen dan tidak dapat mengakses file dengan ftp.

Dalam hal ini saya akan mengunggah file ini fix.phpke server FTP dan membukanya di browser:http://example.com/fix.php

<?php
file_fix_directory(dirname(__FILE__));

function file_fix_directory($dir, $nomask = array('.', '..')) {
  if (is_dir($dir)) {
     // Try to make each directory world writable.
     if (@chmod($dir, 0777)) {
       echo "<p>Made writable: " . $dir . "</p>";
     }
  }
  if (is_dir($dir) && $handle = opendir($dir)) {
    while (false !== ($file = readdir($handle))) {
      if (!in_array($file, $nomask) && $file[0] != '.') {
        if (is_dir("$dir/$file")) {
          // Recurse into subdirectories
          file_fix_directory("$dir/$file", $nomask);
        }
        else {
          $filename = "$dir/$file";
            // Try to make each file world writable.
            if (@chmod($filename, 0666)) {
              echo "<p>Made writable: " . $filename . "</p>";
            }
        }
      }
    }

    closedir($handle);
  }

}

Skrip ini menetapkan semua izin file ke 666 dan semua direktori menjadi 777. World writable bukan set izin terbaik untuk host bersama tetapi Anda akan dapat mengakses file Anda lagi dan kemudian dapat mengaturnya ke nilai yang benar dengan FTP.

Harald Leithner
sumber
1

Terlambat ke pesta. Saya datang ke sini mencari serta tempat-tempat lain untuk panduan yang pasti tentang folder apa yang harus ditulis untuk joomla.

Maaf, orang-orang yang menjadi pertanda berita buruk.

Saran untuk menggunakan izin 755 untuk semua direktori dan 644 untuk semua folder setidaknya tidak bertanggung jawab .

Membuat semua folder dan file Anda dapat ditulisi oleh pemilik tidak masalah selama pemiliknya bukan server web (apache et al).

Saya tahu ini adalah praktik yang disarankan umum tetapi saya dapat meyakinkan Anda bahwa ini bukan praktik yang baik. Bagian terakhir dari perangkat lunak yang ingin Anda beri kemampuan untuk menulis ke folder adalah server web itu sendiri. Ini adalah server web yang digunakan oleh peretas untuk mengambil keuntungan dari eksploitasi yang belum ditambal (atau bahkan ditemukan).

Apakah menurut Anda .htaccess akan menyelamatkan Kevin Anda? Lupakan saja karena Anda mengizinkan akses tulis server web, teman-teman peretas kami yang terkasih dapat membuat file .htaccess mereka sendiri dengan memberikan izin apa pun yang mereka inginkan! seperti Oh, saya tidak tahu Umm membuat file .jpg dapat dieksekusi oleh server. Dan Anda berpikir melindungi terhadap eksekusi .php akan menutupi A. Anda

Tetapi pastikan hanya folder yang membutuhkan akses tulis yang benar-benar memilikinya. 755 dan 644 untuk folder berikut.

public_html/images
public_html/cache
public_html/tmp

Dan pastikan Anda mematikan file .htaccess dengan tidak ada AllowOveride untuk semua folder yang dapat ditulisi (seperti yang di atas)

Bagi Anda yang menggunakan shared hosting semoga sukses karena ini adalah elemen konfigurasi yang tidak dapat Anda kontrol.

Jangan berpikir membuat file .htaccess hanya membaca akan membantu. Jika teman-teman peretas kami dapat membuat folder baru (mereka dapat) maka mereka dapat membuat .htaccess mereka sendiri.

Bagi Anda yang menjalankan shared hosting untuk semua yang sakral, silakan dapatkan petunjuk tentang keamanan.

Jika Anda tidak mengerti keamanan, silakan keluar dari bisnis hosting yang Anda buat sulit bagi kita semua.

Sekarang kembali ke pencarian saya untuk panduan definitif pada folder yang membutuhkan akses tulis ...

DeveloperChris
sumber
Terima kasih Chris, tetapi saya mungkin akan tetap menggunakan izin file standar 755 dan 644 sementara ini direkomendasikan oleh situs web Joomla resmi dan pakar keamanan seperti Sucuri: docs.joomla.org/Security_and_Performance_FAQs blog.sucuri.net/2015/2015 …
Neil Robertson
Ya saya tahu itu "direkomendasikan" tetapi begitu Anda telah dieksploitasi dan mencari tahu mengapa Anda dieksploitasi saya dapat meyakinkan Anda Anda membuang "rekomendasi" keluar jendela dan mulai dari awal. Rekomendasi tersebut adalah jalan dengan resistensi paling rendah. Bukan yang paling aman.
DeveloperChris
Langkah 1 hingga 10 dari daftar "Menjaga Keamanan Situs Joomla" di joomla.stackexchange.com/a/180/120 bersama-sama dengan izin file standar telah bekerja dengan baik untuk 50 atau lebih situs web yang saya cari-cari beberapa tahun terakhir. Jarak tempuh Anda tentu saja bervariasi.
Neil Robertson
@NeilRobertson Saya setuju dengan daftar itu tetapi jika ada exploit yang tidak terperangkap oleh itu, garis pertahanan terakhir Anda adalah untuk tidak memberikan izin menulis ke server web (apache et al). Ngomong-ngomong, itu bukan saran khusus joomla. Juga kebanyakan orang tidak dapat menerapkan banyak rekomendasi dalam daftar itu. Mereka tidak memiliki sumber daya atau menggunakan hosting yang lebih murah (bukan yang termurah).
DeveloperChris