J'essaie d'exécuter un script .sh à partir de PHP, mais il ne s'exécute pas.
J'ai vérifié les journaux d'erreurs et j'obtiens l'erreur «sh: Permission refusée». J'ai vérifié sous quel utilisateur php est exécuté, et c'est fait sous l'utilisateur apache.
J'ai essayé de changer la propriété du .sh en utilisateur apache, mais il n'y a aucun résultat.
Au début, je pensais que c'était parce que le script était en dehors du répertoire www / dir, mais même lorsque je mets le script dans le même répertoire, l'erreur est toujours donnée.
Y a-t-il d'autres solutions à cela que d'ajouter l'utilisateur apache à la liste SUDOers?
Le script sh fonctionne bien si je le lance à partir de putty en utilisant la commande 'php filename.php'.
bash
permissions
script
php
Robin Presto
la source
la source
x
) sur le fichier? Avez-vous spécifié l'interpréteur de script dans une ligne de shebang?chmod 775 yourscript.sh
. Cela donnerar-x
(lire et exécuter) des autorisations aux utilisateurs "Autres" sur ce fichier.Réponses:
Essayez les suggestions suivantes:
php -r "echo exec('whoami');"
r-x
autorisations d'indicateur:chmod 755 dir; chmod 755 file
+s
indicateur (sudo) au fichier (non recommandé):chmod u+s file
,safe_mode
.include_path
, par exemple:php.ini
fichier:include_path ".:/usr/local/lib/php:/your/dir"
.htaccess
fichier:php_value include_path ".:/usr/local/lib/php:/your/dir"
/bin/sh
) pour votre utilisateur Apache (par exemple, vérifiez avec:)finger
.php.ini
n'utilise pas:disable_functions
forexec
functionselinux-utils
installé (un système Linux sécurisé ), vérifiezgetenforce
/setenforce
configuration comme décrit dans la réponse @Tonin .Dépannage:
php.ini
ouhttpd.conf
, n'oubliez pas de redémarrer le serveur Web,php.ini
toutes sortes d'erreurs (display_error
,error_reporting
, etc.).la source
Un tel problème peut dépendre du système d'exploitation que vous utilisez et de sa configuration. Certaines distributions Linux (principalement celles basées sur RHEL comme CentOS ou Fedora) sont livrées avec SELinux activé par défaut. Cela peut être vérifié et modifié temporairement avec les commandes suivantes:
Vous pouvez également avoir une vue plus complète de la configuration actuelle avec:
Cette modification peut être rendue permanente en modifiant le
/etc/selinux/config
fichier et en définissant laSELINUX
variable surpermissive
oudisabled
.Mais, la bonne façon de résoudre ce type de problème , si vous êtes effectivement dans cette situation, est de vérifier le
/var/log/audit/audit.log
fichier journal. Il contiendra tous les événements liés aux règles SELinux. Vous devrez alors probablement donner à votre script le contexte correct, c'est-à-dire être autorisé à être exécuté par l'utilisateur apache / php. La vérification du contexte de sécurité SELinux se fait avecls -Z
:Cette liste l'utilisateur, le rôle et le type de chaque fichier / répertoire. Ici, le
httpd_sys_script_exec_t
type donne aux fichiers du répertoire cgi l'autorisation d'être exécuté par httpd. Votre script shell devrait probablement avoir le même type.Vous pouvez également alimenter les
audit.log
lignes de laaudit2allow
commande. Il vous fournira les modifications nécessaires pour rendre SELinux heureux. Mais généralement, les changements suggérés doivent être effectués sur la politique SELinux elle-même, ce qui n'est pas ce que vous devez faire dans votre cas (néanmoins, cette sortie peut donner une idée de ce qui se passe).La page suivante décrit un problème similaire et différentes façons de le résoudre: http://sheltren.com/stop-disabling-selinux
la source
Je suis donc arrivé ici après avoir recherché un problème similaire sur Google. Je pensais laisser tomber que le commentaire sur SELinux m'indiquait dans la bonne direction.
Dans mon propre cas, j'utilisais un script de déploiement Git personnalisé qui utilise une commande shell. La commande fonctionne très bien sur BASH mais a ensuite "permission refusée" et "pas un référentiel" sur Git. C'était vraiment étrange et je suis passé par plusieurs correctifs jusqu'à ce que je tombe sur cette réponse.
root@ls:~# /usr/sbin/setenforce Permissive
résolu le problème pour moi.la source
Ma situation est légèrement différente, mais Google m'a amené ici, alors j'ai pensé partager ...
Mon serveur exécute Debian stable et tente d'exécuter un script shell a fonctionné une fois, puis les autorisations ont changé automatiquement en 644 et la prochaine tentative d'exécution du script a été obtenue
Permission denied
. Cela s'est avéré être un problème de serveur samba pour moi et je n'ai pas remarqué le modèle jusqu'à présent.L' autorisation QA Strange change lorsque l'enregistrement d'un fichier sur une partition Samba à partir d'un éditeur Windows était le correctif. Je ne connaissais pas l'
map archive = no
option même après avoir utilisé des partages de samba pendant une décennie.Quelque chose à propos de l'utilisation de Notepad ++ sur un bureau Windows changerait les autorisations des fichiers cibles en 675 au lieu de 775 lors de la configuration de l'umask.
la source
Exécuter des commandes root en PHP via Apache
J'ai une application web qui doit exécuter des commandes shells en tant que root dans une fonction PHP, et vous penseriez que ce serait assez simple ... mais il m'a fallu quelques googles pour obtenir tous les détails, alors voici mes notes pratiques sur il. C'est sur un système Linux exécutant Apache, et nous utiliserons "sudo" dans "shell_exec" pour exécuter les commandes.
L'essentiel est d'éditer le fichier / etc / sudoers, et généralement vous pouvez (en tant que root) utiliser la commande ”visudo” pour le faire.
Assurez-vous qu'apache peut exécuter des commandes ET ne nécessite pas de mot de passe:
Ensuite, vous devez commenter cette ligne:
Si vous ne le faites pas, vous verrez ces erreurs dans / var / log / secure: "désolé, vous devez avoir un tty pour exécuter sudo". Vous êtes maintenant prêt à partir et le code PHP est simple:
$ results = shell_exec ('sudo date');
la source