2011-04-13 4 views
0

J'ai créé plusieurs sites Web. Maintenant, je dois effectuer des tâches root. J'ai créé une plate-forme Web et installé. root possède tous les scripts dans /var/private-www/ et ils sont chmodded (0777). Au /var/private-www/test.php se trouve: <?php echo exec('whoami'); ?>. Ma config suPHP est la suivante:suPHP exécuter le script PHP en tant que root

[global] 
;Path to logfile 
logfile=/var/log/suphp/suphp.log 

;Loglevel 
loglevel=info 

;User Apache is running as 
webserver_user=root 

;Path all scripts have to be in 
docroot=/var/private-www 

;Path to chroot() to before executing script 
;chroot=/mychroot 

; Security options 
allow_file_group_writeable=false 
allow_file_others_writeable=false 
allow_directory_group_writeable=false 
allow_directory_others_writeable=false 

;Check wheter script is within DOCUMENT_ROOT 
check_vhost_docroot=true 

;Send minor error messages to browser 
errors_to_browser=false 

;PATH environment variable 
env_path=/bin:/usr/bin 

;Umask to set, specify in octal notation 
umask=0077 

; Minimum UID 
min_uid=0 

; Minimum GID 
min_gid=0 


[handlers] 
;Handler for php-scripts 
application/x-httpd-suphp="php:/usr/bin/php-cgi" 

;Handler for CGI-scripts 
x-suphp-cgi="execute:!self" 

Quand j'exercerai test.php dans mon navigateur Web, il est dit:.. www-data :(Pas root ... Même quand je l'exécute dans la ligne de commande En plus, je l'ai fait a2enmod suphp et apachectl restart , donc je pensais que cela fonctionnerait Comment puis-je résoudre ce problème

+0

Je suppose que vous savez à quel point ** c'est incroyablement dangereux ** d'exécuter n'importe quelle application accessible en ligne en tant que root, et combien de fois vous êtes sur le point d'entendre cela? – Charles

+0

Oui, mais comment est-il possible de faire des choses comme 'adduser' sur une plate-forme Web? : ( –

+0

un démon et une file d'attente de travail et/ou un travail cron peuvent facilement effectuer ces tâches – Charles

Répondre

1

Jetez un oeil à ces attaques d'applications web connues:.?. OWASP en tant que root et 0777 autorisations sont les deux choses que vous devriez essayer d'éviter

1

. Réponse courte: Don ' t fais ça.

Toutes les tâches qui doivent être exécutées à la racine doivent être exécutées via un travail cron. Pourquoi essayez-vous de cette façon, de toute façon?

1

Je suis regret va dire cela, et je ne veux pas être un facilitateur, mais:

Vous allez probablement avoir besoin de recompile. Les UID et GID minimaux ne sont pas (simplement) des éléments configurables, il y a aussi des vérifications minimales faites au moment de la compilation. Il n'y a également aucune garantie qu'il n'y a pas de contrôles codés en dur contre l'exécution en tant que root.

Vous devriez vraiment envisager une méthode alternative pour effectuer les tâches souhaitées qui n'implique pas d'exposer une application web s'exécutant en tant que root. Un travail cron qui exécute régulièrement des tâches inachevées ou un service de file d'attente de travail peut facilement atteindre ces objectifs. L'interface frontale exposée au Web n'a donc pas besoin de fonctionner en tant que root.

0

Ce n'est pas la réponse que vous cherchez, mais vous devriez considérer cela un peu:

Bien qu'il existe des cas où vous voudriez faire, courir tous vos scripts PHP en tant que root en général est une mauvaise pratique et vous pouvez faire face à un certain nombre d'obstacles.

Un moyen facile d'éviter cela est d'utiliser sudo. Ajoutez vos commandes à sudoers pour www-data et laissez vos scripts exécuter une commande externe avec sudo.

Même les scripts php externes peuvent être exécutés en tant que root via sudo. De cette façon, vous obtiendrez la séparation des privilèges.

Sinon, vous devrez exécuter apache + modphp en tant que root ou pirater le code de suphp.

Questions connexes