Obrir el SSH des d'una pàgina web
D'acord que tenir el SSH sempre obert és una mala política. Una manera de solucionar-ho en un servidor on estigui instal.lat un Apache i faci de servidor web és executar una pàgina PHP que executar un shell script que ens obre el servidor SSH. A més a més podria haver-hi un cron que faci que aquest servidor s'apagui automàticament al cap d'una hora.
Primer anem a executar un script senzill: prova_script.sh
ls -la > prova/hola.txt
Hem hagut de crear la carpeta prova amb permisos d'escriptura per a tothom. Aquí he de saber un script php quin usuari és el que l'executa.
El script php queda de la forma: prova_script.php:
<?php shell_exec("./prova_script.sh"); echo "hola"; ?>
abans però hem hagut de donar permís d'escriptura en aquesta carpeta:
$ chmod a+w prova
i efectivament funciona:
http://www.prova.com/prova_script.php http://www.prova.com/prova/hola.txt
veiem el llistat del directori
http://foro.noticias3d.com/vbulletin/showthread.php?t=163587
Volem executar la comana
sudo /etc/init.d/ssh start
des de PHP
Hem de donar permisos a l'usuari www-data, que és el que executa els scripts PHP de l'Apache:
1r $ sudo passwd www-data (i posem una clau a l'usuari www-data)
2n $ apt-get install sudo (a Ubuntu ja està instal.lat)
3r tenim dues opcions:
- Si estem a debian/ubuntu tenim el grup admin que té permís per utilitzar sudo. Hem d'afegir www-data a aquest grup, editant /etc/group i afegint a la línia del grupo admin l'usuari www-data
- (com ho he fet) Donem d'alta directamente l'usuario www-data a /etc/sudoers posant-li que pregunti la clau sempre i donant permís per executar qualsevol comanda, (fiquem "ALL"). Afegim una línia com aquesta:
# User privilege specification root ALL=(ALL) ALL www-data ALL=(ALL) ALL
Ara el script prova_script.php queda de la següent manera:
exec("echo **** | /usr/bin/sudo -u root -s /etc/init.d/ssh start"); exec("sudo -K"); // !IMPORTANTE! Destruim la sessió
on **** és el password de l'usuari www-data
Tot això funciona, comprovat. Ja puc obrir una sessió SSH. Lo correcta és quan acabi aquesta sessió SSH tancar manualment el servidor SSH, o bé un script que s'executi per exemple cada tres hores i que tanqui el servei SSH.
Amb aquesta tècnica, no cal dir-ho, es pot executar tasques administratives des de PHP, i es podria fer un webmin.
Tancar el SSH automàticament
La manera més senzilla de fer-ho és ficar en cl crontab la següent línia
50 * * * * * * * * root /etc/init.d/ssh stop
En aquest cas s'executa cada hora en el minut 50. Així sempre m'asseguro que el SSH està tancat. Per obrir-lo, ho faré a través de la web.