2016-12-12 1 views
1

VEUILLEZ PRENDRE NOTE DE LA REMARQUE DANS LE CODE APRES FI! Pour la création d'un compte utilisateur via le navigateur, je laisse php shell_exec exécuter un script bash. Même si je suis certain (en vérifiant/etc/shadow) que le nom d'utilisateur n'est pas pris, le script le dit. Le script tel qu'il est actuellement exécute la commande useradd et le nom d'utilisateur apparaît dans/etc/shadow. On dirait qu'il exécute le useradd avant, puis vérifie si l'utilisateur existe?Le script bash renvoie l'utilisateur existant mais l'utilisateur n'existe pas

php

$command = "sudo ./createclientcert.sh $userName $userPass"; 
if(shell_exec("$command echo $?") == 0){ 
echo 1; 
} 

shellscript

#!/bin/bash 

newclient() { 
getent passwd $1 > /dev/null 2&>1 
if [ $? -eq 0 ]; then 
echo $? 
else 
useradd $1 
echo $1:$2 | chpasswd 
fi 
# PLEASE TAKE NOTE!! funny thing is that when code (that had nothing to do with the account creation and was to be removed) that came after fi is in place it works well. 
} 

newclient "$1" "$2" 
+0

'getent passwd $ 1>/dev/null 2 ​​&> 1' ne peut pas être correct. Il aurait dû être 'getent passwd $ 1>/dev/null 2> & 1' – sjsam

+0

Aussi, ne devrait pas' shell_exec ("$ comm echo $?") 'Ont été' shell_exec ("$ command echo $?") ' ?? – sjsam

+1

@sjsam $ comm était une faute de frappe. Désolé. en effet 2 &> 1 devrait être 2> & 1 quand je googlecheck rapidement, mais je l'ai copié et collé à partir d'un autre poste. –

Répondre

0

Essayez quelque chose comme ceci:

#!/bin/bash 

if useradd "$1" >/dev/null ; then 
    echo $1:$2 | chpasswd >/dev/null 
    # user created 
    exitcode=0 
else 
    # user already exists 
    exitcode=1 
fi 

# do stuff regardless if user created or not 
7z a /var/www/html/download/$1.zip /var/www/html/download/$1.ovpn 

# the script would exit with the exit code of latest executed command 
# if you dont explicitly give another exit code: 
exit $exitcode 

PHP

$output = system("sudo ./createclientcert.sh \"$userName\" \"$userPass\"", $exitcode); 

switch($exitcode) 
{ 
    case 0: 
    echo "User created." 
    break; 
    case 1: 
    echo "User already exists."; 
    break; 
} 
+1

:-) THNX! Edite cette paix de php '$ output = system ("sudo ./cert.sh $ userName $ userPass $ exitcode");' et cela fonctionne maintenant comme il se doit. Je suis très reconnaissant! –

+0

Désolé. J'étais trop rapide. Ça ne marche pas. J'étudie. –

+0

Quel est votre script actuel? Avez-vous essayé le script shell ci-dessus? –

0

Quelle est la sortie lorsque vous exécutez ce sur le système?

getent passwd [username] 

Il est possible qu'un record pour cet utilisateur existe dans l'un des éléments suivants, comme getent recherche ces lieux, non seulement /etc/shadow:

Les bases de données qu'il recherche en sont: ahosts, ahostsv4, ahostsv6, alias, éthers (adresses Ethernet), groupe, gshadow, hôtes, netgroup, réseaux, passwd, protocoles, rpc, services et shadow.

Source: https://en.wikipedia.org/wiki/Getent

Essayez de supprimer l'utilisateur:

userdel -r [username] 

-r va supprimer tous les fichiers de l'utilisateur ainsi que l'utilisateur lui-même. Ensuite, essayez à nouveau d'exécuter le script PHP.

+0

Ce n'est pas une machine de production avec beaucoup d'utilisateurs. Donc, le fait que je suis certain qu'un nom d'utilisateur n'existe pas est basé sur cela. –

+0

Et je l'ai vérifié en l'émettant via le terminal. En entrant 'getent passwd jajaja' il saute à l'autre ligne sans sortie. L'utilisateur jajaja est évidemment un nom d'utilisateur inexistant inventé. :) Et prenez note de la remarque que lorsque tout autre code est en place, tout s'exécute bien. Une chose bizarre étant donné que le code n'avait rien à voir avec la création de compte d'utilisateur mais avait un effet de retard ou quelque chose? –

0

Pas vraiment la réponse mais ça marche en laissant le stupide 7z en place. Bizar !!

#!/bin/bash 

newclient() { 
getent passwd $1 >/dev/null 2>&1 
if [ $? -eq 0 ]; then 
echo $? 
else 
useradd -p encrypted_password $1 
#useradd $1 
echo $1:$2 | chpasswd 
fi 
# if i remove the following line or comment it out the script starts malfunctioning 
7z a /var/www/html/download/$1.zip /var/www/html/download/$1.ovpn 
} 

newclient "$1" "$2"