una servidor reiniciar pagina montar iniciar httpd directorio configurar como linux apache

reiniciar - iniciar servidor apache linux



¿Hay alguna manera de iniciar/reiniciar/detener Apache Server en Linux como usuario no root? (11)

Me gustaría saber si es posible para un usuario no root en Linux (estoy usando openSUSE) ejecutar Apache sin usar el comando sudo. Tenga en cuenta que el usuario está en el mismo grupo que apache (wwwrun).
Gracias por adelantado.


Creo que deberías poder hacer esto otorgando acceso de ejecución al grupo que posee el programa de control de Apache (por ejemplo, "chmod g + x apachectl"). Si esto no funciona solo, intente también configurar el bit SUID del propietario en el programa (algo similar a "chmod u + s apachectl").

El primer paso permite a los usuarios de su grupo wwwrun ejecutar el programa apachectl. El segundo paso hace que cuando el grupo ejecuta el programa, se ejecute con los privilegios de propietarios del programa.

Avíseme si esto funciona, estoy un poco oxidado con la ejecución de archivos SUID, pero puedo ayudar a investigar más si todavía tiene problemas.

Sin embargo, asegúrese de entender las consecuencias de configurar el bit SUID antes de hacer esto.


Los dos problemas que puedo pensar que debes superar son:

  1. Permisos en archivos de registro: estos ya pueden estar configurados para permitir que wwwrun acceda a ellos, pero a menudo es un problema.

  2. Usuario no root que accede a un puerto privilegiado (80): no está seguro si / cómo puede cambiar esto.


Los problemas señalados anteriormente por benlumley, es decir, archivos de registro y puertos reservados, pueden superarse fácilmente configurando el directorio de registro y el puerto en su httpd.conf.


Puede ejecutar Apache como cualquier usuario. Solo asegúrese de que esté configurado para usar solo los recursos permitidos (directorios, archivos y lo más importante, escuchar en un puerto no privilegiado).

Para que aparezca en el puerto estándar 80 de HTTP (que está privilegiado) tendrá que configurar, como una redirección raíz a su servidor Apache real. La forma más fácil es probablemente usar iptables. Por ejemplo, si su servidor Apache está escuchando en el puerto 8080:

iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -j REDIRECT --to-port 8080

Si no puede configurar el servidor de esta manera (o haga que su administrador de sistema lo haga de una vez para siempre) tendrá que usar un puerto no privilegiado (algo así como Listen 8080 ) y acceder a él usando una URL que se parece a http: // www. example.com:8080/


Respuesta corta: no

La razón es que solo root puede vincular puertos por debajo de 1024.

Larga respuesta: echa un vistazo a http://www.debian-administration.org/articles/386

Una vez que supere el problema con los puertos, no creo que haya más problemas. Solo recuerda que el usuario al que se ejecuta apache necesita tener acceso de escritura a los archivos de registro y tal vez también a otros archivos.

Sin embargo, si lo ejecuta sin sudo, es probable que el generador no pueda cambiar el usuario, por lo que apache se ejecutará como el usuario que lo inicia, en lugar del usuario apache.

¿Pero cuál es la razón por la que no quieres ejecutar sudo? Solo el proceso de generación se está ejecutando como raíz, el resto se está ejecutando bajo el usuario apache.


Puede "setuid" para permitir que los usuarios no root ejecuten apachectl como root (sin tener que autenticarse como root).

Ejemplo

Editar: Debería mencionar que necesita acceso de administrador para configurar esto en primer lugar :-)


Si tiene sudo instalado, puede crear un archivo: /etc/suduers.d/apache2reload con el siguiente contenido:

username ALL=NOPASSWD:/usr/bin/service apache2 reload


Puede ver sus privilegios con sudo -l, desde aquí puede encontrar que tiene acceso al comando de reinicio, pero tal vez no iniciar y detener.


Algún enlace que encontré dio la respuesta más beneficiosa para esto. Técnicamente, todavía está actuando como root pero puedes modificar los archivos apache2 y apache2ctl (si también usas el segundo) para cargar archivos. Esto le permite ejecutarlos con acceso raíz pero seguir siendo de un usuario que tiene los mismos permisos, manteniendo la seguridad intacta (a menos que apache o apache2ctl fueran más locos, lo que dudo que sean).


puedes usar el supervisor para ejecutar el apache


Si no desea dar acceso a sudo, también puede crear un programa contenedor de setuid. Por ejemplo:

httpdctrl.c

#include <stdio.h> #include <sys/types.h> #include <unistd.h> #include <signal.h> #include <strings.h> // allow start/stop/restart of apache by non-root users int main(int argc, char **argv) { char *cmd, *cmd2, *usage; // UPDATE THIS LINE: cmd = "/your/path/to/httpd/sbin/apachectl"; cmd2 = "apachectl"; usage = "Usage: COMMAND [start|stop|restart]/n"; if ( argc != 2 ) { printf(usage); exit(1); } setegid(0); seteuid(0); setgid(0); setuid(0); if ( strncmp(argv[1], "start", 5) == 0 ) { if (execl(cmd, cmd2, "start", (char*)0) < 0) { perror("Error"); } } else if ( strncmp(argv[1], "stop", 4) == 0 ) { if (execl(cmd, cmd2, "stop", (char*)0) < 0) { perror("Error"); } } else if ( strncmp(argv[1], "restart", 7) == 0 ) { if (execl(cmd, cmd2, "restart", (char*)0) < 0) { perror("Error"); } } else { printf(usage); exit(1); } exit(0); }

Actualiza la ruta en:

// UPDATE THIS LINE: cmd = "/your/path/to/httpd/sbin/apachectl";

Luego compila y cambia los permisos con

gcc -o httpdctrl httpdctrl.c sudo chown root:root httpdctrl sudo chmod u+s httpdctrl

Ahora el httpdctrl es propiedad de root, y setuid lo ejecutará como root.

IMPORTANTE: Asegúrese de que el script de inicio / detención y todos los directorios principales también son propiedad de root. También elimine el acceso de escritura a archivos y directorios para ''otros''. Básicamente, no desea que alguien pueda editar o cambiar los directorios / archivos que se ejecutan con la raíz.