tengo otra pregunta
cuando me encuentro en la terminal de ubuntu escribo lo siguiente:
gksu gedit /etc/misarchivos/configuracion.conf
y eso me abre el archivo con privilegios para editarlo y luego guardarlo como administrador "su"
ocurre lo siguiente, ...... eso mismo necesito realizarlo desde PHP con código, he encontrado que con fopen("/etc/misarchivos/configuracion.conf") puedo abrir un archivo,
intentando hacerlo con fopen al hacerlo correr me sale el error que no tengo permiso, claro es porque me falta gksu gedit para tener privilegio de administrador "su"
Ahora por otro lado encontre lo siguiente:
$ultima_linea = system('ls', $retval);
system dice que me ejecuta comandos desde php, lo he probado y si funciona, quise combinar los dos
fopen() y system() , pero no obtuve un buen resultado.
Alquien me puede ayudar por favor, o darme alguna guia ?????
Respuesta
como ejecutas el script PHP, desde consola o mediante el navegador??
Aver si te sirve esto:
Desde la consola con el cliente php puedes ejecutar:
sudo php /var/www/fichero.php
puedes combinarlo junto con system y hacer lo que necesitas.
Otra respuesta
¿Por que no cambias los permisos antes de ejecutar tu script de PHP?
chmod 777 /etc/misarchivos/configuracion.conf
Si no quieres cambiar los permisos, puedes executar tu archivo de php con sudo:
sudo php micodigo.php
Si quieres evitar usando una contraseña, puedes editar tu archivo /etc/sudoers:
sudo visudo
Y añadir esta linea:
%users ALL = NOPASSWD: cat
/etc/misarchivos/configuracion.confEntonces, puedes usar esto en tu script de php:
exec("sudo
cat
/etc/misarchivos/configuracion.conf", $a);Donde $a tiene el contenido del archivo en un array.
Y otra respuesta
En general es una mala idea poner permisos para todo el mundo. Yo suelo
decir que también que es una idea peresoza por no buscar mejores
caminos.
Por lo que se indica , asumo que su código PHP se está ejecutando vía
el servidor web apache. Y por ahí debe ir la solución.
El tema de permisos de acceso a un archivo, es validado por el sistema
verificando la propiedad del archivo y la propiedad del proceso. En la
mayoría de los sistemas el servidor web (por tanto PHP) se ejecutan bajo
un usuario determinado (propietario del proceso), en Debian www-data, en
CentOS apache.
Entonces si quiero tener un script PHP que ejecutado via web pueda
editar un archivo, todo lo que tengo que hacer es que mi usuario
www-data/apache sea dueño de ese archivo. Esto es bastante permisivo, y
en general la seguridad recomienda dar el permiso mínimo necesario. Asi
que en lugar que sea dueño del archivo es mejor que sólo pertenezca a su
grupo.
Traduciendo a órdenes sería así: (asumiendo que el usuario bajo el cual
corre el servidor web es 'apache')
chown root.apache /etc/misarchivos/configuracion.conf
chmod u=rw,g=rw,o= /etc/misarchivos/configuracion.conf
A partir de este momento un script PHP como se menciona antes podría
hacer fopen("/etc/misarchivos/configuracion.conf") y modificar el
archivo.
Para averiguar que usuario es dueño del proceso "servidor web" se puede
hacer: ps aux | grep http
En mi máquina obtengo esto:
[root@hardy ~]# ps aux | grep http
apache 1668 0.0 6.1 43084 22812 ? S Aug17
0:04 /usr/sbin/httpd
apache 10130 0.0 6.8 45276 25144 ? S Aug18
0:04 /usr/sbin/httpd
root 19690 0.0 4.9 35804 18200 ? Ss Jun05
10:07 /usr/sbin/httpd
apache 21769 0.0 6.5 44112 24000 ? S Aug17
0:05 /usr/sbin/httpd
apache 26457 0.0 6.1 42944 22752 ? S Aug18
0:03 /usr/sbin/httpd
apache 28042 0.0 5.4 41460 20136 ? S 09:31
0:00 /usr/sbin/httpd
root 29736 0.0 0.1 1836 492 pts/0 S+ 13:00 0:00 grep
http