Tips systèmes
Sommaire
Liens externe
https://jeznet.org/Wiki/CodeSnippets
MYSQL
Créer compte user :
CREATE USER <user> IDENTIFIED BY '<password>';
créer un compte utilisateur + database
GRANT ALL PRIVILEGES ON <database>.* TO '<user>'@'<host>' IDENTIFIED BY '<password>'; GRANT ALL PRIVILEGES ON <database>.* TO '<user>'@'<host>' IDENTIFIED BY PASSWORD '*<password_hash>';
voir les comptes utilisateurs
select host, user, password from mysql.user;
dumper une base et la compresser a la volée
mysqldump -h $HOST -u $USER -p $DATABASE | gzip > dump_$DATABASE.sql.gz
importer dans MySQL une base gzippée
gunzip -c < dump_$DATABASE.sql.gz | mysql -h $HOST -u $USER -p $DATABASE
Import MySQL over SSH
ssh $HOST "mysqldump -u $USER1 -p$PASS1 $DB1" | mysql -u$USER2 -p$PASS2 $DB2
Import GZIP MySQL over SSH On the fly
ssh $HOST "mysqldump -u $USER1 -p$PASS1 $DB1 | gzip" | gunzip -c | mysql -u$USER2 -p$PASS2 $DB2
Dump MySQL Database, compress, export, and import - One liner
mysqldump -u $USER1 -p$PASS1 $DB1 | pigz | ssh $HOST "gunzip -c | mysql -u$USER2 -p$PASS2 $DB2"
Obtenir la taille de toutes les bases de données
SELECT table_schema "DB Name", Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" FROM information_schema.tables GROUP BY table_schema;
Obtenir la taille d'UNE base de données mentionnée
SELECT table_schema "DB Name", Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" FROM information_schema.tables WHERE table_schema = "YOUR_DATABASE_NAME" GROUP BY table_schema;
Convertir toutes les tables InnoDB en InnoDB (lors de l'ajout du parametre innodb_file_per_table=1 par exemple)
for table in $(mysql --batch information_schema -e "select CONCAT(TABLE_SCHEMA,'.',TABLE_NAME) FROM TABLES WHERE ENGINE='InnoDB';" | grep -v "CONCAT(TABLE_SCHEMA,'.',TABLE_NAME)") do mysql --batch -uadmin -p$(cat /etc/psa/.psa.shadow) -e "ALTER TABLE ${table} ENGINE=InnoDB;" done
SYSTEME
beaucoup de connexions
netstat -pant | grep -i esta | awk '{print $5}'| cut -d ":" -f 1| sort |uniq -c
fait le total d'espace disque utilisé par les vhosts
for i in `grep -i documentroot /opt/applis/httpd/conf/httpd.conf | grep -v "#"| awk '{ print $2}'`;do du -sh $i;done
fouiller un fichier de log entre 2 dates
awk '/Apr 1 11:00:00/,/Apr 1 16:15:00/{print}' /var/log/httpd/httpd_access.log awk '$0>=from&&$0<=to' from="Apr 1 11:00:00" to="Apr 1 16:15:00" /var/log/httpd/httpd_access.log
Liste les répertoires et les trie par taille
du -h --max-depth=1 | perl -e 'sub h{%h=(K=>10,M=>20,G=>30);($n,$u)=shift=~/([0-9.,]+)(\D)/; return $n*2**$h{$u}}print sort{h($b)<=>h($a)}<>;'
tar over ssh
tar zcvf - /path | ssh root@server "cat > /backup/wwwdata.tar.gz"
tar over ssh untar
tar zcvf - /path/to/directory/ | ssh root@inrage.fr "cd /path/to/ && tar zxvf - "
vitesse d'un pipe
command1 | cpipe -vt | command2
Linux force reboot (magical way)
echo 1 > /proc/sys/kernel/sysrq echo b > /proc/sysrq-trigger
CHROOT
Créer le nécessaire du chroot
mount /dev/<devicepX> /mnt mount --bind /dev /mnt/dev mount --bind /dev/pts /mnt/dev/pts mount -t proc /proc /mnt/proc mount --bind /run /mnt/run mount -t sysfs /sys /mnt/sys mount --bind /sys/firmware/efi/efivars /mnt/sys/firmware/efi/efivars chroot /mnt /bin/bash
Démonter le tout
umount /mnt/sys/firmware/efi/efivars umount /mnt/sys umount /mnt/run umount /mnt/proc umount /mnt/dev/pts umount /mnt/dev umount /mnt
IPTABLES
diagramme de flux
http://www.linuxchannel.net/board/board_files/alpha/phpIqSLS2/iptables.gif
Base firewall
*filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] -A INPUT -m comment --comment "Global Rules" -A INPUT -f -j DROP -A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP -A INPUT -m state --state INVALID -j DROP -A INPUT -p tcp -m tcp --dport 25 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 50 --connlimit-mask 32 --connlimit-saddr -j DROP -A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -m comment --comment "Public access Rules" -A INPUT -p tcp -m multiport --dports 25,80,110,143,443,465,587,993,995 -j ACCEPT -A INPUT -p udp -m udp --dport 53 -j ACCEPT -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT -A INPUT -m comment --comment "Access Client" -A INPUT -m comment --comment "Dutiko : Admin & Monitoring" -A INPUT -s 176.31.89.162/32 -p icmp -m icmp --icmp-type 8 -j ACCEPT -A INPUT -s 62.210.45.142/32 -p icmp -m icmp --icmp-type 8 -j ACCEPT -A INPUT -s 176.31.89.162/32 -p tcp -m multiport --dport 21:22,5666,49152:49252 -m comment --comment "Supervision" -j ACCEPT -A INPUT -s 176.31.89.162/32 -p udp -m udp --dport 161 -j ACCEPT -A INPUT -s 62.210.45.133/32 -p tcp -m multiport --dport 22,9102 -m comment --comment "Backup" -j ACCEPT -A INPUT -s 176.31.89.164/32 -p tcp -m multiport --dport 21:22,10000,49152:49252 -m comment --comment "VPN Dutiko" -j ACCEPT -A INPUT -s 176.31.89.173/32 -p tcp -m multiport --dport 21:22,49152:49252 -m comment --comment "admin Dutiko" -j ACCEPT -A INPUT -s 217.109.151.1/32 -p tcp -m tcp --dport 10000 -j ACCEPT -A OUTPUT -o lo -j ACCEPT -A OUTPUT -p icmp -j ACCEPT -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m multiport --dports 21,25,80,443,465,587 -j ACCEPT -A OUTPUT -p udp -m multiport --dports 53,123 -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 9103 -m comment --comment "Backup filers" -j ACCEPT COMMIT
Log du firewall
iptables -A INPUT -j LOG --log-prefix "firewall: " --log-level 7
rsyslogd créer un fichier /etc/rsyslog.d/firewall.conf :
:msg, contains, "firewall: " -/var/log/firewall.log & ~
Depuis rsyslog 7, il faut utiliser :
if $msg contains 'firewall: ' then /var/log/firewall.log & stop
logrotate
/var/log/firewall.log { rotate 5 weekly dateext missingok notifempty compress delaycompress }
Blacklist en masse
utilisation = un des sed retire les connexion qui ont une patern de regex en nombre de connexion, ceux qui restent sont a bl (ici 60)--
netstat -nt | grep ':80' | sed -e 's/.*:80 //' | sed -e 's/:.*//' | sort | uniq -c | grep -v 172.25.8.62 | grep -v 172.25.8.61 | grep -v 172.25.8.60 | grep -v 10.252.5.74 | grep -v 10.252.5.25 | grep -v 217.174.192.246 | sed 's/^ *[1-9] .*//g' | sed 's/^ *[1-5][0-9] .*//g' | sed '/^$/d' | awk {'print$2'} | sed '/^[ ]*#\|#\|^$/! s/.*/network-object host &/'
Clean mailq
mailq | grep -B1 "Connection refused" | cut -d" " -f1 | grep -e "[A-Z][1-9]*" | xargs -L1 postsuper -d sendmail -qSMAILER-DAEMON -v -O Timeout.queuereturn=1s -O Timeout.connect=1s -O Timeout.ident=0s
relance force des mails :
kill -ALRM <qmail-send pid>
Lire un fichier .db
makemap -u hash /etc/mail/virtusertable.db
Nombre de mails par destinataires
mailq|awk 'NR=3 {print $1}'|awk -F "<" 'length($2)>0 {print $2}'|sed "s/>//g"|sort|uniq -c|sort
Nombre de mails par domaine
mailq|awk 'NR=3 {print $1}'|awk -F "<" 'length($2)>0 {print tolower($2)}'|sed "s/>//g"|awk -F "@" '{print $2}'|sort|uniq -c|sort
SMTP en telnet
telnet serveur.com 25 HELO agarik.com MAIL FROM: <sn4ky@sn4ky.net> RCPT TO: <sn4ky@sn4ky.net> DATA Subject: Sujet Message .
encoder en base64 : http://ostermiller.org/calc/encode.html
IMAP en telnet
inbox représente le nom du répertoire IMAP dans lequel on souhaite lire le mail
1 représente le numéro du mail, par ordre d'arrivée sur le serveur
telnet serveur.com 143 . LOGIN username ******** . LIST "" "*" . SELECT inbox . FETCH 1 full . FETCH 1 BODY[TEXT] . LOGOUT
source : http://bobpeers.com/technical/telnet_imap
POP en telnet
telnet serveur.com 110 USER username PASS ******** LIST TOP 1 RETR 1 DELE 1 QUIT
APACHE
Rediriger entièrement en SSL
RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Header set X-Robots-Tag "noindex, noarchive, nosniff, nofollow"
SWAP
Modifier la manière dont le kernel va utiliser la mémoire SWAP, on va modifier le paramètre système vm.swappiness. Ce paramètre exprime l'agressivité du noyau à utiliser l'espace de pagination (SWAP) pour les processus réalisant peu d'échanges mémoire.
La valeur exprimée est un pourcentage. 0
corresponds à une utilisation la plus faible possible de SWAP (quasi inexistante), tandis que 100
corresponds à une utilisation maximale de la SWAP.
Pour connaitre sa valeur actuelle
cat /proc/sys/vm/swappiness
Pour modifier à la volée
sysctl vm.swappiness=XX
(Il faut désactiver et réactiver totalement les espaces SWAP pour prendre en compte la valeur)
swapoff -av swapon -av
Pour rendre le paramètre actif dès le boot, rajouter vm.swappiness=XX
dans le fichier /etc/sysctl.conf
Script pour connaitre les processus qui swappent :
#!/bin/bash # Get current swap usage for all running processes # Erik Ljungstrom 27/05/2011 SUM=0 OVERALL=0 for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do PID=`echo $DIR | cut -d / -f 3` PROGNAME=`ps -p $PID -o comm --no-headers` for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'` ; do let SUM=$SUM+$SWAP done echo "PID=$PID - Swap used: $SUM - ($PROGNAME )" let OVERALL=$OVERALL+$SUM SUM=0 done | grep -v "Swap used: 0 "
Nouveaux Kernels Script pour connaitre les processus qui swappent :
#!/bin/bash # Get current swap usage for all running processes # Erik Ljungstrom 27/05/2011 SUM=0 OVERALL=0 for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do PID=`echo $DIR | cut -d / -f 3` PROGNAME=`ps -p $PID -o comm --no-headers` for SWAP in `grep VmSwap $DIR/status 2>/dev/null| awk '{ print $2 }'` ; do let SUM=$SUM+$SWAP done echo "PID=$PID - Swap used: $SUM - ($PROGNAME )" let OVERALL=$OVERALL+$SUM SUM=0 done | grep -v "Swap used: 0 "
Limite sur le nombre de fichiers ouverts
Sur Linux, il existe un paramètre permettant de limiter le nombre de fichiers ouverts par un utilisateur. Il s'agit du paramètre ulimit
. La valeur par défaut de ce paramètre est usuellement de 1024.
$ ulimit -a #liste les paramètres kernel des limites $ ulimit -n #affiche la limite du nombre de fichiers ouverts # ulimit -n 65535 #augmente la limite du nombre de fichiers à 65535 pour l'utilisateur courant
Modifier ce paramètre ne le modifie qu'en "mou". il n'est valide que pour la session courante de l'utilisateur en cours.
Pour que cette modification soit permanente, il faut procéder à quelques ajustements :
Éditer le fichier /etc/pam.d/common-session
pour y insérer la ligne :
session required pam_limits.so
Puis éditer le fichier /etc/security/limits.conf
pour procéder aux ajustements :
user soft nofile 131070 user hard nofile 262140
D'autres modification peuvent être effectuées, se référer à man 5 limits.conf
DUMMY RPM
php-5.2.14-1.spec
############################################################################### Summary : Dummy php 5.2.14-1 Name: Agarik-php Version: 5.2.14 Release: 1 License: GPL Group: Services Source: agarik.com URL: http://www.agarik.com BuildArch: noarch Provides: php-5.2.14-1 %description Ceci est un dummy package pour le service <service-version> installé par Agarik %files ###############################################################################
rpmbuild -bb php-5.2.14-1.spec rpm -U /usr/src/redhat/RPMS/noarch/Agarik-php-5.2.14-1.noarch.rpm
7Zip script
compress tous les fichiers d'un répertoire
@ECHO OFF FOR /F "usebackq delims==" %%y IN (`dir /b *.log`) DO CALL :compress %%~ny GOTO :fin :compress C:\"Program Files"\7-Zip\7z.exe a %1.zip %1.log del %1.log GOTO :eof :fin ECHO tous les fichiers ont ete traites...
MEGACLI
MegaCli -LDInfo -LALL -aALL ; donne infos essentiels MegaCli -LDSetProp ADRA -LALL -AALL ; passe le cache "Read Policy" en readadaptative MegaCli -LDSetProp WB -LALL -AALL ; passe le cache "Write Policy" en write back MegaCli -LDSetProp cached -LALL -AALL ; passe le cache en cached MegaCli -AdpBbuCmd -BBuLearn -a0 ; lance un relearn de la batterie MegaCli -AdpBbuCmd -GetBbuCapacityInfo -aALL ; vérifie si la batterie est en charge ou pas MegaCli -AdpAllInfo -aALL ; info general du contolleur MegaCli -PDList -aALL ; info disques MegaCli -CfgDsply -aALL ; info sur la conf array / disques MegaCli -AdpEventLog -GetEvents -f events.log -aALL ; dumpe les logs de la carte dans events.log MegaCli -PdLocate -start -physdrv \[32:0\] -a0 ; faire blink la led du disque 32:0
Smartctl sur MegaCli :
smartctl -a -d megaraid,N /dev/sda
N représente le DeviceID sur le contrôlleur, a récupérer avec un PDlist
STORCLI
lister tous les disques du controler 0
storcli /c0 /eall /sall show
Smartctl sur storcli :
smartctl -a -d megaraid,N /dev/sda
N représente le DID sur le contrôlleur allumer la led du disque
storcli /c0 /e250 /s7 start locate
Similitudes commandes UNIX/LINUX/AIX
IPMI
A faire lorsque le process kipmi0 prends 100% de CPU et que le load monte en conséquence
echo "remove,kcs,i/o,0xca8,rsp=4,rsi=1,rsh=0,irq=0,ipmb=0" > /sys/module/ipmi_si/parameters/hotmod echo "add,kcs,i/o,0xca8,rsp=4,rsi=1,rsh=0,irq=0,ipmb=0" > /sys/module/ipmi_si/parameters/hotmod
Fail2Ban
simple jail to ban known bad url
[apache-badurl] enabled = true failregex = ^<HOST> -.*"(GET|POST|HEAD) (/)+(ios|wp-).*"$ ignoreregex = datepattern = ^[^\[]*\[({DATE}) {^LN-BEG} action = iptables-multiport[name=BadUrl, port="http,https,7080,7081"] logpath = /var/www/vhosts/system/domain.com/logs/access_ssl_log bantime = 48h maxretry = 1