E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/
W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied)
W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)
sudo: no tty present and no askpass program specified
sudo: no tty present and no askpass program specified
Log sortie : (Sortie.log)
total 20K
drwsrwsrwt 2 www-data root 4.0K Jun 29 01:37 .
drwsrwsrwt 34 www-data www-data 4.0K Jun 29 01:34 ..
-rwxrwxrwt 1 www-data root 0 Jun 29 01:37 Erreurs.log
-rwxrwxrwt 1 www-data root 0 Jun 29 01:37 Sortie.log
-rwxrwxrwt 1 www-data root 443 Jun 21 00:26 config.php
-rwxrwxrwt 1 root root 1.8K Jun 25 02:26 dossier.php
-rwxrwxrwt 1 root root 296 Jun 29 01:33 heb.sh
Reading package lists...
sudo: no tty present and no askpass program specified
ça signifie que sudo voudrait demander un mot de passe mais ne le peux pas pour les raisons évoquées dans le message.
il faudrait, mais je ne suis pas sûr que cela ne crée pas une faille de sécurité, que l'utilisateur qui appelle le script (www-data ?) puisse exécuter sudo sans mot de passe.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
je suggérais de configurer /etc/sudoers pour permettre à l'utilisateur qui exécute le script (via une interface web, en général www-data) de lancer sudo sans mot de passe.
mais, faille de sécurité...
je ne fais aucune tâche d'administration par web, je ne saurais pas te renseigner davantage.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Cela dit de nos jours les systèmes de fichiers ne sont t'ils pas journalisés?
Désolé je viens du monde ext2 où on attendait avec impatience un système de fichier journalisé comme NTFS pour donner les accès appropriés à chaque programme ou fichier....J'ai l'impression que personne n'utilise cette fonctionnalité qui pourtant de nos jours est présente.
quelque chose m'a échappé ? je ne vois pas le lien entre le sujet et la journalisation du système de fichiers.
Donner des droits administrateur à un simple user...A l'époque c'était attendu comme le Messie.
Donc pourquoi sudo est toujours si présent...Perso je ne comprends pas. (d'ailleurs sudo n'existait pas à l'époque, il y avait seulement su)
Après pour le sujet pourquoi utiliser du shell sur du PHP je ne comprends pas, le PHP peut faire office de shell tranquillement.
Bref au cas où ext4 permet les ACL, comme quelques systèmes de fichiers avant lui.
edit: Bref tout ce que je vois c'est des problèmes de permissions, permission denied...Et à l'époque c'était un peu gavant de toujours devoir passer par root pour lancer l'exécution de beaucoup de scripts....C'est pour ça que je parle de la journalisation et surtout des ACL.
Les ACL pour a2ensite et systemctl ? Ce serait une très mauvaise idée que de toucher cela à ces binaires AMHA. Le genre de truc à soit vraiment induire une faille de sécurité, soit rendre instable le système.
La solution pourrait être de lancer le script avec sudo, et de donner à l'utilisateur (www-data) le droit de lancer uniquement ce script avec sudo. Il faudra alors bien faire attention à ce que le script ne soit pas modifiable (pas de droit en écriture), à utiliser le chemin absolu du script lorsque tu l'appelles, et enfin à s'assurer que toutes données fournies par l'utilisateur passées au script soient saines.
Mais, de toute manière, l'utilisation de exec est comme toujours déconseillée.
Peut-être que si tu nous expliquais clairement ce que tu souhaites faire et que tu nous donnes le «vrai» script shell (à quoi sert la variable passée au script?), alors on pourrait te fournir des solutions plus sécurisée (même optimisée) avec par exemple l'utilisation d'une tâche cron qui tourne assez fréquemment et qui va chercher les info nécessaires à son exécution dans une base de données (qui existe déjà d'ailleurs).
Les ACL c'est surtout pour donner des droits d'accès à des fichiers, pas à des commandes. (comme sur Windows en fait)
Même si on peut le faire pour des commandes c'est très déconseillé pour la sécurité je dirais.
Normalement si l'administration est bien faite on a que très peu de fichiers qui appartiennent à root, à part les fichiers de démarrage et les fichiers systèmes, rajouter un user sur un fichier donne l'accès à ce fichier, pas à la commande en elle même.(mais bon là on a pas le script en question donc difficile de répondre, encore plus pour moi qui n'ai pas du scripter depuis 20 ans)
Par contre utiliser php en ligne de commande je l'ai fait quelques fois.
Cette réponse trouvée sur stackoverflow me semble la plus complète et détaillée.
sudo by default will read the password from the attached terminal. Your problem is that there is no terminal attached when it is run from the netbeans console. So you have to use an alternative way to enter the password: that is called the askpass program.
The askpass program is not a particular program, but any program that can ask for a password. For example in my system x11-ssh-askpass works fine.
In order to do that you have to specify what program to use, either with the environment variable SUDO_ASKPASS or in the sudo.conf file (see man sudo for details).
You can force sudo to use the askpass program by using the option -A. By default it will use it only if there is not an attached terminal.
edit: Bien sûr cette histoire de sudo ne résoudra pas le fait que la permission de lire les packages n'est pas permise par l'user qui se nomme ftpuser ou le groupe ftpgroup.
Même si par défaut souvent apache est exécuté en user www-data du groupe www-data. (ou autre à voir dans les processus suivant la distribution)
Pour sudo tu peux executer
sudo visudo
éditer le fichier puis mettre en dernière ligne.
www-data : ALL NOPASSWD: /path/to/heb.sh
Mais je trouve ça assez crade comme solution comparé à ajouter l'user ou le groupe sur l'ACL des fichiers que tu veux lire spécifiquement.
Bon j'ai adapté mon fichier sudoers sur ubuntu 18.04, mais il y'a une erreur autre part.
Tout fonctionne bien sauf que dans donc le fichier suprasupra.conf se créer bien dans /etc/apache2/sites-available avec tout ce qu'il le faut dedans et tout.
Mais le sauf que le sudo a2ensite $vhost et le sudo systemctl reload apache2, ne se font toujours pas.
Quelqu'un a une idée svp ?
Merci d'avance.
Voici les adaptations :
Je rappel que mon php et mon script shell se trouve dans le même dossier.
ERROR: No site found matching *:80>\r\n!
ERROR: Site suprasupra; does not exist!
ERROR: Site $username=$vhost; does not exist!
ERROR: Site $vhost does not exist!
ERROR: Site = does not exist!
ERROR: Site $username..conf; does not exist!
ERROR: Site $path does not exist!
ERROR: Site = does not exist!
ERROR: Site /var/www/.$vhost; does not exist!
ERROR: Site file_put_contents(/etc/apache2/sites-available/.$vhost_conf, does not exist!
ERROR: Site "<VirtualHost does not exist!
ERROR: Site ServerName does not exist!
ERROR: Site $username.test.bernrnrnServerAdmin does not exist!
ERROR: Site admin@test.bern does not exist!
ERROR: Site DocumentRoot does not exist!
ERROR: Site $pathrnrnrn does not exist!
ERROR: Site ErrorLog does not exist!
ERROR: Site /var/logs/apache2/error.logrn does not exist!
ERROR: Site CustomLog does not exist!
ERROR: Site /var/logs/apache2/access.log does not exist!
ERROR: Site combinedrnrnrn</VirtualHost>"); does not exist!
ERROR: Site $output does not exist!
ERROR: Site = does not exist!
ERROR: Site exec("sudo does not exist!
ERROR: Site /var/www/hebergeur/heb.sh does not exist!
ERROR: Site $vhost_conf"); does not exist!
ERROR: Site exit; does not exist!
vhost=$(grep vhost dossier.php | sed -e 's/\$vhost\s*=\s*\"\(.*\)\"/\1/')
?
Rajoute:
echo -n "$vhost"
À la ligne 11 de ton script et regarde Sortie.log.
Tu te rends compte que tu appelles un script shell depuis un fichier qui lis ce propre fichier pour extraire la valeur d'une variable de ce fichier assignée en dur? Passe là directement au script...
Tu passes toujours un argument à ton script ("$vhost_conf") par contre mais tu ne l'utilises pas.
Encore une fois, ou veux-tu aller avec tout ça? Générer un vhost dynamiquement après chaque création d'utilisateur? Je pense qu'il y a bien plus simple et qu'on pourra bien mieux t'aider si tu nous expliquais ton but.
Bien voilà mon but et qu'à la création d'un utilisateur cela crée son dossier personnel dans /var/www/ avec comme user ftpuser & ftpgroup et que sa ajoute son compte avec son accès dans mon pureftpd-mysql.
Que sa créer l'user sql et sa table.
Que cela créer le fichier vhost en ".conf" dans le dossier /etc/apache2/sites-available/ et que cela active le vhost dans le dossier /etc/apache2/sites-enabled/ et que cela reload la configuration d'apache2.
Genre me permettre de créer un hébergement complet via formulaire.
J'ai ajouté celà à la ligne 11 de fichier heb.sh :
Cela me crée bien dans cette exemple le fichier suprasupra.conf correctement dans le dossier /etc/apache2/sites-available/ , mais parcontre cela ne l'active pas dans /etc/apache2/sites-enabled/ et cela ne reload pas apache2
Est-ce que cela vous aide un peu à comprendre dans quel sens j'essaie d'aller svp ?
ça sera juste créé en www-data normalement...Pour qu'Apache y ait accès.
Pour que les 2 logiciels y ait accès de façon mutualisée en lecture et écriture, je pense encore que les ACL pourraient te faciliter la vie, c'est un peu pour ce genre de chose qu'on attendait les ACL à l'époque.(pour qu'un fichier ou un dossier n'ai pas qu'un seul user ou group)
Les ACL c'est pas compliqué...Par exemple pour ajouter un groupe ftpgroup à tout un répertoire de façon récursive (option -R), le -m est pour modifier.
setfacl -Rm g:ftpgroup:rw Repertoire-relatif/
edit: et pour les lire ACL d'un fichier c'est aussi facile.
getfacl test
# file: test
# owner: op414
# group: op414
user::rwx
user:bernard:rwx
user:patrick:r--
group::rwx
mask::rwx
other::--
Le fichier de base appartient à op414 et au group op414, mais user, bernard et patrick peuvent y accéder, de façon plus ou moins permissive...Quel bonheur de voir cette fonctionnalité que je n'avais pas à l'époque :)
- Edité par maroufle34 6 juillet 2021 à 12:26:14
Executer un shell par php
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique