Created: 2020-10-14 Wed 10:42
"All distros suck, this one just sucks less"
"The universal operating system"
"Ci posso essere (pochi) casi in cui Debian non è la scelta migliore."
poco importanti in ambito server
Si possono immaginare schemi di partizionamento complessi
Fondamentale l'uso di LVM
BTRFS, ZFS sono molto interessanti perché offrono funzionalità avanzate
Mantra: "Ogni cosa è un file"
Ci sono un sacco di file e directory sul mio hard disk!
cat /etc/hosts cat /etc/networks/interfaces cat /etc/apt/sources.list
apt-get update / aptitude update
Aggiorna stato dei pacchetti
apt-get (dist-)upgrade / aptitude (dist-)upgrade
Aggiorna pacchetti
apt-cache search / aptitude search
Ricerca un pacchetto
apt-cache show / aptitude show
Mostra le informazioni su un pacchetto
apt-get install / aptitude install
Installa pacchetti e relative dipendenze
apt-get –purge remove / aptitude purge
Rimuove pachetti. Con "purge" anche le relative configurazioni
Assolutamente NON supportato dal team di debian
Spesso unica soluzione (es: php)
default:
con:
PS1="$YELLOW[\t]$RED\u$PURPLE@\h:$BLUE\w \n$DEFAULT → "
I codici colore si trovano sul sito di archlinux
xterm, gnome-terminal, konsole
ssh root@myhost "echo ciao"
Se non sai che faccia ha il tuo sysadmin, vuol dire che sta lavorando bene
Tutti i login in Debian sono in var/log
rsyslog / syslog-ng / systemd
Ogni messaggio di log ha 2 proprietà:
dmesg
cat /etc/logrotate.conf cat /etc/logrotate.d/rsyslog cat /etc/logrotate.d/nginx
less /var/log/syslog tail -n10 /var/log/syslog tail -f /var/log/syslog grep <username> /var/log/auth.log
/etc/hosts /etc/resolv.conf /etc/network/interfaces
ifconfig
ifup ifdown ifconfig ifconfig eth0 (up/down) ifconfig eth0 <ip> ifconfig eth0:0 <ip> (alias) dhclient eth0
iproute2
ip addr ip addr show eth0 ip link ip link show eth0 ip -s link show eth0 ip link set eth0 up ip link set eth0 down ip addr add <ip>/<prefix> dev <eth> ip addr del <ip>/<prefix> dev <eth>
route route add ip route show ip route add <net> via <gw> ip route add default via <ip_gw> ip neigh = arp -an ip neigh delete <ip> dev <eth> ip neighbor flush dev <eth>
Si possono rendere permanenti via "/etc/network/interfaces"
up route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.254 down route del -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.254
Port 4321 IdentityFile ~/.ssh/id_rsa_corso TCPKeepAlive yes
La gestione degli utenti e dei relativi permessi è estremamente semplice (troppo?)
"root" e tutti gli altri :)
Anche l'accesso ai file è limitato a "utente", "gruppo" e "altri"
useradd -D (default) useradd -d <home> -s <shell> -g <gruppo> -G -m <utente> passwd <utente> adduser <utente>
usermod -L <utente> (blocca) usermod -U <utente> (sblocca) userdel -r <utente> deluser <utente> (debian) chage <utente>
groupadd <gruppo> groupdel <gruppo> addgroup delgroup
Meccanismo di delega molto flessibile
Non è installato di default in debian
root ALL=(ALL:ALL) ALL %admin ALL=(ALL) ALL %sudo ALL=(ALL:ALL) ALL Cmnd_Alias NGX = /usr/sbin/service nginx restart User_Alias NGXADMINS = stefano, pippo NGXADMINS ALL=NOPASSWD: NGXT
minimale:
USER HOSTNAME=(USER:GROUP) OPZIONI: COMMANDO
Un file sistem umix-like ha, di default, una gestione dei privilegi e dei permessi molto basilare.
drwxr-xr-x 2 root root 4096 apr 20 05:34 backups -r-xrwxr-x 7 stefano root 4096 giu 11 21:36 mio_file drwxr-xr-x 33 root root 4096 giu 25 12:35 lib drwxrwsr-x 2 root staff 4096 apr 20 05:34 local lrwxrwxrwx 1 root root 18 giu 11 21:36 mio_link -> mio_file
Modificabili con
chmod 755 <file> chmod u=rw,g=r,o= <file> chgrp <gruppo> <file> chgrp -R <gruppo> <directory>
-rwsr-xr-x 1 root root 45396 mag 25 2012 /usr/bin/passwd
drwxrwxrwt 5 root root 4096 giu 25 16:35 tmp
Creare una struttura di directory in "/srv/samba" atta a condividere file in una LAN aziendale.
Nell'azienda sono presenti diverse strutture indipendenti:
L'utente MegaDirettoreGenrale deve poter accedere a tutta la struttura.
#!/bin/bash MESSAGGIO="questo è uno script" echo $MESSAGGIO
realizzare uno script di backup che
OGGI=$(date +%Y%m%d) VECCHIO=$(date --date='7 days ago' +%Y%m%d) MAX_DAYS=7 # di cosa fare il backup SRC_DIRS=( "/home/" "/etc" "/srv/samba/" ) # USB disk/NFS... BACKUP_DIR="/tmp/backup" SNAPSHOT_DIR="$BACKUP_DIR/snapshot" ARCHIVES_DIR="$BACKUP_DIR/archives" EXCLUDE_FILE=/ect/my_backup/exclude
rsync -av --excude-from=$EXCLUDE_FILE $DIR $SNAPSHOT_DIR/
tar czf $BACKUP_DIR/archives/$OGGI.tgz --exclude-from=$EXCLUDE_FILE $DIR
rm $BACKUP_DIR/archives/$VECCHIO find $BACKUP_DIR/archives/* -mtime +$MAX_DAYS -exec rm {} \;
atd è il demone che si occupa dei comandi da eseguire una sola volta, ma in un determinato momento nel futuro.
# esegue backup.sh alle 22 di oggi at -f backup.sh 22:00 # domani :) at -f backup.sh 22:00 tomorrow # tra 5 giorni at -f backup.sh 22:00 +5 days # elenco dei lavori atq # rimozione di un lavoro in coda atrm <id> <id> ...
cron è il demone responsabile dell'esecuzione di comandi pianificati e ricorrenti (ogni giorno, ora, settimana…)
di ogni utente abilitato
/ect/crontab
SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) .---------------- [m]inute: minuto (0 - 59) | .------------- [h]our: ora (0 - 23) | | .---------- [d]ay [o]f [m]onth: giorno del mese (1 - 31) | | | .------- [mon]th: mese (1 - 12) | | | | .---- [d]ay [o]f [w]eek: giorno della settimana (0 - 6) (domenica=0 o 7) | | | | | * * * * * comando da eseguire
# nuovo crontab -e # elenco crontab -l # esporto crontab -l > mio_crontab # importo crontab mio_crontab
Opening Windows to a Wider World
apt-get install samba smbclient
Aggiornare da samba3 a samba4 dovrebbe essere indolore (stand alone server)
La documentazione di samba-3 è ottima
La documentazione di samba-4 è …
Come base prendiamo il file di default
cd /etc/samba mv smb.conf smb.conf.origin testparm -s smb.conf.origin > smb.conf.clean testparm testparm -v
[global] server role = standalone server map to guest = Bad User obey pam restrictions = Yes pam password change = Yes passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . unix password sync = Yes syslog = 0 log file = /var/log/samba/log.%m max log size = 1000 dns proxy = No usershare allow guests = Yes panic action = /usr/share/samba/panic-action %d idmap config * : backend = tdb
[homes] comment = Home Directories valid users = %S create mask = 0700 directory mask = 0700 browseable = No path = %H
valid user=%S: current share name path=%H home of user %u
[produzione] comment = Produzione - Cartella condivisa path = /srv/samba/produzione valid users = @produzione invalid users = root force group = produzione create mask = 0660 directory mask = 0770 read only = no browsable = yes
# creo gli utenti smbpasswd -a root smbpasswd -a andrea smbpasswd -a <...> #cambio password smbpasswd <nome> # verifico server nmblookup <NETBIOS_NAME> # verifico share smbclient -L <NETBIOS_NAME> # verifico utilizzo smbstatus
# verifico share smbclient -L //<NETBIOS_NAME>/<SHARE> # backup veloce smbclient //<NETBIOS_NAME>/<SHARE> -U<utente> -Tc backup.tgz
parte del progetto netfilter che è un insieme di funzionalità del kernel per interagire con lo stack di rete.
iptables è il comando in userspace che consente di impostare le regole di filtro per i pacchetti.
I pacchetti in ingresso passano per la tabella di "mangle", poi per la "NAT" e poi per la "Filter"
Figure 7: wikimedia
Figure 8: linux-ip
prima ed unica regola per un buon firewall…
iptables -A INPUT -i lo -j ACCEPT -A: append INPUT: nome catena (tabella 'filter') -i: interfaccia lo: loopback -j: jump ACCEPT: accetto il pacchetto senza elaborare le regole successive
# visualizza le regole nella tabella di filter iptables -L -v # specifico tabella NAT iptables -t nat -L -v --line-numbers # rimuovo la terza regola da filter/INPUT iptables -D INPUT 1 # Rifiuto pacchetti da <cattivone_ip> iptables -A INPUT -s <cattivone_ip> -j REJECT # Ignoro pacchetti da <cattivone_ip> iptables -A INPUT -s <cattivone_ip> -j DROP
# Accesso SSH solo da acuni IP iptables -A INPUT -p tcp -s $MIOIP --dport 22 -m state \ --state NEW,ESTABLISHED -j ACCEPT # Limito tentativi di connessione iptables -A INPUT -p tcp --dport 22 -m limit \ --limit 1/minute --limit-burst 10 -j ACCEPT # Forward iptables -t nat -A PREROUTING -p tcp --dport 80 \ -j DNAT --to $SERVERWB:80
# log iptables -A INPUT -j LOG --log-prefix $LOG_PREFIX # scarto il resto iptables -A INPUT -j DROP
# Redundant Array of Independent Disks apt-get install mdadm
# creo partizione raid fdisk /dev/sdb #tipo fd # copio schema su sdc sfdisk -d /dev/sdb | sfdisk /dev/sdc --force # Creo il device raid mdadm --create --verbose /dev/md0 --level=raid1 \ --raid-devices=2 /dev/sdb1 /dev/sdc1
# controllo avanzamento cat /proc/mdstat # fs mkfs.ext4 /dev/md0 mkdir /mnt/raid1 mount /dev/md0 /mnt/raid1 echo "/dev/md0 /mnt/raid1 ext4 defaults 0 0" >> /etc/fstab
# marcare come guasto mdadm --set-faulty /dev/md0 /dev/sdc1 mdadm --remove /dev/md0 /dev/sdc1 cat /proc/mdstat #...sostituzione hd... # copiare struttura partizioni sfdisk -d /dev/sdb | sfdisk /dev/sdc --force # aggiungere un disco al raid mdadm --add /dev/md0 /dev/sdc1 # informazioni sul RAID mdadm --query --detail /dev/md0
e: stefano@uomorando.it
t: @uomorando
peace, love and linux