EJECUTAR COMANDOS LINUX DESDE PHP

AdjuntoTamaño
Plain text icon sudoers.txt684 bytes
Plain text icon php_ini.txt45.27 KB
Plain text icon httpd.conf_.txt34.07 KB

Forums: 

SALUDOS cORDIALES A TODOS

Estoy tratando y trando y no puedo ejecutar un comando linux desde php para lo cual he modificado el archivo /etc/sudoers para darle permisos al apache.

Adjunto acontinuación mis archivos
/etc/sudoers
php.ini
httpd.conf

LA FUNCION PHP DESDE AL QUE QUIERO EJECUTAR EL COMANDO du es el siguiente:

function Get_Tamanio_Path($path_carpeta)
{
//echo $path_carpeta ---->aqui imprimo haber que me llega y me llega /etc/gonzalo (sin espacios al principio ni al final)

$com = "du -sh $path_carpeta";
$pasa= exec("$com"); // aqui ya probe tambien $pasa= exec($com); sin comillas
$cant=strlen($pasa);
// echo $cant-----//aqui el valor que imprime tambien es cero a pesar que ejecutando du -sh /etc/gonzalo desde la consola de linux me devuelve un valor mayor que cero
return $cant;

}// fin Get_Tamanio_Path($username)

$tam=Get_Tamanio_Path("/etc/gonzalo");

echo "El tamaño de la carpeta es:",$tam;/// el valor que me devuelve es 0;

//EL SOFTWARE QUE UTLIZO Y LAS VERSIONES SON ALS SIGUIENTES:

Linux Centos 4.4

Php 5.1.6

Mysql 5.0.27

Apache 2.0.52

POR FAVOR ESPERO PUEDAN AYUDARME PRONTO,AGRADECERE LOS APORTES DE TODOS , PERO ESPECIALMENTE DE LOS QUE ANTERIORMENTE HAYAN REALIZADO ESTA TAREA , MUCHAS GRACIAS.

Att.

BuscaSolus

Sigue sin funcionar

Imagen de omegajack

Hice al cambio que me sugeriste y sigue sin funcionar

Mira, el script sigue sin funcionar, te digo lo que hago es invocarlo asi
exec("sudo -u apache /usr/sbin/asterisk -rx 'sip show peers'" , $result);
foreach ($result as $line)
echo "$line\n";

Lo que me hace ruido es que cuando ejecuto el comando "sudo -l" me arroja lo siguiente
[root@fmm archivos]# sudo -l
User root may run the following commands on this host:
(ALL) ALL

No se supone me tendria ke arrojar lo mismo pero tambien con el usuario apache ¿Estoy mal? es decir... desde mi perspectiva creo que no esta tomando en cuenta la linea donde decimos que el usuario apache puede ejecutar tambien todos los comandos

Disculpa olvide mencionar

Imagen de omegajack

Olvide mencionar que el comando tail me muestra
[root@fmm archivos]# tail -f /etc/httpd/logs/error_log
[Thu Aug 28 08:08:43 2008] [notice] mod_python: Creating 4 session mutexes based on 256 max processes and 0 max threads.
>>> sudoers file: syntax error, line 77 <<<
sudo: parse error in /etc/sudoers near line 77
[Thu Aug 28 08:08:43 2008] [notice] Apache/2.2.3 (CentOS) configured -- resuming normal operations
[Thu Aug 28 08:29:36 2008] [notice] caught SIGTERM, shutting down
[Thu Aug 28 08:39:43 2008] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Thu Aug 28 08:40:23 2008] [notice] Digest: generating secret for digest authentication ...
[Thu Aug 28 08:40:23 2008] [notice] Digest: done
[Thu Aug 28 08:40:24 2008] [notice] mod_python: Creating 4 session mutexes based on 256 max processes and 0 max threads.
[Thu Aug 28 08:40:24 2008] [notice] Apache/2.2.3 (CentOS) configured -- resuming normal operations

Ese error de sintaxis, estrictamente la linea numero 77 del archivo sudoers es la linea marcada en negritas, pero es ovbio que el error es por la linea nueva que agregue del apache(en kursivas)
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
%apache ALL=(ALL) NOPASSWD: ALL

Prueba: apache 

Imagen de deathUser

Prueba:


apache ALL=(ALL) NOPASSWD: ALL

Yo lo tengo así y funciona sin problemas para el usuario apache.

Mira que no tengas caracteres extraños, si dudas borra la línea y escríbela nuevamente a mano.

bye
:)

Sudo -l

Imagen de omegajack

Mira, ya hice lo que me dijiste, incluso borre el archivo completo y lo volvi a hacer(usando como base el de otro servidor con las mismas caracteristicas, de hecho no tienen gran cosa estan recien formateados y con el centos instalado) pero bueno, ahora ya no me marca error pero sigue como que ignorando el usuario apache, cuando le doy un sudo -l me muestra solo el root

User root may run the following commands on this host:
(ALL) ALL

No entiendo por que no me muestra el usuario apache, mira te posteo mi archivo remarcando lo que yo agregue, y espero en un ratito ke tengas libre le eches un ojo please, la verdad ya ando desesperado por que no quiere quedar.

## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
##
## This file must be edited with the 'visudo' command.

## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhap using
## wildcards for entire domains) or IP addresses instead.
# Host_Alias FILESERVERS = fs1, fs2
# Host_Alias MAILSERVERS = smtp, smtp2

## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem

## Command Aliases
## These are groups of related commands...

##Asterisk
Cmnd_Alias ASTERISK = /usr/sbin/asterisk, /usr/sbin/suexec

## Networking
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconf$

## Installation and management of software
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

## Services
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig

## Updating the locate database
Cmnd_Alias LOCATE = /usr/sbin/updatedb

## Storage
Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount

## Delegating permissions
Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp

## Processes
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall

## Drivers
Cmnd_Alias DRIVERS = /sbin/modprobe

# Defaults specification

#
# Disable "ssh hostname sudo ", because it will show the password in clear.
# You have to run "ssh -t hostname sudo ".
#
Defaults requiretty

Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
_XKB_CHARSET XAUTHORITY"
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
apache ALL=(ALL) NOPASSWD: ALL
%apache ALL=(ALL) NOPASSWD: ALL

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## Allows people in group wheel to run all commands
# %wheel ALL=(ALL) ALL

## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL

## Allows members of the users group to mount and unmount the
## cdrom as root
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
# %users localhost=/sbin/shutdown -h now

Espero si me puedes postear el tuyo en caso de que no veas algun error en el mio... o si hiciste algo mas en el httpd.conf o el php.ini para que funcionara... Saludos y gracias de antemano

Según el manual de

Imagen de deathUser

Según el manual de sudo:

[quote]
-l The -l (list) option will list out the allowed (and forbidden) commands for the invoking user on the current host.
[/quote]

Así que si lo ejecutas con root la respuesta es la esperada.

En cuanto a mi archivo sudoers, lo único que agregué al final fue la línea correspondiente al usuario apache.

Si ya no te reporta error en la ejecución de los comandos, referentes al sudoers, se supone que esa parte está ya OK. Sería interesante que ejecutes otros comandos, para ver si es que los está ejecutando correctamente (no se, créate un script que lance unas cuantas líneas para ver si las captura adecuadamente), redirecciona la salidad de error hacia un archivo para que la puedas ver luego, etc ...

Suerte ...

bye
:)

sudo log

Imagen de omegajack

Heme aqui, hoy se nuevo con el mismo problema puesto que sigue sin funcionar, soy demasiado necio como para desistir, anoche buscando en la red encontre un script que ejecuta comandos de asterisk desde la web y efectivamente el hilo negro esta en el sudo, dado que al inicio las es´pecificaciones del script dicen

"Make sure to edit /etc/sudoers accordingly, for example using 'visudo' add an entry like:
apache ALL = NOPASSWD: /usr/sbin/asterisk -rx database * "
Web: http://www.voip-info.org/wiki/view/Asterisk+tips+managing+CID+names

Por lo que modifique el sudoers pero para ke pueda utilizar los comandos de asterisk es decir, lo deje asi
apache ALL = NOPASSWD: /usr/sbin/asterisk -rx *

dejando abierta la posibilidad de usar cualquier comando de asterisk, por otro lado en el script tengo
exec("sudo /usr/sbin/asterisk -rx 'sip show peers'" , $result);
foreach ($result as $line)
echo "$line
";

Pero pasa algo curioso que la verdad no logro entender es que en el log del http con un tail me arroj esto
[Fri Aug 29 07:07:11 2008] [notice] Apache/2.2.3 (CentOS) configured -- resuming normal operations
Password:
Password:

Osea me pide un password pero segun yo eso ya lo defini para ke no lo pida con la linea
apache ALL = NOPASSWD: /usr/sbin/asterisk -rx *

O alguien sabe que significa esto?

Edita el usuario apache para

Imagen de deathUser

Edita el usuario apache para que le des un shell decente (debe tener un nologin o algo por el estilo) has un:


su apache

Y ejecuta los comandos con sudo en la consola a ver que carajos pasa ...

Suerte...

bye
:)

PD: con la configuración que te había pasado en teoría te debería ejecutar cualquier comando como root sin solicitar password.

Solucionado

Imagen de omegajack

Bien aqui les dejo el procedimiento que use para poder ejecutar comandos de asterisk desde la web, basado en usar otro usuario.

# useradd astuser
# passwd astuser
# nano /etc/sudoers

-- Agregar las siguientes lineas
##Asterisk
Cmnd_Alias ASTERISK=/usr/sbin, /var/run
astuser ALL=(ALL) NOPASSWD: ALL

# chown -R astuser:astuser /var/run
# chown -R astuser:astuser /var/log
# chown -R astuser:astuser /var/lib
# chown -R astuser:astuser /usr/sbin

# nano /etc/selinux/config
--Y cambiar
SELINUX=enforcing
--Por
SELINUX=disabled

--En los scripts a usar se debe de iniciar el asterisk invocando al usuario astuser
exec("sudo -u astuser asterisk");

--Ejemplo de comandos
exec("sudo -u astuser asterisk -rx 'sip show peers'" , $result);
foreach ($result as $line)
echo "$line
";

Espero a alguien le sea de utilidad

No se que implicaciones

Imagen de deathUser

No se que implicaciones adicionales te va a traer esto:

# chown -R astuser:astuser /var/run
# chown -R astuser:astuser /var/log
# chown -R astuser:astuser /var/lib
# chown -R astuser:astuser /usr/sbin

Estas cambiando de propietario y grupo todos los comandos y archivos bajo esos directorios, no me parece adecuado, sobre todo lo que está bajo /var/lib y /usr/sbin

bajo /var/log están los logs y muchos de los programas que escriben al log lo hacen como root, estos no van a tener problemas, pero los que no lo hagan como root potencialmente van a dar problemas.

en el /var/run algo similar, pero con pids y más información de ejecución de programas.

Te sugiero que revises si no te está dando problemas algún otro servicio ...

Creo que te faltó deshabilitar el SELINUX con la configuración anterior con el usuario apache ...

Suerte ...

bye
:)

Tenias razon

Imagen de omegajack

Efectivamente tenias razon, me trajo complicaciones al correr los demas programas, pero ya encontre la solucion, leyendo la configuracion del asterisk cai en lo siguiente para solucionarlo:

Crear una carpeta en /var/run/ donde en los archivos de configuracion del asterisk le indicare ke ahi mismo mande todos los archivos necesarios para correr .pid y .ctl... y a esa carpeta darle el propietario astuser.

Ahora el problema es que no puedo correr mi mysql... supongo es a causa de todo el relajo que hice con los propietarios pero bueno eso es menos preocupante, googleare un rato para ver como solucionarlo, saludos

Páginas