Archives pour l'étiquette restriction

Limiter les droits d’un utilisateur sur Debian/Ubuntu (lshell)

Plop à tous ….

Lorsque l’on doit partager/administrer une machine, on a souvent peur que les individus fassent de belles boulettes sur la machine en question (surtout si l’accès est partagé entre plusieurs utilisateurs).

Une technique consisterait à faire un chroot via SSH (si ça vous tente ^^ mais c’est super long).

Ou passer par un truc du genre dans /etc/ssh/sshd_config :

Subsystem sftp internal-sftp
Match user nomUser
         ChrootDirectory /home/nomUser
         X11Forwarding no
         AllowTcpForwarding no
         ForceCommand internal-sftp

Qui bloque la plupart des commandes et n’autorise que le sftp …

Pour les admins flemmards, il existe une solution : lshell, on peut choper un .deb sur le site et une fois installé, il n’y a pas grand chose à faire :

Modifier le fichier /etc/lshell.conf (assez facile à comprendre), avec des paramètres du genre :
Pour les commandes autorisées :

allowed         : ['ls','echo','cd','ll','svn','vi','rm']

Pour kiker l’utilisateur après un certain nombre d’erreurs :

warning_counter : 2

dans ce cas, après 2 erreurs, la connection SSH est coupée.

On peut chrooter un utilisateur :

path            : ['/var/www/']

Pour obliger un utilisateur à utiliser ce shell, il y a 2 cas :
On modifie un utilisateur :

usermod --shell /usr/bin/lshell nomUser

On créer un utilisateur

adduser nomUser --shell /usr/bin/lshell nomUser

Et voilà … connectez vous avec un utilisateur « lshellé » (pour ma part chrooté et limité aux commandes « allowed » plus haut) :

You are in a limited shell.
Type '?' or 'help' to get the list of allowed commands
kikoo:~$ 
kikoo:~$ ls
index.php  license.txt  robots.txt  svnup.php  system
kikoo:~$ cat /etc/ssh/sshd_config
*** forbidden path -> "/etc/ssh/sshd_config"
*** You have 0 joker(s) left, before getting kicked out.
This incident has been reported.
kikoo:~$ svn up
À la révision 12.
kikoo:~$ echo "LOL"
LOL
kikoo:~$ echo "LOL" > /etc/ssh/sshd_config
*** forbidden synthax -> "echo "LOL" > /etc/ssh/sshd_config"
- Kicked out -
Connection to 1.3.3.7 closed.

Voilà … bonne administration 😉

ModSecurity mise en place de restrictions sur les règles de restrictions ^^

Bonsoir …

Bé voilà, si vous avez installé la dernière version de ModSecurity (>2.5) avec les generic_attack en filtre, vous avez sûrement remarqué que phpMyAdmin ne fonctionne plus (hé oui, ça fait du SQL Injection :p), mais les blogs peuvent aussi ne plus fonctionner (XSS, voir Command/File Injection si vous tentez de poster du code sur votre blog), ce n’est que dernièrement, que j’ai remarqué ces erreurs, sans trop y faire gaffe (à part que là, ben ça remplissait les logs avec une IP que je connaissait très bien … la mienne, le méchant pirate, je vais porter plainte sur 127.0.0.1 ^^, je suis sûr que la procédure judiciaire passerait 😉).

Donc pour remédier à ce problème, les gars qui ont dév la bête sont intelligent, ils avaient prévu le coup avec :

SecRuleRemoveById et SecRuleRemoveByMsg

Ce qui donnent donc pour PhpMyAdmin :

<Location /phpmyadmin/> 
     SecRuleRemoveByMsg "Blind SQL Injection Attack"
     SecRuleRemoveByMsg "SQL Injection Attack"
</Location>

et pour WordPress (partie administration)

<Location /wp-admin/> 
     SecRuleRemoveByMsg "Blind SQL Injection Attack"
     SecRuleRemoveByMsg "SQL Injection Attack"
     SecRuleRemoveByMsg "Cross-site Scripting (XSS) Attack"
     SecRuleRemoveByMsg "Remote File Access Attempt"
     SecRuleRemoveByMsg "System Command Injection"
</Location>

Pour la partie commentaires … à voir suivant la confiance que vous avez en vos visiteurs ^^ (tentez pas de poster des commentaires sur mon blog avec des commandes systèmes … vous seriez surpris sur mon niveau de confiance 😉 … y’a quand même des gars qu’ont tenter de brute-forcer mon phpmyadmin, bande de naab!!!).

A mettre dans l’un de vos fichiers de conf d’apache, et vous ne tomberez plus sur les erreurs 501 (protocole non implémenté) que cela générait.

Voilà … Bonne nuit

Accès restreint sur certain ports dans le temps

Bijour à tous

Ben voilà … pour des raisons de sécurité évidente, il est souvent utile de bloquer l’accès sur certains ports depuis l’extérieur, et parfois on se rend compte qu’il faut tout de même laisser un accès sur ces services depuis l’extérieur (genre un TP qui nécessite une base de données … Oracle pour ne pas le citer), et bien sûr, on a pas envie de laisser l’accès ouvert en continu, d’autant plus que si les personnes ont une ip dynamique faire une liste des ip et sous-réseau autorisés risque d’être long, donc la solution (j’avoue que j’ai pas cherché si des logiciels faisaient ça) :

Faire 2 scripts :
– l’un qui reset les règles du firewall en tâche cron une fois par jour qui contiendrait quelques chose du genre :

#!/bin/bash
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
#les ports dont on veut bloquer l'acces par défaut ici le port 1337 allez savoir pourquoi 😉
iptables -A INPUT -p tcp --dport 1337 -j DROP

-l’autre qui autorise les ip contenu dans un fichier (en taches cron toutes les 5 minutes) du genre :

#!/bin/sh
IP_FILE="/var/www/ip.txt"
if [ -f $IP_FILE ]
then
        for i in `cat $IP_FILE`
        do
        #t=`echo $i|tr "-" " "`
        if [ -n $i ]
        then
                t="iptables -I INPUT 1 -p tcp -s $i --dport 1337 -j ACCEPT"
                #echo $t
                $t
        fi
        done
        rm $IP_FILE
fi

et hop, faut juste faire un script PHP qui rajoute les IPs (voir les ports, mais faudra modifier le script d’ajout des IP) dans le fichier txt pointé par le fichier txt du genre :

 $f=fopen("ip.txt","a+");
fwrite($f,$_SERVER['REMOTE_ADDR']."\n");
fclose($f);

Bien sûr, il faudra mettre une authentification dessus … sinon, c’est la porte ouverte à tout et n’importe quoi. Et voilà, vous pouvez dormir sur vos deux oreilles maintenant 😉

A noter que si vous le faites pour votre serveur SSH, faudrait pas que votre script plante, sinon, vous perdez tous les accès à votre serveur, mais ça peut permettre de pas mal réduire les tentatives de brute force, puisque par défaut personne ne pourra ce connecter dessus, il faudra juste passer par votre page web pour autoriser votre IP a y accéder et hop …

En espérant que ça puisse être utile 😉 Bon week-end.