Tips systèmes

De Sn4kY
Aller à : navigation, rechercher

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 &/'

MAIL

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}

Interdire la navigation des robots

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

http://bhami.com/rosetta.html

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