Masalah keamanan apa yang harus saya miliki ketika mengatur FS_METHOD untuk "mengarahkan" di wp-config?

36

Saya baru-baru ini memiliki masalah di mana saya tidak dapat menginstal plugin WP Smush Pro karena saya tidak memiliki pilihan Instalasi Manual atau Instalasi Satu-Klik.

Saya menemukan posting ini yang menyarankan untuk mengubah pengaturan wp-config.php. Saya menambahkan pengaturan yang disarankan, namun yang tampaknya paling penting adalah:

define('FS_METHOD', 'direct');

Apa yang saya ingin tahu adalah apa keprihatinan nyata yang harus saya telah sekitar pengaturan FS_METHODke direct? Apakah ada alternatif lain untuk menginstal plugin?

Inilah yang dikatakan dokumentasi resmi:

FS_METHOD memaksa metode sistem file. Seharusnya hanya "langsung", "ssh2", "ftpext", atau "ftpsockets". Secara umum, Anda hanya perlu mengubah ini jika Anda mengalami masalah pembaruan. Jika Anda mengubahnya dan itu tidak membantu, ubah kembali / hapus. Dalam sebagian besar keadaan, mengaturnya ke 'ftpsockets' akan berfungsi jika metode yang dipilih secara otomatis tidak.

(Preferensi Utama) "langsung" memaksanya untuk menggunakan permintaan I / O File Langsung dari dalam PHP, ini penuh dengan membuka masalah keamanan pada host yang dikonfigurasi dengan buruk, Ini dipilih secara otomatis bila sesuai.

Crmpicco
sumber

Jawaban:

33

Ini hanya, bagaimana saya memahami ide API File WordPress . Jika salah, harap unduh suara :)

Baik. Jika Anda mengunggah file, file ini memiliki pemilik. Jika Anda mengunggah file Anda dengan FTP, Anda masuk dan file tersebut akan dimiliki oleh pengguna FTP. Karena Anda memiliki kredensial, Anda dapat mengubah file-file ini melalui FTP. Pemilik biasanya dapat mengeksekusi, menghapus, mengubah dll file. Tentu saja, Anda dapat mengubah ini dengan mengubah izin file .

Jika Anda mengunggah file menggunakan PHP, pengguna linux yang menjalankan PHP adalah pemilik file tersebut. Pengguna ini sekarang dapat mengedit, menghapus, mengeksekusi dll file. Ini boleh saja asalkan hanya Anda yang pengguna, yang mengeksekusi PHP di sistem Anda.

Mari kita asumsikan, Anda berada di host bersama yang "buruk" terkonfigurasi. Banyak orang menjalankan situs web PHP mereka di sistem ini. Katakanlah hanya satu pengguna linux yang mengeksekusi PHP untuk semua orang ini. Salah satu webmaster di host bersama ini memiliki niat buruk. Dia melihat halaman Anda dan ia menemukan jalan menuju instalasi WordPress Anda. Misalnya, WP_DEBUG disetel ke true dan ada pesan kesalahan seperti

[warning] /var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php on line 1

"Ha!" kata bocah nakal itu. Mari kita lihat, apakah orang ini telah menetapkan FS_METHODuntuk directdan ia menulis script seperti

<?php
unlink( '/var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php' );
?>

Karena hanya satu pengguna yang menjalankan PHP dan pengguna ini juga digunakan oleh penjahat itu, ia dapat mengubah / menghapus / mengeksekusi file di sistem Anda jika Anda telah mengunggahnya melalui PHP dan dengan ini melampirkan pengguna PHP sebagai pemiliknya.

Situs Anda diretas.

Atau, seperti yang tertulis dalam Codex:

Banyak sistem hosting yang menjalankan server web sebagai pengguna yang berbeda dari pemilik file WordPress. Ketika hal ini terjadi, suatu proses menulis file dari pengguna server web akan memiliki file yang dihasilkan dimiliki oleh akun pengguna server web alih-alih akun pengguna yang sebenarnya. Ini dapat menyebabkan masalah keamanan dalam situasi hosting bersama, di mana banyak pengguna berbagi server web yang sama untuk situs yang berbeda.

websupporter
sumber
15

Apa resikonya?

Pada host bersama yang tidak dikonfigurasi dengan benar, setiap PHP pelanggan akan dieksekusi sebagai pengguna yang sama (katakanlah apacheuntuk diskusi). Pengaturan ini sangat umum.

Jika Anda menggunakan host seperti itu dan menggunakan WordPress untuk menginstal plugin menggunakan akses file langsung, semua file plugin Anda akan menjadi miliknya apache. Pengguna yang sah di server yang sama akan dapat menyerang Anda dengan menulis skrip PHP yang menyuntikkan kode jahat ke file plugin Anda. Mereka mengunggah skrip mereka ke situs web mereka sendiri dan meminta URL-nya. Kode Anda berhasil dikompromikan karena skrip mereka berjalan sebagai apache, sama dengan yang memiliki file plugin Anda.

Apa FS_METHOD 'direct'hubungannya dengan itu?

Ketika WordPress perlu menginstal file (seperti plugin), ia menggunakan fungsi get_filesystem_method () untuk menentukan cara mengakses sistem file. Jika Anda tidak mendefinisikannya FS_METHODakan memilih default untuk Anda, jika tidak maka akan menggunakan pilihan Anda selama itu masuk akal.

Perilaku default akan mencoba mendeteksi apakah Anda berada dalam lingkungan berisiko seperti yang saya jelaskan di atas, dan jika menurut Anda Anda aman, ia akan menggunakan 'direct'metode tersebut. Dalam hal ini WordPress akan membuat file secara langsung melalui PHP, menyebabkannya menjadi milik apachepengguna (dalam contoh ini). Kalau tidak, itu akan kembali ke metode yang lebih aman, seperti meminta Anda untuk kredensial SFTP dan membuat file seperti Anda.

FS_METHOD = 'direct'meminta WordPress untuk mem-bypass deteksi berisiko itu dan selalu membuat file menggunakan 'direct'metode ini.

Lalu mengapa digunakan FS_METHOD = 'direct'?

Sayangnya, logika WordPress untuk mendeteksi lingkungan beresiko cacat dan menghasilkan false-positive dan false-negative. Aduh. Pengujian melibatkan pembuatan file dan memastikan itu milik pemilik yang sama dengan direktori tempat tinggalnya. Asumsinya adalah jika pengguna sama, PHP berjalan sebagai akun Anda sendiri dan aman untuk menginstal plugin sebagai akun itu. Jika berbeda, WordPress menganggap bahwa PHP berjalan sebagai akun bersama dan tidak aman untuk memasang plugin sebagai akun itu. Sayangnya kedua asumsi ini adalah tebakan yang dididik yang seringkali salah.

Anda akan menggunakan define('FS_METHOD', 'direct' );skenario positif palsu seperti ini: Anda adalah bagian dari tim tepercaya yang anggotanya semua mengunggah file melalui akun mereka sendiri. PHP berjalan sebagai pengguna tersendiri. WordPress akan menganggap bahwa ini adalah lingkungan yang berisiko dan tidak akan default ke 'direct'mode. Pada kenyataannya itu hanya dibagikan dengan pengguna yang Anda percayai dan karena 'direct'mode seperti itu aman. Dalam hal ini Anda harus menggunakan define('FS_METHOD', 'direct' );untuk memaksa WordPress untuk menulis file secara langsung.

Menandai
sumber
1

Ada situasi 'terkonfigurasi dengan baik' di mana 'langsung' akan menyebabkan masalah.

Dimungkinkan juga untuk mengkonfigurasi hosting WP bersama dengan pengguna eksekusi PHP yang tidak digunakan bersama, berbeda dari pengguna kepemilikan file / direktori. Jadi Anda berakhir dengan file yang dimiliki oleh user1 dan kode PHP dieksekusi sebagai php-user1.

Dalam situasi itu, plugin yang diretas atau kode inti (a) tidak dapat menulis ke (atau bahkan membaca dari, tergantung pada izin) pengarahan pengguna lain; (b) tidak bisa menulis ini file pengguna dan sehingga tidak dapat menambahkan kode trojan ke kode inti atau Plugin.

Jadi jika hosting sudah diatur seperti itu, Anda HARUS menggunakan FTP untuk pembaruan dan 'langsung' tidak akan berfungsi.

Jika Anda menetapkan 'langsung' di wp-config.php dan pengguna eksekusi PHP tidak memiliki izin menulis, Anda akan mendapatkan pesan Pembaruan Gagal dan tidak ada pop-up yang meminta kredensial FTP.

Danny
sumber