Apache, execution de commandes & sécurité

Apache, execution de commandes & sécurité - réseaux et sécurité - Linux et OS Alternatifs

Marsh Posté le 31-01-2009 à 16:57:58    

Bonjour,
 
Je suis en train de développer un site qui sera utilisé en interne par les secrétaires de mon département afin qu'elles puissent effectuer simplement des opérations qui nécessiteraient normalement des compétences en informatique. À un certain moment j'ai besoin que le serveur web se connecte à une machine distance (j'ai pensé par ssh) et effectue l'opération demandée par la secrétaire.
 
Tout ça fonctionne très bien sur ma machine de développement mais je me pose une question concernant la sécurité d'un tel acte sur le serveur de production. En effet, l'utilisateur apache sur le serveur a son shell en /bin/false, ce qui m'empêche d'effectuer certaines actions (par exemple il faut que je crée une clé ssh correspondante à cet utilisateur). À votre avis est-ce que c'est un gros problème de sécurité de lui donner un shell "normal" ?
J'ai regardé un peu sur google et soit je vois des gens qui n'hésitent pas à lancer des sudo depuis apache (donc pas top comme référence sécurité :D ) soit ça passe par un chroot (ce que je voudrais éviter par soucis de simplicité). Qu'en pensez vous?
 
Je spécifie que les ordinateurs auxquels le serveur doit se connecter font tourner un OpenSSH sur un port exotique, qui écoute uniquement l'IP du serveur et permet uniquement le login du compte "administrator" afin d'éviter au maximum les problèmes.
 
Merci beaucoup


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 31-01-2009 à 16:57:58   

Reply

Marsh Posté le 16-02-2009 à 14:25:31    

Je remonte :)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 19-02-2009 à 19:04:12    

Personne n'a jamais eu à exécuter une commande depuis un site web??


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 20-06-2009 à 18:38:40    

Up :d


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 20-06-2009 à 18:55:32    

Si c'est possible j'envisagerai plutot un système comme suit :
- programmation de l'execution de ton programme dans une DB
- le serveur qui doit executer la commande scrute régulièrement cette DB (via un crontab ou un daemon maison), si il doit executer une commande il le fait.
 
Comme ça tu gardes le controle sur ce qui est executé, et en cas de faille dans une te tes apps web tu ne prends pas de risques.


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
Reply

Marsh Posté le 20-06-2009 à 19:46:22    

Mmm intéressant en effet, je n'y avais pas pensé.
Par contre pourquoi une base de donnée et pas juste un fichier texte avec seulement un utilisateur (créé pour l'occasion) qui aurait les droits en exec (et personne à part root en écriture ?)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 20-06-2009 à 20:00:05    

Bah la DB c'est juste que c'est facile à utiliser et accessible facilement par tes deux serveurs (le serveur web et la machine qui execute tes commandes) sans avoir à utiliser de SSH/SCP, de NFS ou toutre autre système du type.
 
Disons que ton serveur web est W, et le serveur qui execute ta commande est X, moi je proposais :
- W place une entrée dans une DB
- X regarde régulièrement cette DB et si y a une execution programmée, il l'execute
 
Toi tu sembles vouloir faire :
- W place un truc dans un fichier
- un script sur W regarde si ce fichier est présent/contien qqchose, et si oui lance un prog en SSH sur X
 
C'est jouable aussi, mais je préfère la première solution, pas de SSH, pas de lien "direct" entre les deux machines (je sais pas si ca te parait évident, mais perso j'ai tendance à éviter les SSH/SCP automatisés entre deux serveurs, car ça créé une forme de dépendance).


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
Reply

Marsh Posté le 21-06-2009 à 08:47:50    

Salut,
Le truc c'est que je n'ai qu'un seul serveur à disposition. Et que je vois pas trop ce que ça apporte de séparer cette tâche sur 2 serveurs.
Donc moi je pensais simplement créer un fichier "executeCommand" quelque part sur le serveur, puis créer un cron qui check si ce fichier existe et si c'est le cas, exécute la commande en tant qu'utilisateur sans pouvoirs particuliers (histoire de ne pas tout compromettre en cas de pépin)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 21-06-2009 à 09:52:59    

Ben c'est toi qui parle de deux machines dans ton poste initial :

esox_ch a écrit :

Je suis en train de développer un site qui sera utilisé en interne par les secrétaires de mon département afin qu'elles puissent effectuer simplement des opérations qui nécessiteraient normalement des compétences en informatique. À un certain moment j'ai besoin que le serveur web se connecte à une machine distance (j'ai pensé par ssh) et effectue l'opération demandée par la secrétaire.


 :heink:


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
Reply

Marsh Posté le 21-06-2009 à 10:58:56    

Oui désolé, mon post est pas clair.
 
Donc en fait la commande générée par le serveur est envoyée (via SSH) à un ordinateur "de bureau".  
En fait le but de tout ça c'est qu'on a 6 ordinateurs "publics" que l'on réserve pour des invités étant dans notre institut pendant quelques heures/jours.  Ainsi quand ils arrivent, la secrétaire doit pouvoir leur créer un compte sur une de ces machines rapidement et sans pouvoir faire de conneries. J'ai donc mis en place un petit formulaire où elle entre le login/password voulu par l'invité et un script crée le compte correspondant par SSH sur l'ordinateur choisi.
Par contre ça devient un peu compliqué et lourd (à mon avis ) de devoir implémenter sur chaque ordinateur une routine qui irait contrôler l'existence d'un fichier (l'accès à la bdd est impossible car elle n'est pas accessible par le net pour des raisons de sécu)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 21-06-2009 à 10:58:56   

Reply

Marsh Posté le 21-06-2009 à 17:19:29    

Bien pourquoi tu met pas tes utilisateurs dans un annuaire ldap, après avec une page php c'est super simple de modifier les comptes dans l'annuaire

Reply

Marsh Posté le 21-06-2009 à 23:53:47    

tu peux utiliser  le module suexec d'apache

Reply

Marsh Posté le 22-06-2009 à 00:37:22    

les ordinateurs publics sont sous du linux? windows?

 

Donc tu veux créer un compte utilisateur sur des ordi. pour des "clients" c'est ca?

 

Les ordi. sont pas dans l'entreprise? Franchement, il serait pas plus simple de former la secretaire a creer un compte et a l'effacer directement sur la bécane? Tu te fait un ptit script bash pour un compte admin que la secretaire controle , elle le lance et roulez jeunesse.

 

Sinon, un annuaire ldap et qlq. scripts php comme a dit hppp c'est le plus simple IMO.

 

Sinon, tu peux aussi executer des scripts bash avec php : exec ("sh /path/to/script.sh" );  [:nikolai]

 

edit: ortho


Message édité par ipnoz le 22-06-2009 à 00:41:08
Reply

Marsh Posté le 22-06-2009 à 08:30:45    

Salut,
 
Le truc c'est que j'aimerais éviter de devoir créer un annuaire LDAP spécialement pour ces 4-5 ordinateurs ... ça me semble beaucoup de boulot pour pas grand chose à la fin


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 22-06-2009 à 12:24:08    

beaucoup de boulot? une mâtiné est c'est torché si ça se passe bien.

Reply

Marsh Posté le 22-06-2009 à 13:19:08    

Bah faut mettre en place le serveur LDAP, connecter les profiles des utilisateurs Windows à l'annuaire et après gérer le fait que si un utilisateur change d'ordinateur il arrivera à se logger (vu que tous sont connectés à LDAP) mais que ses dossiers n'auront pas suivi car stockés sur l'autre HDD, ou alors faut le gérer aussi et on a pas l'espace pour sur le serveur


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 23-06-2009 à 23:48:35    

Juste en passant: quelque soit le shell, pensez à utiliser pam_wheel: ça permet de limiter les su à groupe d'utilisateurs, histoire de pas se retrouver complètement en l'air en cas d'intrusion avec un compte applicatif. C'est si vite fait de se faire avoir à cause d'un mot de passe à la noix, une injection ou un compte oublié.

Reply

Marsh Posté le 24-06-2009 à 08:41:40    

D'accord merci :jap:


Message édité par esox_ch le 24-06-2009 à 08:41:46

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed