Ben il suffit de prendre un peu de temps ... Voila sans sudo : Ton démon : cat watch-iptrusted.sh #!/bin/bash watchdir=/var/www/monsite/data/ basedir=/var/www/monsite while : ; do inotifywait $watchdir|while read path action file; do if [ ! -z "$file" ]; then echo "file : "$file if [ -a $watchdir/addip.txt ]; then ip="$(cat $watchdir/$file)" [[ "$ip" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]] || { rm $watchdir/$file;break; } echo "ipset add trusted-ip "$ip >> /var/www/html/site/vpn/trusted-ip.sh ipset add trusted-ip $ip 2>&1 elif [ -a $watchdir/removeip.txt ]; then ip="$(cat $watchdir/$file)" [[ "$ip" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]] || { rm $watchdir/$file;break; } sed -i "/$ip$/d" /var/www/html/site/vpn/trusted-ip.sh ipset del trusted-ip $ip 2>&1 elif [ -a $watchdir/cleanip.txt ]; then echo "file2 : "$file > /var/www/html/site/vpn/trusted-ip2.sh ipset flush trusted-ip 2>&1 fi rm $watchdir/$file ipset list trusted-ip > $basedir/current_trusted.txt fi done done exit 0 Ton script php : cat index.php <html> <body> IP Detection : <a href="http://checkip.dyndns.org" target="popup" onclick="window.open('http://checkip.dyndns.org/','popup','width=400,height=100'); return false;"> Verify on checkip site </a> <br> <?php $ip = $_SERVER['REMOTE_ADDR']; echo "<br>"; echo "<form method='post' action='index.php'>"; echo " <label for='fname'>IP address detected : </label>"; echo " <input type='text' id='fname' name='fname' value='$ip' maxlength='15' size='15'>"; echo " <input type='submit' NAME='validation' value='Trust it !'>"; echo "</form>"; echo "<form method='post' action='index.php'>"; echo " <label for='fname'>IP address to remove : </label>"; echo " <input type='text' id='fname' name='fname' value='' maxlength='15' size='15'>"; echo " <input type='submit' NAME='removing' value='Remove it !'>"; echo "</form>"; if (isset($_POST['validation'])) { $ip = $_POST['fname']; file_put_contents('data/addip.txt', $ip); echo "$ip is trusted now"; } if (isset($_POST['removing'])) { $ip = $_POST['fname']; file_put_contents('data/removeip.txt', $ip); echo "$ip is delete now"; } if (isset($_POST['clean'])) { file_put_contents('data/cleanip.txt', ''); } echo "<br><br>"; sleep(1); echo nl2br(file_get_contents("current_trusted.txt")); echo "<br>"; echo "<form method='post' action='index.php'>"; echo " <input type='submit' NAME='clean' value='Clear all !'>"; echo "</form><br>"; ?> <BR> <BR> <CENTER><input type="button" value="Refresh Page" onClick="location.replace('index.php');"></CENTER> <BR> <BR> </body> </html> Seul une ip dans le fichier fait réagir le démon puis le fichier est détruit. Ludo. Le 02/05/2024 à 18:30, Vincent Tondellier via FRsAG a écrit :
On jeudi 2 mai 2024 18 h 11 min 34 s CEST, Ludovic Levet via FRsAG wrote:
J'ai jamais dit que cela est parfait, mais je laisse pas un démon dès plus sensible ouvert à tout-va ...
sudo me semble pire ...
Après t'as plein d'autres solutions , comme passer par un VPN temporairement pour accéder a ton serveur et mettre ta règle iptable, ou via un shellinabox, ou un gacamole, ou un wireguard, ou tout combiner ensemble ou...
Bref plein de choses possibles mais pas de sshd direct sur le net.
La sécurité d'un ensemble n'est pas pas la somme, mais le minimum de la sécurité de chaque pièce.
C'est certainement possible de faire quelque chose pour ajouter de la sécurité sans ouvrir de failles béantes, mais ce n'est pas le cas ici : script php troué, serveur troué ...
Vincent.
Le 02/05/2024 à 17:47, Vincent Tondellier via FRsAG a écrit :
Hello,
mod_security ou pas, il n'empêche que ce bout de code est un bon exemple de ce qu'il ne faut surtout pas faire.
Aucune validation des entrées, exécution de commandes a travers un shell et pas de quote des entrées, sudo depuis l'utilisateur www-data ...
https://xkcd.com/327/ version shell
Et la surface d'exposition devient apache + php + sh + sudo + ipset + ssh au lieu d'un ssh bien audité, très peu pour moi. ...
_______________________________________________ Liste de diffusion du %(real_name)s http://www.frsag.org/
-- ------------------------------------------------------------------------------------------------------------------------- Ce message inclut une signature numérique. Il certifie que l'expéditeur et le contenue du message sont authentiques. Si votre logiciel de messagerie est compatible, Il doit garantir que le document n'a pas été altéré entre l'instant où l'auteur l'a signé et le moment où le lecteur le consulte. Loi n°2000-230 du 13 mars 2000 Art. 1316, 1316-1, 1316-2, 1316-3, 1316-4 du Code civil. La présence d'un fichier joint 'smime.p7s' (fichier signature) indique que votre client messagerie n'est pas compatible. -------------------------------------------------------------------------------------------------------------------------