2017-06-09 1 views
0

Je travaille sur un site Web de contrôle d'accès restreint en parallèle à un site public. À l'heure actuelle, tous les paramètres d'accès utilisateur et de mot de passe de répertoire sont exécutés dans cPanel, cependant cPanel est un peu déroutant pour certains utilisateurs. Mais nous avons besoin dans le site d'accès restreint pour modifier la liste des personnes autorisées qui peuvent y accéder (et d'autres parties du site). Donc, j'essaie de configurer un script PHP sur le site à accès restreint pour faire quelque chose de similaire à cPanel afin de pouvoir éditer les fichiers passwd réels. Cependant, tout ce que j'ai essayé n'a pas fonctionné. Notre serveur web est LiteSpeed ​​not apache (ne peut pas changer cela en raison de la configuration de l'hôte partagé). Il utilise des fichiers passwd dans un dossier en dehors du dossier accessible par le Web, référencé par les fichiers .htaccess. Après avoir regardé les accès existants listés, je peux voir qu'il ne semble pas utiliser le hachage MD5 salé qui est indiqué dans les documents apache: le mot de passe haché qui est stocké est différent de ce que je pense que je devrais attendre (par exemple le sel est significativement plus de 2 caractères), et pour des raisons de sécurité, je suis réticent à intégrer un algorithme de hachage de mot de passe particulier dans mon code. J'ai essayé d'utiliser l'utilitaire htpasswd normalement fourni avec apache via exec ou shell_exec, mais il n'est pas installé ou pas accessible (et j'ai essayé plusieurs chemins différents - vérifier même son existence par file_exists retourne false dans tous les cas, donc à peine une surprise qu'aucun des fichiers n'a changé!). J'ai passé ces deux derniers jours à faire différentes recherches dans différents ensembles de documentation pour voir ce que font LiteSpeed ​​et/ou cPanel, mais mes recherches portent principalement sur les mots de passe de connexion cPanel et non sur les mots de passe de contrôle d'accès. J'ai essayé d'examiner le code source de cPanel mais je n'ai pas eu de chance de trouver quoi que ce soit.Besoin d'imiter le mot de passe d'accès/répertoire de l'utilisateur de cPanel

Si quelqu'un a une référence plus directe à un code source, ou quelque chose dans la documentation qui décrit comment exécuter la fonctionnalité d'ajout/de mise à jour/de suppression de mot de passe dans LiteSpeed, ce serait merveilleux. Même un moyen de déclencher plus directement la fonctionnalité cPanel serait utile (je sais qu'il y a une API mais le chemin vers elle est verrouillé sur mon hôte). Edit: Après le commentaire de Steve, je suis allé vérifier quelques éléments. Mes scripts peuvent voir les fichiers passwd indépendamment de l'emplacement du répertoire du script. Le fichier passwd a les permissions 644 comme je m'attendais, je prévois que l'utilisateur qui a les permissions d'écriture est celui que j'utilise pour me connecter à cPanel, qui n'est pas le nom d'utilisateur sous lequel le serveur fonctionne. Cela présente des difficultés supplémentaires. Éditer # 2: J'ai fait un test supplémentaire où j'ai créé un sous-répertoire temporaire protégé par mot de passe, puis ajouté un utilisateur directement du script PHP (copier-coller une des lignes existantes mais changé le nom d'utilisateur). Cela a bien fonctionné, le nouvel utilisateur a été ajouté, et cPanel a même vu le changement. Donc, les autorisations ne sont pas un problème. Edit # 3: J'ai joué et j'ai obtenu une chaîne en sortie de crypt qui correspond principalement à ce qui est dans le fichier passwd (j'ajouterai un message d'avertissement sur la page de réinitialisation pour m'assurer que le dernier algorithme est utilisé). Cependant, le sel recherché par la crypte est $ 1 $ < 8-char-rand-string> $ alors que ce qui est dans le fichier est $ apr1 $ < 8-char-rand-string> $. L'ajout de "apr" dans le sel provoque l'échec de la crypte :-(.

+1

Cpanel utilise largement les permissions Linux. Vous ne serez pas en mesure de le faire sur un hôte partagé. Avez-vous besoin d'utiliser réellement ce type de permissions? Si les utilisateurs du site n'ont accès au serveur que via le site web (comme d'habitude), il vous suffit de lancer votre propre couche de contrôle d'accès en php/sql. – Steve

+0

@Steve, juste pour être clair, je ne veux pas accéder à cPanel ou modifier les autorisations de cPanel. Je veux définir des permissions d'accès aux répertoires sous public_html, et des logiciels serveur tels qu'apache et litespeed intègrent ce type de mécanisme. Et j'aimerais éviter de construire ou d'utiliser notre propre contrôle d'accès si possible, pour limiter la maintenance. La référence à cPanel est que vous pouvez le faire dans cPanel, et je veux faire la même chose ou réutiliser cPanel pour le sous le capot. – greenbutterfly

Répondre

0

Pour futur e référence, mon édition n ° 3 était 95% du chemin vers la solution, que j'ai maintenant réussi à mettre en place et fonctionne. Je me suis finalement rendu compte que je devais juste laisser tomber le "apr" que htpasswd insère d'une manière ou d'une autre dans le sel pour la sélection d'algorithme, et emploie juste le sel avec le '$ 1 $' avant et '$' après. L'écriture dans le fichier passwd avec le nom d'utilisateur m'a donné accès et travaillé. La page inclut un avertissement aux futurs visiteurs de la page pour s'assurer que l'algorithme est mis à jour quand il le faut.

Le code de cryptage actuel est: crypt ($ password, '$ 1 $'. Substr (str_replace ('+', '.', Base64_encode (openssl_random_pseudo_bytes (12))), '0') J'espère que mon code est suffisamment sécurisé cryptographiquement. J'ai vu beaucoup trop d'extraits de code où le sel est généré en utilisant mt_rand ou équivalent ... (insérer shudder ici)

Edit: Ayant répondu à cela, j'ai depuis découvert le fichier PHP API cPanel n'est pas automatiquement installée. C'est un extra que vous devez télécharger, voir https://github.com/CpanelInc/xmlapi-php. Donc, je suis en train de jouer avec ça, et j'effacerai probablement le code que j'ai fait ... mais en le laissant ici dans cette réponse pour des raisons historiques ou dans l'espoir que cela aide quelqu'un d'autre.

0

Vous pouvez ajouter des adresses IP refusées/autorisées.htaccess dans le répertoire,

pour deny, allow

deny from all

permettent de (votre IP)

ou ajouter une règle de protection par mot de passe pour un répertoire particulier .htaccess.

AuthType Basic

AuthName "Mot de passe zone protégée"

AuthUserFile /path/to/.htpasswd

require-utilisateur valide

quelque chose comme: http://www.htaccesstools.com/articles/password-protection/

+0

Cette infrastructure est déjà là, les répertoires sont déjà protégés par mot de passe. J'ai besoin de modifier les fichiers passwd de la même manière que cPanel le gère. Désolé si ce n'est pas 100% clair de mon message original, je vais modifier pour clarifier cela. – greenbutterfly