¿Qué problemas de seguridad debo tener al configurar FS_METHOD en "directo" en wp-config?
3 respuestas
- votos
-
- 2015-05-27
Asíes comoentendí laidea de la API de archivos de WordPress . Sinoes correcto,votaen contra :)
Estábien. Si carga un archivo,este archivotiene unpropietario. Si carga su archivo con FTP,inicie sesión yel archivo serápropiedad del usuario de FTP. Comotiene las credenciales,puedemodificarestos archivos através de FTP. Elpropietarionormalmentepuedeejecutar,eliminar,alterar,etc.el archivo. Por supuesto,puede cambiaresto cambiando los permisos de archivo .
Si carga un archivo usando PHP,el usuario de Linux,queestáejecutando PHP,eselpropietario del archivo. Este usuario ahorapuedeeditar,eliminar,ejecutar,etc.el archivo. Estoestábien siempre y cuando solo usted seael usuario,queestáejecutando PHPen su sistema.
Supongamos que seencuentraen un host compartido "mal" configurado. Muchagente ejecuta sus sitios web PHPen este sistema. Digamos que solo un usuario de Linuxestáejecutando PHPparatodasestaspersonas. Uno de los webmasters deeste host compartidotiene malasintenciones. Él ve supágina y descubre la ruta a suinstalación de WordPress. Porejemplo,WP_DEBUG seestableceen verdadero y hay unmensaje deerror como
[warning] /var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php on line 1
"¡Ja!" diceel chicomalo. Veamos,siestetipo ha configurado
FS_METHOD
endirect
yescribe un script como<?php unlink( '/var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php' ); ?>
Dado que solo un usuarioestáejecutando PHP yeste usuariotambiénes utilizadoporel chicomalo,puede alterar/eliminar/ejecutar los archivosen su sistema si los ha subido através de PHP y adjuntando al usuario de PHP comopropietario.
Su sitio ha sidopirateado.
O,como diceel Codex:
Muchos sistemas de alojamientotienen el servidor webejecutándose como un usuario diferente queelpropietario de los archivos de WordPress. Cuandoesteesel caso,un proceso deescritura de archivos desdeel usuario del servidor webtendráel resultado archivospropiedad de la cuenta de usuario del servidor weben lugar de la cuenta de usuario. Estopuedeprovocar unproblema de seguridaden el alojamiento compartido. situacionesen las que varios usuarios compartenelmismo servidor webpara diferentes sitios.
This is just, how I understood the idea of the WordPress File API. If it is wrong, please downvote :)
Okay. If you upload a file, this file has an owner. If you upload your file with FTP, you login and the file will be owned by the FTP user. Since you have the credentials, you can alter these files through FTP. The owner can usually execute, delete, alter etc. the file. Of course, you can change this by changing the file permissions.
If you upload a file using PHP, the linux user, which is executing PHP is owning the file. This user can now edit, delete, execute etc. the file. This is okay as long as only you are the user, who is executing PHP on your system.
Lets assume, you are on a "poorly" configured shared host. A lot of people run their PHP websites on this system. Lets say only one linux user is executing PHP for all these people. One of the webmasters on this shared host has bad intentions. He sees your page and he figures out the path to your WordPress installation. For example, WP_DEBUG is set to true and there is an error message like
[warning] /var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php on line 1
"Ha!" the bad boy says. Lets see, if this guy has set
FS_METHOD
todirect
and he writes a script like<?php unlink( '/var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php' ); ?>
Since only one user is running PHP and this user is also used by the bad boy he can alter/delete/execute the files on your system if you have uploaded them via PHP and by this attached the PHP user as the owner.
Your site is hacked.
Or, as it says in the Codex:
Many hosting systems have the webserver running as a different user than the owner of the WordPress files. When this is the case, a process writing files from the webserver user will have the resulting files owned by the webserver's user account instead of the actual user's account. This can lead to a security problem in shared hosting situations, where multiple users are sharing the same webserver for different sites.
-
- 2016-07-14
¿Cuálesel riesgo?
En un host compartidomal configurado,el PHP de cada cliente seejecutará comoelmismo usuario (digamos
apache
para discusión). Esta configuraciónes sorprendentemente común.Siestáen un host deestetipo y usa WordPressparainstalarel complementomedianteel acceso directo a archivos,todos los archivos del complementopertenecerán a
apache
. Un usuario legítimoen elmismo servidorpodría atacarteescribiendo un script PHP queinyecta códigomalignoen tus archivos de complementos. Suben su script a supropio sitio web y solicitan su URL. Su código se vio comprometido con éxitoporque su secuencia de comandos seejecuta comoapache
,elmismo queposee los archivos de su complemento.¿Quétiene que ver
FS_METHOD 'direct'
conesto?Cuando WordPressnecesitainstalar archivos (como un complemento),utiliza get_filesystem_method () funciónpara determinar cómo acceder al sistema de archivos. Sino define
FS_METHOD
,elegirá un valorpredeterminadopara usted; de lo contrario,usará su selección siempre quetenga sentido.El comportamientopredeterminado intentará detectar si seencuentraen unentorno de riesgo comoel que describí anteriormente,y si cree queestá a salvo,utilizaráel
'direct'
. Eneste caso,WordPress creará los archivos directamente através de PHP,haciendo quepertenezcan al usuarioapache
(enesteejemplo). De lo contrario,recurrirá a unmétodomás seguro,como solicitarle las credenciales SFTP y crear los archivos como usted.FS_METHOD = 'direct'
pide a WordPress que omitaesa detección de riesgo y siempre cree archivos utilizandoelmétodo'direct'
.Entonces,¿por qué usar
FS_METHOD = 'direct'
?Desafortunadamente,la lógica de WordPresspara detectar unentornoen riesgoes defectuosa yproducetantofalsospositivos comofalsosnegativos. ¡Ups! Lapruebaimplica la creación de un archivo y asegurarse de quepertenece almismopropietario queel directorioen el que vive. Se supone que si los usuarios son losmismos,PHP seestáejecutando como supropia cuenta yes seguroinstalar complementos comoesa cuenta. Si son diferentes,WordPress asume que PHP seejecuta como una cuenta compartida ynoes seguroinstalar complementos comoesa cuenta. Desafortunadamente,estas dos suposiciones son conjeturasfundamentadas que confrecuenciaestaránequivocadas.
Usaría
define('FS_METHOD', 'direct' );
en unescenario defalsopositivo comoeste: ustedesparte de unequipo confiable cuyosmiembros cargan archivos através de supropia cuenta . PHP seejecuta como supropio usuarioindependiente. WordPress asumirá queestees unentornoen riesgo ynoestarápredeterminadoen elmodo'direct'
. En realidad,solo se comparte con usuarios de confianza y,comotal,elmodo'direct'
es seguro. Eneste caso,debe usardefine('FS_METHOD', 'direct' );
para obligar a WordPress aescribir archivos directamente.What's the risk?
On a poorly configured shared host, every customer's PHP will execute as the same user (let's say
apache
for discussion). This setup is surprisingly common.If you're on such a host and use WordPress to install the plugin using direct file access, all of your plugin files will belong to
apache
. A legitimate user on the same server would be able to attack you by writing a PHP script that injects evil code into your plugin files. They upload their script to their own website and request its URL. Your code is successfully compromised because their script runs asapache
, the same one that owns your plugin files.What does
FS_METHOD 'direct'
have to do with it?When WordPress needs to install files (such as a plugin) it uses the get_filesystem_method() function to determine how to access the filesystem. If you don't define
FS_METHOD
it will choose a default for you, otherwise it will use your selection as long as it makes sense.The default behavior will try to detect whether you're in an at-risk environment like the one I described above, and if it thinks you're safe it will use the
'direct'
method. In this case WordPress will create the files directly through PHP, causing them to belong to theapache
user (in this example). Otherwise it'll fall back to a safer method, such as prompting you for SFTP credentials and creating the files as you.FS_METHOD = 'direct'
asks WordPress to bypass that at-risk detection and always create files using the'direct'
method.Then why use
FS_METHOD = 'direct'
?Unfortunately, WordPress' logic for detecting an at-risk environment is flawed and produces both false-positives and false-negatives. Whoops. The test involves creating a file and making sure it belongs to the same owner as the directory it lives in. The assumption is that if the users are the same, PHP is running as your own account and it's safe to install plugins as that account. If they're different, WordPress assumes that PHP is running as a shared account and it's not safe to install plugins as that account. Unfortunately both of these assumptions are educated guesses that will frequently be wrong.
You would use
define('FS_METHOD', 'direct' );
in a false positive scenario such as this one: you are part of a trusted team whose members all upload files through their own account. PHP runs as its own separate user. WordPress will assume that this is an at-risk environment and will not default to'direct'
mode. In reality it's only shared with users you trust and as such'direct'
mode is safe. In this case you should usedefine('FS_METHOD', 'direct' );
to force WordPress to write files directly. -
- 2017-02-23
Existe una situación "bien configurada"en la que "directo"generaráproblemas.
Tambiénesposible configurarel alojamiento WP compartido con usuarios deejecución PHPno compartidos,diferentes de los usuarios depropiedad de archivos/directorios. Así queterminas con los archivospropiedad de user1 yel código PHP seejecuta comophp-user1.
Enesa situación,los complementospirateados oel código central (a)nopuedenescribir (oincluso leer,según lospermisos) de los directorios de otros usuarios;(b)nopuedeescribir este archivos de usuario y,por lotanto,nopuede agregar códigotroyano al código delnúcleo o del complemento.
Entonces,siel alojamientoestá configurado deesamanera,DEBE usar FTPpara las actualizaciones y "directo"nofuncionará.
Si configura 'directo'en wp-config.php yel usuario deejecución de PHPnotiene permiso deescritura,obtendrámensajes Update Failed yno apareceráninguna ventanaemergente solicitando las credenciales de FTP.
There is a 'well-configured' situation where 'direct' will lead to problems.
It is also possible to configure shared WP hosting with non-shared PHP execution users, different from the file/directory ownership users. So you end up with the files owned by user1 and the PHP code is executed as php-user1.
In that situation, hacked plugins or core code (a) can't write to (or even read from, depending on permissions) other users' directoriess; (b) can't write this user's files and so can't add trojan code to the core or plugin code.
So if the hosting is set up like that, you MUST use FTP for updates and 'direct' will not work.
If you set 'direct' in wp-config.php and the PHP execution user does not have write permission, you'll get Update Failed messages and have no pop-up asking for FTP credentials.
Recientementetuve unproblemaen el quenopudeinstalarel complemento WP Smush Proporquenotengo las opciones de Instalaciónmanual o Instalación con un clic disponibles.
Meencontré con estapublicación que sugirió ajustar la configuraciónen
wp-config.php
. Agregué la configuración sugerida,sinembargo la queparece ser lamásimportantees:define('FS_METHOD', 'direct');
Lo queme gustaría saberes quépreocupaciones reales deberíatener acerca de configurar
FS_METHOD
endirect
. ¿Existen otras alternativasparainstalarel complemento?Estoes lo que dice la documentación oficial: