Tag Archives: Postfix

Postfix server configuration

Postfix server (Debian / Ubuntu) is:

  • configured to primary domain faix.cz
  • listening on SMTP port 25 on home-server machine
    From Internet it delivers email for following domain: faix.cz
    From LAN it delivers email for following domain: home.lan

  • Every LAN computer forwards it’s mail for any user to home-server mail server and is processed to users following rules in /etc/postfix/recipient_canonical
  • Sender mapping follows the rules in /etc/postfix/canonical and /etc/postfix/sender_canonical configuration files (not in use now).
  • All mail is forwarded to users in following virtual table /etc/postfix/virtual
  • Any internal email domain is changed following rules in /etc/postfix/generic configuration file
  • Do not forget to use command postmap /etc/postfix/configuration_file every time you change file with ‘hash:‘ prefix
  • After any configuration change you have to reload Postfix service postfix reload
    Postfix installation

    apt-get install postfix
    postmap /etc/aliases
    postmap /etc/postfix/canonical
    postmap /etc/postfix/sender_canonical
    postmap /etc/postfix/generic
    postmap /etc/postfix/virtual




    alias_database = hash:/etc/aliases
    alias_maps = hash:/etc/aliases
    append_dot_mydomain = yes
    biff = no
    config_directory = /etc/postfix
    inet_interfaces =
    mailbox_command = /usr/bin/procmail
    mailbox_size_limit = 0
    mydomain = faix.cz
    myhostname = mail.$mydomain
    mynetworks =
    myorigin = /etc/mailname
    recipient_delimiter = +
    relayhost =
    smtpd_banner = $myhostname NO UCE ESMTP
    smtpd_delay_reject = no
    smtpd_helo_required = yes
    canonical_maps = hash:/etc/postfix/canonical
    sender_canonical_maps = hash:/etc/postfix/sender_canonical
    recipient_canonical_classes = envelope_recipient
    recipient_canonical_maps = regexp:/etc/postfix/recipient_canonical
    smtp_generic_maps = hash:/etc/postfix/generic
    local_header_rewrite_clients = static:all
    smtpd_recipient_restrictions =
    reject_rbl_client cbl.abuseat.org
    reject_rbl_client sbl-xbl.spamhaus.org
    reject_rbl_client bl.spamcop.net
    reject_rhsbl_sender dsn.rfc-ignorant.org
    unknown_address_tempfail_action = $reject_tempfail_action
    reject_tempfail_action = defer_if_permit
    strict_rfc821_envelopes = yes
    virtual_maps = hash:/etc/postfix/virtual
    mydestination = $myhostname, smtp.$mydomain, mail.$mydomain, home.lan, localhost, localhost.localdomain


    faix.cz virtual domain
    postmaster@faix.cz faix@gmail.com
    admin@faix.cz faix@gmail.com
    root@faix.cz faix@gmail.com zada@gmail.com
    @faix.cz faix@gmail.com


    postmaster: admin
    webmaster: admin
    www-data: admin
    abuse: admin
    nagios: root
    admin: faix@gmail.com
    root: faix@gmail.com


    /^root(.*)home[.]lan$/ root@faix.cz
    /^root(.*)$/ root@faix.cz
    /^pytlicek(.*)$/ faix@gmail.com
    /^zada(.*)$/ zada@gmail.com


    @home.lan @faix.cz

    Postfix and AntiSpam Smtp Proxy – ASSP


    perl -MCPAN -e shell
    install Compress::Zlib
    install Digest::MD5
    install Email::Valid
    install File::ReadBackwards
    install Mail::SPF::Query
    install Mail::SRS
    install Net::DNS
    install Sys::Syslog
    install Time::HiRes
    cd /usr/src/
    wget http://downloads.sourceforge.net/project/assp/ASSP%20V2%20multithreading/2.4.1%2014085/ASSP_2.4.1_14085_install.zip
    unzip ASSP_2.4.1_14085_install.zip
    mkdir -p /usr/share/assp/spam
    mkdir /usr/share/assp/notspam
    mkdir /usr/share/assp/errors
    mkdir /usr/share/assp/errors/spam
    mkdir /usr/share/assp/errors/notspam
    mv -f assp/* /usr/share/assp
    rm -fr ASSP_2.4.1* assp changelog.txt Install.txt MacOSX-launchd.txt quickstart.txt Win32-quickstart-guide.txt
    chown -R 0.0 /usr/share/assp
    cd /usr/share/assp
    perl assp.pl


    login: root
    password: nospam4me

    Server Setup
    -> Run ASSP as a Daemon (AsADaemon)
    -> SMTP Destination ->
    -> Listen Port ->
    Recipients -> Local Domains -> faix.cz
    Relaying -> Accept All Mail (acceptAllMail) -> 192.168.122.|
    Security -> Web Admin Password

    localhost:smtp inet n – n – – smtpd

    service postfix restart

    #!/bin/sh -e
    # Start or stop ASSP (Anti-Spam SMTP Proxy)
    # Script by Abey Marquez <abeymarquez@gmail.com>
    # v1.0.1 Changed 'force-reload' to force a restart if it can't reload the config. Also changed 'restart' to start the proc if not running.
    # v1.0.0 I'm not an expert but I tried to make this as LSB compliant as possible. Should work really nice with Ubuntu.
    # Provides: ASSP (Anti-Spam SMTP Proxy)
    # Required-Start: $syslog, $local_fs
    # Required-Stop: $syslog, $local_fs
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    # Short-Description: Start or stop ASSP
    # Description: Start or stop ASSP (Anti-Spam SMTP Proxy)
    . /lib/lsb/init-functions
    case "$1" in
    log_daemon_msg "Starting ASSP (Anti-Spam SMTP Proxy)" "assp"
    start-stop-daemon --start --quiet --pidfile $PIDFILE --startas $DAEMON 2>&1 > /dev/null --chdir $HOME
    log_end_msg $?
    log_daemon_msg "Stopping ASSP (Anti-Spam SMTP Proxy)" "assp"
    start-stop-daemon --stop --quiet --pidfile $PIDFILE --chdir $HOME
    log_end_msg $?
    if [ -f $PIDFILE ]; then
    $0 stop
    sleep 1
    $0 start
    $0 start
    log_action_begin_msg "Reloading ASSP (Anti-Spam SMTP Proxy) configuration"
    if [ -f $PIDFILE ]; then
    if kill -1 $(cat $PIDFILE); then
    log_action_end_msg 0
    log_action_end_msg 1
    log_action_end_msg 1
    exit 1
    log_action_begin_msg "Reloading ASSP (Anti-Spam SMTP Proxy) configuration"
    if [ -f $PIDFILE ]; then
    if kill -1 $(cat $PIDFILE); then
    log_action_end_msg 0
    log_action_cont_msg "Could not reload configuration. Restarting"
    $0 restart
    log_action_cont_msg "Could not reload configuration. Restarting"
    $0 restart
    status_of_proc $DAEMON "ASSP (Anti-Spam SMTP Proxy)"
    log_action_msg "Usage: $INITSCRIPT {start|stop|restart|reload|force-reload|status}"
    exit 1
    exit 0

    chmod 755 /etc/init.d/assp
    update-rc.d assp defaults

    Have fun with all the options and after a week rebuild the bayes database. Check the directories /usr/share/assp/spam and nospam for wrong entries,
    if good mail ends up in the spam directory please move it to the nospam directory and vice versa.

    Spamassassin and Postifx configuration


    aptitude install spamassassin spamc


    OPTIONS="--create-prefs --max-children 2 --username debian-spamd -H ${SAHOME} -s ${SAHOME}spamd.log"


    smtp inet n - - - - smtpd -o content_filter=spamfilter
    spamfilter unix - n n - - pipe
    flags=Rq user=debian-spamd argv=/usr/local/bin/spamfilter.sh -oi -f ${sender} ${recipient}

    mkdir /var/spamchk
    chmod 775 /var/spamchk
    chown debian-spamd:debian-spamd /var/spamchk


    # -----------------------------------------------------------------
    # File: spamchk
    # Purpose: SPAMASSASIN shell-based filter
    # Location: /usr/local/bin
    # Usage: Call this script from master.cf (Postfix)
    # Certified: Ubuntu Linux, Spamassassin 3.3.x, Postfix 2.7.x
    # -----------------------------------------------------------------
    # Variables
    SENDMAIL="/usr/sbin/sendmail -i"
    # Number of *'s in X-Spam-level header needed to sideline message:
    # (Eg. Score of 5.5 = "*****" )
    # Clean up when done or when aborting.
    trap "rm -f $TMPFILE" 0 1 2 3 15
    # Pipe message to spamc and store in $TMPFILE
    cat | /usr/bin/spamc -u filter | sed 's/^\.$/../' > $TMPFILE
    # Are there more than $SPAMLIMIT stars in X-Spam-Level header?
    if $EGREP -q "^X-Spam-Level: \*{$SPAMLIMIT,}" < $TMPFILE
    # Option 1: Move high scoring messages to sideline dir so
    # a human can look at them later:
    mv $TMPFILE $SIDELINE_DIR/`date +%Y-%m-%d_%R`-$$
    # Option 2: Divert to an alternate e-mail address:
    # $SENDMAIL xyz@xxxx.xx < $TMPFILE
    # Option 3: Delete the message
    # rm -f $TMPFILE
    # Postfix returns the exit status of the Postfix sendmail command.
    exit $?


    rewrite_header Subject *****SPAM***** (_SCORE_)
    report_safe 0
    trusted_networks 192.168.122.
    required_score 3.0
    use_bayes 1
    bayes_auto_learn 1
    ifplugin Mail::SpamAssassin::Plugin::Shortcircuit
    shortcircuit ALL_TRUSTED on
    endif # Mail::SpamAssassin::Plugin::Shortcircuit

    service spamassassin start
    service postfix restart

    Postfix SMTP Authentication


    apt-get install sasl2-bin libsasl2-2 libsasl2-modules

    Configure Postfix to do SMTP AUTH using SASL (saslauthd):

    postconf -e 'smtpd_sasl_local_domain ='
    postconf -e 'smtpd_sasl_auth_enable = yes'
    postconf -e 'smtpd_sasl_security_options = noanonymous'
    postconf -e 'broken_sasl_auth_clients = yes'
    postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
    postconf -e 'inet_interfaces = all'
    echo 'pwcheck_method: saslauthd' > /etc/postfix/sasl/smtpd.conf
    echo 'mech_list: plain login' > /etc/postfix/sasl/smtpd.conf

    cd ~
    openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
    chmod 600 smtpd.key
    openssl req -new -key smtpd.key -out smtpd.csr
    openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
    openssl rsa -in smtpd.key -out smtpd.key.unencrypted
    mv -f smtpd.key.unencrypted smtpd.key
    openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
    mv smtpd.key /etc/ssl/private/
    mv smtpd.crt /etc/ssl/certs/
    mv cakey.pem /etc/ssl/private/
    mv cacert.pem /etc/ssl/certs/

    postconf -e 'smtpd_tls_auth_only = no'
    postconf -e 'smtp_use_tls = yes'
    postconf -e 'smtpd_use_tls = yes'
    postconf -e 'smtp_tls_note_starttls_offer = yes'
    postconf -e 'smtpd_tls_key_file = /etc/ssl/private/smtpd.key'
    postconf -e 'smtpd_tls_cert_file = /etc/ssl/certs/smtpd.crt'
    postconf -e 'smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem'
    postconf -e 'smtpd_tls_loglevel = 1'
    postconf -e 'smtpd_tls_received_header = yes'
    postconf -e 'smtpd_tls_session_cache_timeout = 3600s'
    postconf -e 'tls_random_source = dev:/dev/urandom'




    pwcheck_method: saslauthd
    mech_list: plain login


    smtpd_sasl_auth_enable = yes
    smtpd_sasl_security_options = noanonymous
    broken_sasl_auth_clients = yes
    smtpd_recipient_restrictions =

    rm -r /var/run/saslauthd/
    mkdir -p /var/spool/postfix/var/run/saslauthd
    ln -s /var/spool/postfix/var/run/saslauthd /var/run
    chgrp sasl /var/spool/postfix/var/run/saslauthd
    adduser postfix sasl

    /etc/init.d/postfix restart
    /etc/init.d/saslauthd start

    Finally we test it using telnet. We need perl to generate the string for the SASL authentication:
    perl -MMIME::Base64 -e 'print encode_base64("username\0username\0password");'
    perl -MMIME::Base64 -e 'print encode_base64("jimmy\0jimmy\0real-secret");'

    jimmy@reptile:~$ telnet jimmy.co.at 25
    Connected to jimmy.co.at.
    Escape character is '^]'.
    220 kitana.jimmy.co.at ESMTP Mailserver
    ehlo reptile.g-tec.co.at
    250-SIZE 10240000
    250 8BITMIME
    AUTH PLAIN amltbXkAamltbXkAcmVhbC1zZWNyZXQ=
    235 Authentication successful

    Or you can test SASL authentication using this command:

    testsaslauthd -u username -p password

    Postfix satellite configuration

    dpkg-reconfigure postfix




    postmaster: root
    webmaster: root
    www-data: root
    jan: jan.faix@gmail.com
    wassana: fern.cht@gmail.com
    root: jan.faix@gmail.com



    mail.faix.cz mail:xxxxxxxx

    chown root:root /etc/postfix/relay_passwd
    postmap /etc/postfix/relay_passwd


    myorigin = /etc/mailname
    smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
    biff = no
    append_dot_mydomain = no
    readme_directory = no
    myhostname = home-desktop
    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases
    mydestination = faix.homelinux.net, home-desktop, localhost.localdomain, localhost
    relayhost = mail.faix.cz
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = hash:/etc/postfix/relay_passwd
    smtp_sasl_security_options =
    mailbox_command = procmail -a "$EXTENSION"
    mailbox_size_limit = 800000000
    message_size_limit = 100000000
    recipient_delimiter = +
    inet_interfaces = all
    inet_protocols = ipv4
    mail_owner = postfix
    mydomain = faix.homelinux.net
    mynetworks =
    compatibility_level = 2

    /etc/init.d/postfix restart

    SASL authentication:

    apt-get install libsasl2-modules sasl2-bin

    Set password for user “mail”:

    add user "postfix" to group "sasl"
    usermod -a -G sasl postfix
    /etc/init.d/postfix restart
    /etc/init.d/saslauthd restart

    Linux mini-howto

    # Linux je operační systém s monolitickým jádrem.
    Moduly jsou objektové soubory, dynamické části jádra. Umožňují rozšířit
    za běhu funkce stávajícího jádra (LKM = Linux Loadable Kernel Module).

    # daemons basic operations
    /etc/init.d/apache status
    /etc/init.d/apache restart

    # filter file content
    cat /var/log/… | grep (192.168….) -v 9190 | grep 192.168…. | more
    tail -f /var/log/… | grep -v “FW-IN”
    grep string
    grep “test string” -R /dir/*

    # network info
    netstat -an | more
    netstat -rn … show gateway
    netstat -tapn … show listening ports

    # DNS client configuration
    search mydomain.local

    # query DNS server
    dig www.nixcraft.com
    nslookup www.nixcraft.com

    # memory info

    # create file

    # chroot
    chroot /directory
    před chroot udělat:
    mount -o bind /proc /chroot/proc; chroot /chroot
    mount -t proc none /proc
    for f in proc sys dev dev/pts run ; do mount –bind /$f /mnt/$f ; done

    # mv … move (rename) files
    if move error message Argument list too long, because move too much files do:
    ls -1 | xargs -n 10 -i mv {} /home/app/opt/app/log

    # ln … make links between files
    ln -s /home/app/opt/application/ application

    # copy file to remote
    scp file user@server:/home/dir

    # rsync – synchronizace / kopirovani slozek
    rsync -ave ssh server:/dir/ /mnt/dir/
    rsync -r -t -p -o -g -v –progress –delete –ignore-existing -l -H -D -s /mnt/linuxold/ /mnt/linuxnew

    # create iso
    mkisofs -o /home/user/data/office /home/user/data/office_en

    # directory size
    du -s
    du -ch | grep total

    # mount (samba)
    mount -o loop -t iso9660 /home/user/data/office /mnt/iso
    mount -t cifs -o username=administrator,password=password //server/data /mnt/server
    mount server:/share /mnt/share
    mount -t cifs -o username=admin,workgroup=cybercity // /mnt/user

    # ntfs-3g – mount ntfs partition
    mount -t ntfs /dev/xxx /mnt/windows -o ro
    ntfs-3g /mnt/sda1 /mnt/windows

    # sshfs
    sshfs 001]tod[1]tod[861]tod[291null]ta[resu:/ /mnt/backup

    # nfs
    Souborový systém NFS
    – CIFS ve windows ~ NFS v unixu
    v3- „standard“, podporován všude
    v4- zabezpečení, ale problémy s výkonem
    NFS není vhodné pro veřejné sdílení na Internetu
    Umožňuje sdílet celý OS (boot from net)
    Je třeba řešit synchronizaci UID/GID (LDAP, NIS)
    /data *(rw,no_root_squash)
    # exportfs -r
    – znovu načtení změněné konfigurace
    # rpcinfo -p server
    – informace o RPC službách přes portmapper
    # showmount -e server
    – zobrazí sdílené adresáře
    # nfsstat – list NFS statistics
    # nfswatch – monitor an NFS server

    vi /etc/exports
    /etc/init.d/nfs-kernel-server restart
    exportfs -a
    /etc/init.d/portmap restart
    mount /data

    # package manager
    smart –gui (http://www.labix.org/smart)

    # YaSt – instalace balíčů z příkazové řádky SuSE
    zypper in sysstat

    Souborový systém:
    – ext3:
    noexec, nosuid, nodev
    – lsattr, chattr
    chattr +i soubor
    – setfacl, getfacl
    setfacl -m u:username:r /var/log/httpd/acces.log
    – sparse files

    # fstab example
    server:/usr/local/pub /pub nfs rsize=8192,wsize=8192,timeo=14,intr
    //user at server/share_name /mount_point smbfs rw,-N
    //server/Data /mnt/server cifs username=administrator,password=password,us er,ro 0 0
    // /mnt/mysharedfolder cifs
    username=user,password=pass,workgroup=workgroup,us er,ro 0 0
    //servername/sharename /smbshare smbfs
    ip=192.168.x.x,username=test,workgroup=domainname,password=password,noauto 0 0

    # nagios

    # allow any traffic
    iptables -I FORWARD -s 192.168.x.x -j ACCEPT

    # NAT
    # test communication as another IP address
    telnet 80
    iptables -t nat -I POSTROUTING -d -j SNAT –to
    tcpdump -n -i any host

    # reset root password
    boot with grub, hit e, select kernel line, as parameters add: quiet single init=/bin/bash, press enter and than b
    mount -o remount,rw /

    # monitor ip traffic
    tcpdump -n -i vlan99 host
    tcpdump -i eth1 -n port 8888 or port 7777 and host 192.168.x.x
    tcpdump -n -i any host or host and not port 22
    tcpdump -n -i any host or host and not port 22 and not net
    tcpdump -n -i any host or host and not port 22 and not net and not host and not host and not port 1215 and not port 1212
    tcpdump -n -i any -s 1500 -w test_dump_file.dump host or host and not port 22 and not net and not host and not host and not port 1215 and not port 1212

    # ifconfig
    ifconfig eth0
    ifconfig eth0 netmask
    ifconfig eth0 broadcast

    # routing
    route -n … show gateway / genmask
    route add default gw
    route add -net netmask gw dev eth1
    route add -net netmask gw
    arping -i vlan99
    ip route get IP
    ip route show … show gateway
    traceroute -I eth2 www.google.com

    # better traceroute
    mtr IP

    # who is logged on now / last login
    who -a
    last (last -f /var/log/wtmp)

    # display linux tasks

    # Midnight Commander (mc)
    cd /#sh:user@machine/
    cd /#ftp:server
    cd ftp://[!][user[:pass]@]machine[:port][remote-dir]

    # gzip, gunzip
    gzip -r somedir Zip all files in the somedir directory.
    gunzip -r somedir Unzip all files in the somedir directory.

    gunzip something.tar.gz
    tar xvf something.tar

    tar czf – . | ssh server ‘(cd /muj/novy/adresar; tar xzf -)’

    gunzip -c something.tar.gz | tar xvf –

    # zip, unzip
    zip -r file.zip /directory
    unzip file.zip -d /directory

    # bzip2
    bunzip2 filename.txt.bz2
    bzip2 filename.txt

    #bzip untar
    tar xvfj file.tar.bz2

    #untar / tar
    tar -zxvf [filename with all extensions]
    tar -cvf mystuff.tar mystuff/

    tar cvzf foo.tar.gz foo/
    tar cv foo/ | gzip -9 > foo.tar.gz

    # tar / untar with gzip and same owner
    tar –acls –same-owner -cvpzf /tmp/app.tar.gz /opt/app
    tar –acls –same-owner -zxvpf app.tar.gz

    * -p – zajistí, že práva zustanou zachována
    * –same-owner -zajistí, že vlastníci zustanou zachováni
    * -P – neodstraouje úvodní lomítko z názvu
    * -owner uzivatel – zminí vlastníka souboru na uzivatel.
    * -mode opravneni – zminí oprávniní souboru na opravneni

    Old versions of the tar and dump commands do not backup ACLs.
    # star utility is similar to the tar utility in that it can be used to generate archives of files.

    star -xattr -H=exustar -acl -c -v -z -p -f=/tmp/test.star /dir
    star -x -v -p -z -acl -f=test.star

    star -xattr -H=exustar -acl -c -v -z -p -f=myarchive `cat /tmp/file_list`

    # umask, chmod, chown
    umask -S
    chmod ug=rw+ -R /folder
    chmod 700 /folder

    drwxrwxrwx 1 username users 2525 Feb 18 09:17 index.htm
    ^ / / / / /
    | V V V ”|”’ ‘|’
    | | | | | `– group the file belongs to
    | | | | `– user who owns the file
    | | | |
    | | | `– others (users who are neither you or in the group)
    | | `– group (people in the group)
    | `– user (you)
    `– d=directory, -=file, l=link, etc

    0 = — = no access
    1 = –x = execute
    2 = -w- = write
    3 = -wx = write and execute
    4 = r– = read
    5 = r-x = read and execute
    6 = rw- = read and write
    7 = rwx = read write execute (full access)

    chown “root:domain users” file

    # OS version
    uname -a
    cat /etc/*-release

    # time and date settings
    date set=”STRING”
    date -s “25 AUG 2008 15:55:00”
    date [MMDDhhmm[[SS]RR][.ss]]
    hwclock –systohc, hwclock –hctosys
    ntpdate server
    stratum … vrstvy serveru pri casove synchronizaci

    # password policy
    deactive account (set expire in past day):
    chage -E 2008-09-23 username
    password expire in 1 year from today:
    chage -d 2008-08-01 -I -1 -m 0 -M 365 -E -1 username

    For example, set new data to 2 Oct 2006 18:00:00.

    # accounts info
    passwd -S “user”

    # hard kill proc
    killall -9 “licsrv” (proces se pise jeho jmenem)
    klidne 2x 3x pokud se neobjevi hlaseni:
    licsrv: no process killed

    # network readresace
    auto eth0
    iface eth0 inet dhcp
    iface eth0 inet static

    /etc/init.d/network restart

    # network change hostname

    # dhcp konfigurace

    # pridani noveho uzivatele a nove skupiny
    useradd uzivatel
    groupadd -g 50x skupina
    useradd -G skupina uzivatel

    # pridani existujiciho uzivatele do existujici skupiny
    usermod -a -G skupina uzivatel

    # overeni clenstvi uzivatele ve skupinach
    id uzivatel

    # pridani existujiciho uzivatele do existujici skupiny
    usermod -a -G skupina uzivatel

    # instalace a pouziti yum
    export http_proxy=
    name=Red Hat $releasever – $basearch – Base
    baseurl =

    yum makecache
    yum list all
    yum update

    # Red Hat registration

    # gentoo – emerge
    emerge -k
    emerge –sync … synchronizace portage stromu s mirrorem gentoo
    emerge portage … aktualizace baliku portage
    etc-update … aktualizace etc skriptu po instalaci


    # konfigurační soubor /etc/sudoers
    # pridani uzivatele ci skupiny do sudoers
    visudo – pouzit POUZE tento editor nikoliv vi
    %skupina ALL= NOPASSWD: /usr/bin/rootsh

    %chpass ALL = (root) /usr/bin/passwd [[:alnum:]_-]+, !/usr/bin/passwd root
    %mailadmin ALL = (root) NOPASSWD:/usr/sbin/rpm
    Použití aliasů :
    User_Alias WEBMASTERI = foo, bar
    Host_Alias VNITRNISIT =
    Cmnd_Alias WEBMASTER = (apache) ALL, (root) /usr/bin/su apache

    # LVM Logical Volume Management
    vgscan -> rozeznani LV
    lvs -> informace o logickych svazcich
    pvs -> informace o fyzickych svazcích
    pvdisplay -> informace o fyzickych svazcich
    vgdisplay -> informace o logickych svazcich
    lvdisplay -> informace o vlastnostech logickych svazcich
    vgchange -a y vg01 -> aktivace logickych svazku
    vgchange -a n vg01 -> deaktivace logickych svazku

    dmsetup – low level logical volume management

    parted /dev/sdX
    mklabel gpt
    mkpart primary 0 4096G

    umount /opt
    fsck -f /dev/VolGroup00/LogVol03
    resize2fs /dev/VolGroup00/LogVol03 3G
    lvreduce /dev/VolGroup00/LogVol03 -L 3G
    mount /opt

    vgchange VolGroup00 -a y

    lvscan -> File descriptor 3 left open:
    ACTIVE ‘/dev/VolGroup00/LogVol00’ [15.62 GB] inherit
    ACTIVE ‘/dev/VolGroup00/LogVol02’ [14.62 GB] inherit
    ACTIVE ‘/dev/VolGroup00/LogVol03’ [3.00 GB] inherit
    ACTIVE ‘/dev/VolGroup00/LogVol01’ [11.72 GB] inherit

    for root / use gparted live CD

    for swap partition use:
    swapoff -v /dev/VolGroup00/LogVol01
    lvm lvreduce /dev/VolGroup00/LogVol01 -L -512M
    mkswap /dev/VolGroup00/LogVol01
    swapon -va
    cat /proc/swaps # free

    # parted
    Label disk as msdos:
    parted /dev/sdx mklabel msdos
    Create primary ext4 partition:
    parted /dev/sdx mkpart primary ext4 0GB 100%
    Mark partition as LVM:
    parted /dev/sdx set 2 lvm on
    Mark paritition bootable:
    parted /dev/sdx toggle 1 boot
    Print free space:
    parted /dev/sdx print free
    Create swap:
    parted /dev/sdx mkpart primary linux-swap 14GB 16GB

    Format partition:
    Ext4: mkfs -t ext4 /dev/vg01/lv_name
    Swap: mkswap /dev/sda2

    # mdadm – manage MD devices aka Linux Software Raid.
    – kompletni sprava software raidu
    – v SW raidu je nutne zapsat grub na oba mirrorovane disky
    – pri pouziti fdisku oznacit partition jako typ fd (Linux raid auto)

    # VMWare Tools
    VMWare Console – Install VMWare Tools
    cd /media/cdrom

    cp VMwareTools-[version].tar.gz /root
    cd /root
    umount /mnt/cdrom
    tar zxf VMwareTools-[version].tar.gz
    cd /root/vmware-tools-distrib

    # install package
    # query insalled package
    rpm -qa | grep package_name

    rpm -ivh packagename
    upgrade a package
    rpm -Uvh packagename

    create a tar file
    tar -cvf myfiles.tar mydir/
    (add z if you are dealing with or creating .tgz (.tar.gz) files)

    standard install from source
    tar -xvzf Apackage.tar.gz
    cd Apackage
    make install

    # FSArchiver
    # zalohovani dat linux systemu
    SystemRescueCD – Live Rescue CD obsahujici FSArchiver
    mount -t vfat /dev/sdb1 /mnt/usb
    fsarchiver savefs /mnt/backup/linuxsystem.fsa /dev/sda1 /dev/sda2 /dev/VolGroup00/LogVol00 /dev/VolGroup00/LogVol01
    fsarchiver archinfo /mnt/backup/gentoo-rootfs.fsa
    fsarchiver restfs /mnt/backup/home/user/archive.fsa id=0,dest=/dev/sda1 id=1,dest=/dev/sda2 id=2,dest=/dev/sda3
    fsarchiver probe simple

    # vytvoreni file systemu na USB disku
    mkfs.ext3 /dev/sda1
    e2label /dev/sda1 usb-backup

    # locate – nalezeni souboru
    locate vzor

    # find – nalezeni souboru a jeho obsahu
    find /adresar -name hledany_soubor -print
    find . -name ‘*2006*’
    find ~ -atime +365 -print
    find /home -user uzivatel
    find . | xargs grep ‘string’
    find /tmp -name ‘*.*~’ -print0 | xargs -0 rm
    grep ‘string’ ~/*
    find -print0 (ošetří zobrazení slepých znaků)
    -exec, jméno souboru {}
    find /tmp -name ‘*.*~’ -exec rm {} ;
    {} nahrazení jednoho daného nalezeného souboru
    ; expanduje daný znak shellu, escapovaní např. * napsat *

    # list all subdirectories
    ls -al | grep ‘^d’
    ls /etc/[Ss]* vypise vsechny soubory zacinajici pismeny Ss
    ls -dla /home/* | wc -l

    # delete / remove files and folders
    rm -rf *

    # man
    man -K aplikace … hledani aplikacniho manualu
    man vyuziva prikazu less pro prohlizeni man stranek
    /pattern * Search forward for (N-th) matching line.
    ?pattern * Search backward for (N-th) matching line.
    n * Repeat previous search (for N-th occurrence).
    N * Repeat previous search in reverse direction.

    # installed shells
    cat /etc/shells

    # vi
    (M meta klavesa je Alt)
    C-b presun o jeden znak vlevo
    C-f pres. o jeden znak vpravo
    C-a presun na zacatek radku
    C-e pres. na konec radku
    M-f pres. o jedn. slo. dopredu
    M-b jedn. slovo dozadu
    C-l smazani obrazovky
    C-u mazani radky
    C-k smazani znaku od kurzoru do konce radku
    C-y vlozeni smazaneho textu zpet
    C-d vlozeni znaku konce souboru
    C-h smazani znaku od kurzoru vlevo
    C-s pozastavení výpisu
    C-q pokračování výpisu
    C- ukončení procesu SIGQUIT
    C-d konec vstupu
    C-z suspend procesu
    C-j Enter
    yy Copy line
    P Paste above current line
    p Paste below current line
    dw Delete word
    cw Change word
    x Delete text at cursor
    X Delete (backspace) text at cursor
    a Insert text after cursor
    A Append text at line end
    0 Go to beginning of line
    $ Go to end of line
    h j k l Move left, down, up, right
    w b Scroll by word f/b
    ( ) Scroll by sentence f/b
    ?string Search backward for string
    /string Find next string

    # shell commands
    # expanzní znaky – přehled speciálních znaků
    | roura (pipe)
    ; ukončení na pozadí
    && spuštění při nulovém návratovém kódu předcházejícího příkazu
    || spuštění při nenulovém návratovém kódu předcházejícího
    – oznaceni itervalu napr a-z, 0-9
    * ? [] expanze názvů souborů
    ” potlačení všech spec. znaků uvnitř
    “” potlačení spec. znaků uvnitř mimo , $ a ”
    zástupný znak pro nový řádek
    < přesměrování std. výstupu >přesměrování std. vstupu
    ! negace
    # komentáře
    & spusteni na pozadi
    $ přístup k proměnným
    ; oddeleni prikazu
    () spusteni v kopii shellu

    # test – check file types and compare values
    test -f /etc/passwd && echo “Je to ono!” || echo “Smula”

    export prom=rodic2potomek
    echo ${prom}_neco

    Shell – kombinace příkazů
    cmd1 | cmd2
    cmd1 && cmd2 || cmd 3 – podmíněné spuštění
    {cmd1; cmd2} – skupina příkazů
    (cmd1; cmd2) – skupina příkazů v subshellu

    # history … zobrazeni historie prikazu
    !5 provede spusteni pateho prikazu v historii
    !-5 provede spusteni pateho prikazu v historii od konce
    !! provede posledni prikaz
    !cd hleda prikaz v historii zacinajici retezcem cd
    !?usr? hleda prikaz v historii obsahujici retezec usr
    C-r interaktivni hledani zpetne
    M-p neinteraktivni hledani zpetne historie prikazu
    M-n neinteraktivni hledani dopredne

    # cut, paste
    – remove sections from each line of files
    – paste – merge lines of files

    # aliasy
    alias zobrazeni nastaveni aliasu
    unalias zruseni alisau
    alias “cd+”=”moutn -t iso9660 /dev/hdd /mnt/cdrom”
    alias “cd-“=”umount /mnt/cdrom”

    # promenne prostredi (environment variables)
    hostname, term, shell, histsize, user, username, mail, path, lang, home … write UPPERCASE
    # nastaveni promenne
    zruseni promenne
    unset B
    export A nebo export A=ahoj … nastaveni promenne pro dalsi instance shellu
    set nebo env … zobrazeni promennych
    HISTSIZE pocet prikazu ulozenych v historii
    export PATH=$PATH:. pridani aktualniho adresare do promenne PATH

    # nastaveni globalnich promennych
    /etc/profile – je urcen pouze pro login shell (nebude vsak fungovat napr. v MC)
    /etc/bashrc – je urcen pro vsechny shelly
    . /etc/profile – znovu nacte profile nebo bashrc (. = prikaz source)

    # uzivatelske

    # Shell – proměnné prostředí
    PS1 – shell uživatele
    PS2 – login prompt
    TERM – typ terminálu (dobré použít s příkazem screen -T vt220)
    IFS – oddělovač polí (středník může být např. dvojtečkou)
    PATH – adresáře s programy
    SHELL – supštěný shell
    LOGNAME – login uživatele
    HOME domácí adresář uživatele

    # colors
    # light colors

    # set a fancy prompt
    if [ “$TERM” == “dumb” ]
    PS1=’u@h:w$ ‘
    # nebo zelena ?
    export PS1=”[e[36;1m]u@[e[32;1m]h:w> [e[0m]”

    # standardni vstup, výstup a chybový vystup
    STDIN … 0
    STDOUT … 1
    STDERR … 2
    viz /dev/fd, /dev/stdin, /dev/stdout, /dev/stderr

    # přesměrování std. vstupu ze souboru
    cat < vypis.txt ls /etc > vypis.txt 2>chyby.txt
    ls /bin > vypis.txt 2>&1
    ls /bin &>vypis.txt … přesměrování obou výstupů do jednoho souboru
    # nepojmenované roury (pipes)
    ls /etc | more
    ls -qa | grep “^k” | wc -l
    # pojmenované roury jsou specialni soubory
    mkfifo(1) /tmp/roura
    cat /tmp/roura
    echo ahoj | cat

    # processes
    yes … vypisuje “y” na terminal
    C-z pozastavi beh programu
    C-c zastavi beh programu
    jobs … zobrazi procesy terminalu
    fg %1 … pokracovani pozastaveneho procesu – prevedeni procesu na popredi
    bg %1 … prevedeni procesu na popredi
    yes > /dev/null
    kill %1
    nohup yes > /dev/null … run a command immune to hangups, with output to a non-tty
    disown %1 … jobs is removed from the table of active jobs
    # stavy procesu (z pohledu planovace uloh)
    ps aux

    VSZ pocet alokovanych stranek virtualnich
    RSS pocet alokovanych stranek realne vyuzitych
    STAT stav procesu z pohledu scheduleru
    START datum vytvoreni procesu

    R … bezici uloha nebo uloha naplanovana k behu
    S … stav prerusitelneho cekani (sleeping)
    D … stav neprerusitelneho cekani
    T … pozastavena uloha
    Z … zombie

    Vytvoření procesu
    * fork () – vytvoří kopii rodičovskoého procesu
    * exec () – nahradí adresní prostor procesu nově spouštěným programem
    * wait () – rodič čeká na konec potomka
    * exit () – potomek končí a aktivuje rodiče

    ttyN – terminaly N, virtualni konzole /dev/ttyN
    pts/N – pseudo terminaly, dynamicky vytvarene terminaly /dev/pts/N
    echo “Nas novy terminal” > /dev/pts/4
    tty vypise virtuální zařízení terminálu připojeného na standardní vstup

    Prehled signalu (man 7 signal)
    signal value action comment
    SIGHUP 1 A hangup detected on controlling terminal
    SIGINIT 2 A interrupt from keyboard
    SIGQUIT 3 C quit from keyboard
    SIGKILL 9 AEF kill signal
    SIGTERM 15 A Terminal signal

    trap ‘rm -f /$TMPFILE > /dev/null 2>&1; exit’ 0 1 2 3 15
    – odchytí signál např. v bash skriptu při stisknutí Ctrl+C a provede daný příkaz

    kill [-n] PID [default n value 15 SIGTERM]
    killall [-n] process name
    pgrep, pkill – look up or signal processes based on name and other attributes
    pkill -u euid,… only match processes whose effective user ID is listed
    pgrep bash – vypise seznam vsech PID procesu bash

    top – klavesa 1 prepina mezi vice CPU
    load average: prumerny pocet procesu ve stavu R za 1, 10 a 15 min.
    PR priority schedulleru
    NI nice value (negative nice value means higher priority, whereas a positive nice value means lower priority)

    Priorita procesu PR je cislo n>0. Je neustale prepocitavana, uzivatel nemuze tuto hodnotu menit.
    Je mozno menit hodnotu NICE <-20,19>, PRI=f (NICE,…,…0
    Udava jak je proces “hodny” na ostatni (-20 je nejvice zly)
    Vyssi priorita zpusobi pridelovani vetsiho casoveho kvanta procesu.
    nice -n -20 yes> /dev/null&
    renice 19 PID

    # show RAM
    -m (megabajty), b,k,g,-h spravny rozmer -i obsazenost inodu

    # /etc/inittab
    unikátní seznam úrovní jaká akce proces, který
    identifikátor běhu, kterých se má provést se má spustit
    1-4 znaky se akce týká initdefault, sysinit,
    respawn, wait, once, …

    si::sysinit:/etc/rc.d/rc.sysinit … vola konfiguraci pro vsechny urovne

    mingetty … spousti terminaly tty 1-6
    ttyS0 … terminal na seriovem portu

    /etc/rc.d/init.d … obsahuje vsechny spousteci skripty
    /etc/rc.d/rcX.d … obsahuje symbolicke linky na vlastni ovladaci skripty

    Snn … skritpt start
    Knn … skript stop

    runlevel … zobrazi spustenou uroven behu systemu
    ln -s ../init.d/httpd S60httpd … vytvoreni sym. linku na spusteni httpd napr v runlevel 5
    chkconfig –list sshd … sprava startovacich skriptu
    upstart … nova nahrada initd napr. Ubuntu

    # atd … jednorazove spusteni ulohy
    atq … list que
    atrm … delete jobs

    # crond … periodicke planovani uloh
    * * * * * příkaz
    0-59 0-23 1-31 1-12 0-6
    minuta hodina den měsíc den v týdnu
    0 … neděle
    0 20 * * * každý den ve 20:00 hodin
    0,30 20 * * * každý den ve 20:00 a 20:30 hodin
    0-30 20 * * * každý den ve 20:00-20:30 s krokem 1 minuta
    0-30/5 20 * * * každý den ve 20:00-20:30 s krokem 5 minut
    0 20 1-7 * 1 každé první pondělí v měsíci ve 20:00 hodin

    odkazuje na /etc/cron.xxxx, kam je mozne vlozit pozadovane skripty, ktere
    jsou spousteny programem run-parts

    # run-parts
    01 * * * * root run-parts /etc/cron.hourly
    02 4 * * * root run-parts /etc/cron.daily
    22 4 * * 0 root run-parts /etc/cron.weekly
    42 4 1 * * root run-parts /etc/cron.monthly

    ./crontab -e (edit) -l (list) … uzivatelsky crontab (/var/spool/cron/)
    0 20 * * * /bin/echo “je prave 20 hodin”
    povoleni ci zakazani pouzivani cronu uzivatelum

    # Logy
    Logování „do syslogu“ vs. logování do souboru
    Syslog daemon:
    Různé zdroje logů: /dev/log, síť
    Logování na vzdálený logserver přes síť
    Různé implementace služby syslog
    Aplikace mívají možnost výběru zda logovat do souboru nebo syslogu
    logger – program pro logování z shellu
    vlastní program pro logování (např pro apache)

    # syslogd, klogd (data z kernelu)
    /dev/log … socket
    FACILITY (oblast sběru) :

    LEVEL (stupeň důležitosti) :

    logger -p facility.level “Text zprávy” … uložení zprávy na vstup syslogu
    logger -p mail.info “Ctvrtecni zprava do logu”

    Jednotlivé řádky ve tvaru … selector (podminka) action
    selector = facility.level
    pokud logova zprava vyhovi vice podminkam, je provedeno vice akci
    none = tyto zpravy nebudou do logu zapsany napr. kern ma vlastni log a nebude v adm/critical

    *.=crit;kern.none /var/adm/critical
    kern.* /var/adm/kernel
    kern.crit @finlandia
    kern.crit /dev/console
    kern.info;kern.!err /var/adm/kernel-info
    mail.=info /dev/tty12
    mail.*;mail.!=info /var/adm/mail
    *.=info;*.=notice;mail.none /var/log/messages

    *.emerg * … rozeslani zpravy na vsechny terminaly
    *.alert * … zasilani zpravy po siti
    @finlandia (nebo IP) … zasilani zprav z klienta syslog po siti jinemu syslog serveru
    -r … spusteni syslogd aby prijimal zpravy ze site
    nahrada za syslog je rsyslog nebo syslog-ng

    # Logy – správa logů
    Rotace logů
    nutnost dát signál aplikaci aby logy uvolnila
    logrotate- spouštěné z cronu každý den, rotace logů, komprese, mazání starých logů
    Dohled nad logy
    logcheck – kontrola zda se v logu nenachází něco podezřelého (detekce např. útoku)
    rkhunter – rootkit hunter

    # Logserver – konfigurace
    Logovací server (syslog-ng):
    options {
    sync (0);
    time_reopen (10);
    log_fifo_size (1000);
    use_dns (yes);
    dns_cache (yes);
    use_fqdn (no);
    create_dirs (no);
    dns_cache_expire (120);
    use_fqdn (no);
    keep_hostname (yes);
    source s_net {
    udp(ip( port(514));
    destination d_net{
    log {

    # Klient (syslog):

    # Logy – logger
    Logování z Apache do logserveru
    – nutnost použít syslog-ng na straně webserveru – nevkládá hlášky o opakování zprávy
    – konfigurace v httpd.conf:
    ErrorLog syslog:local5
    SetEnvIf Request_URI “^/checkha.txt$” dontlog
    CustomLog “|/usr/local/sbin/apache_log webserver1” combined env=!dontlog

    Skript /usr/local/sbin/apache_log:
    use Sys::Syslog;
    $SERVER_NAME = shift || ‘www’;
    $FACILITY = ‘local1’;
    $PRIORITY = ‘info’;
    openlog ($SERVER_NAME,’ndelay’,$FACILITY);
    while (<>) {

    # logrotate … rotování logů, spoustene aplikaci cron
    /etc/logrotate.conf, /etc/logrotate.d/

    # swatch, logcheck, logwatch, … analýza systémových logů
    /usr/share/logwatch/ … copy to …/etc/logwatch/conf/logwatch.conf
    Service = All … jake logy jsou analyzovany

    # quota … souborový systém připojen s podporou kvót : /etc/fstab
    /dev/hda1 / ext3 defaults,usrquota,grpquota 1 1
    uživatelská skupinová
    kvóta kvóta

    quotacheck -uvgamc … vytvoření a kontrola databáze kvót

    V kořeni každého sledovaného adresáře:
    quota.user, quota.group (verze 1)
    aquota.user, aquota.group (verze 2)
    mount -o remount / … pri zmene fstab premountovani rootu

    quotaon -uvga, quotaoff -uvga … zapnutí, vypnutí systémů kvót :
    repquota -uvga … zobrazení stavu kvót

    Nastavení kvót:
    setquota [-u|-g] user|group block-softlimit block-hardlimit
    edquota user inode-softlimit inode-hardlimit filesystem

    setquota -u pepa 0 10000 0 0 /
    su – pepa
    yes > soubor.txt

    tune2fs … nastaveni parametru filesystemu
    -m reserved-blocks-percentage … set the percentage of reserved filesystem blocks
    dumpe2fs -h /dev/hda1 … zobrazeni parametru filesystemu

    tradicni model prav – lze vytvaret smostatne skupiny uzivatelu pro jemnejsi pridelovani
    prav k souborum, ale je to nesystemove reseni
    POSIX 1003.1e/1003.2c
    jedna se o bezpecnostni dodatek standardu POSIX ktery mimo jine definuje pristupove seznamy
    k souborum, ktery bohuzel nebyl nikdy schvalen, jedna se odraft;
    * pristupovy seznam ACL umoznuje definovat libovolne dlouhe seznamy opravneni pro dany soubor,
    vlastni pristupva prava rwx zustavaji nezmenena
    * ruzni uzivatele tak mohou mit k souboru nastavena ruzna pristupova prava
    * Linux implementuje ACL jiz dlouhou dobu a lze je pouzivat pro soborove systemy ext2,3, jfs, xfs, reiserfs
    * pro ruzne soborove systemy muze mit implementace ACL jista omezeni, jedna se zejmena o omezeni pozcu zaznamu v ACL
    Struktura seznamu ACL:
    * pristupova prava souboru jsou urcena jednim seznamem rizeni pristupu ACL
    * seznam obsahuje libovoly pocet zaznamu
    * kazdy zaznam nese specifickou informaci o pristupovych pravech pro konkretni kategorii uzivatelu
    * nektere zaznamy jsou v ACL povinne
    * lze definovat implicitni zaznamy pro adresare, ktere ovlivni nasstaveni prav nove vytvarenym souborum podobne jako
    maska umask u tradicniho modelu

    getfacl soubor … zobrazeni pristupovych prav
    # file: soubor.txt
    # owner: root
    # group: root

    setfacl -akce zaznam soubor .. zmena pristupovych prav
    setfacl -m u:pepa:rw soubor.txt
    setfacl -m u:franta:rwx soubor.txt
    setfacl -m g:adm:rwx soubor.txt

    # změna přístupových práv
    Sticky bit – není soubor odstraněn z paměti a jeho spuštění bylo v dřevních dobách rychlejší
    Pro adresář je sticky bit užitečný, pokud má adresář právo x, může z něj každý smazat soubory, pokud je však nastaven sticky bit, může soubory vymazat pouze vlastník.
    SetUID on exec
    SetGid on exec
    Proces převezme práva vlastníka (binárního) souboru. Platí pouze pro binární soubory.
    Proces má dvě pole euid (efektivní) ruid (reálný uživatel), pokud je nastaven sticky bit, je efektivní
    uživatel změněn na vlastníka souboru a proces je spuštěn s jeho právy (reálný uživatel zůstává).

    chmod u+s … set the permissions to “-rwsr-xr-x”, or similar (note the “s” replacing the usual “x”). That means that you can run certain commands with the permissions of a different user (typically root).

    regular file 666
    directory 777
    777 – 111

    022 101=5
    644 755

    mkdir adr
    chmod 2755 adr
    mkdir adr2
    drwxr-sr-x 2 root root 4096 Sep 18 14:20 adr2

    setfacl -m d:u:pepa:rw ./adresar
    setfacl -m d:g:franta:rwx ./adresar

    # file … determine file type
    – zjisteni typu souboru

    # LKM = Linux Loadable Kernel Module
    lsmod (/proc/modules) … výpis modulů zavedených v jádře

    Umístění modulů : /lib/modules/`uname -r`/
    jednotlive moduly maji priponu .ko (kernel object)

    Zavedení modulu : insmod msdos.o (2.4), insmod msdos.ko (2.6)
    insmod ne.o io=0x300,irq=11
    Inteligentní zavedení modulu: modprobe msdos
    Informace o modulu : modinfo ne
    Odstranění modulu : rmmod msdos
    Soubory : /proc/ksyms (2.4), /proc/kallsyms (2.6) – exportované symboly jádra

    # automatické zavádění modulů
    /etc/modprobe.preload, /etc/modprobe.preload.d/, /etc/modprobe.conf, /etc/modprobe.d/
    alias sound-slot-0 snd-intel8x0
    alias eth0 eepro100
    alias net-pf-31 bluez
    alias bt-proto-0 l2cap
    alias bt-proto-2 sco

    /etc/modprobe.d/modprobe.conf.dist … seznam vsech aliasu hw možných instalovat do systému

    # lspci … identifikace hardware
    lspci -vm

    # dmesg … cteni zprav jadra (kernelu)

    # zálohování
    není nutné zálohovat /sys, /proc, /dev

    # dump [-dump_level] [-b velikost_bloku] [-B pocet_bloku] [-f soubor] [-u] adresář
    -dump_level úroveň zálohy (0-9, 0 – plná záloha)
    -b velikost bloku velikost bloku v bytech
    -B počet bloků počet bloků
    -f soubor soubor kam se má záloha uložit (většinou device /dev/nst0)
    -u uchová informace o záloze v souboru /etc/dumpdates, nutné
    v případě inkrementální zálohy
    adresář adresář nebo blokové zařízení (/dev/sda2), které chceme
    -j compress_level komprese bzip2
    -z compress_level komprese gzip

    dump -0 -u -f /backup.hdb1.0 /dev/hdb1
    dump -3 -u -f /backup.hdb1.3 /dev/hdb1
    dump -0 -u -j 9 /home | dd bs=1024 of=/dev/rmt0

    # restore -mód_obnovy [další parametry]
    -r plná neinteraktivní obnova
    -i interaktivní obnova
    -R pokračování v přerušené obnově
    -C porovnání zálohy se současným stavem
    Použití nástroje restore :
    restore -rf /backup.hdb1.0
    Provede neinteraktivní obnovení zálohy do aktuálního adresáře.

    Použití nástroje restore v interaktivním režimu :
    restore -if /backup.hdb1.0

    # vytvořeni loop zařízení přes soubor a namontování jako disku
    dd if=/dev/zero of=disk.img bs=1024k count=150
    losetup /dev/loop0 /root/disk.img
    mkfs -t ext3 /dev/loop0
    mount /dev/loop0 /mnt/disk

    pro zapisovani
    /dev/full – reprezentuje plny disk
    pro cteni
    /dev/zero – stale generuje 0
    /dev/random – pro cteni nahodnych cisel
    /dev/urandom – stejne pro generovani pro pseudonahodnych cisel

    # PartImage
    rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
    yum install partimage
    partimage -z1 -o -d save /dev/loop1 ~/backup.img
    partimage restore /dev/loop1 /root/backup.img.000

    # dev – vytvoreni zarizeni
    mknod /dev/loop8 b 7 8
    block device – blokove zarizeni
    charakter device – znakove zarizeni

    # rsync [volby] zdroj cíl
    -a vytvoření archivu (parametry -rlptgoD)
    -v upovídaný režim
    –exclude nezahrnovat příslušné soubory do zálohy
    –delete odstraní z cílové složky soubory, které neexistují ve zdrojové
    rsync -av /home /mnt/backup/home
    rsync -av –exclude=”*c” /home /mnt/backup/home
    Pozn.: Pozor na zápis adresářů ve zdrojích. V případě, že za jméno adresáře
    napíšeme lomítko, je přenesen jeho obsah, nikoliv adresář samotný.

    Příklad vzdálené zálohy přes scp :
    rsync -ave ssh -delete –progress /home user@remotehost:/mnt/backup/
    rsync -ave ssh -delete –progress user@remotehost:/mnt/backup /home/
    Pozn.: Pozor na zápis adresářů ve zdrojích. V případě, že za jméno adresáře
    napíšeme lomítko, je přenesen jeho obsah, nikoliv adresář samotný.

    Místo scp může být použita metoda rcp klient / server.

    mirrordir – obdobný nástroj pro Unix

    # vipw, vigr – edit the password or group files

    #su … umožňuje spustit shell pod jiným uživatelským UID a skupinovým GID
    su [volby] [uživatel [argument]]
    -, -l spustí jako login shell
    -c=příkaz předá shellu příkaz
    -m nebude měnit proměnné prostředí
    -s=shell spustí zadaný shell (musí být uveden v /etc/shells)

    #Jazyky pro popis tiskové stránky :
    – PostScript (Adobe)
    – PCL Print Control Language (Hewlett-Packard)
    – ESC/P (Epson)
    – GDI (Microsoft)
    Před vytisknutím na rastrové tiskárně je třeba PostScript převést na rastr.
    Tento proces se nazývá Raster Imaging Process – RIP.
    PostScriptové tiskárny obsahují hardwarový RIP, některé velké profesionální
    tiskárny mají RIP softwarový implementovaný na rychlém počítači.
    PostScript je navržen jako nezávislý na výstupním zařízení !!!
    GhostScript je volně šířený interpret jazyka PostScript, softwarový RIP.
    Dokáže transformovat PostScript do různých formátů : různé formáty
    bitmapových souborů BMP, PCX, TIFF, jazyk PCL, …

    GhostScript používá systém filtrů, které popisují jakým způsobem má
    transformovat PostScript.
    Filtry : GimpPrint
    Popis specializovaných funkcí závislých na zařízení zajišťuje soubor
    PPD – PostScript Printer Description.
    Původně pouze pro PostScriptové tiskárny, dnes možnost použití
    i pro ostatní.
    Výborná integrace s CUPS !!!

    Konfigurace : /etc/cups
    WWW administrační rozhraní : http://localhost:631/
    RedHat konfigurační nástroje : printconf-tui, printconf-gui

    Ovládání :
    Vložení úlohy do tiskové fronty : lpr [-P fronta] soubor.txt
    Výpis obsahu fronty : lpq [-P fronta]
    Smazání zprávy z fronty : lprm [-P fronta] ID
    Zobrazení dostupných tiskáren: lpstat -a
    Nastavení výchozí tiskárny: lpoptions -d PRINTERNAME


    DeviceURI ipp://

    # ldd … print shared library dependencies
    ldd /bin/sh – slinkovani programu s knihovnou

    – configure dynamic linker run time bindings
    cesty ke knihovnam systemu

    ldconfig = aktualizovani cache cest ke knihovnam

    # apropos … search the whatis database for strings

    # screen … manažerem pro práci v terminálu
    C-a ? … rychlá nápověda
    C-a c … vytvoří nové okno
    C-a ” … přehled oken ”
    C-a x … zamknuti session
    C-a d … odpojeni od session
    screen -r … přihlášení ke spuštěné session
    screen -d -r … odpojí již připojenou session a znovu připojí k současnému terminálu
    screen -x … přehled všech sezení
    C-a [ … copy/scrollback režim

    sdílení sezení více uživateli:
    C-a : … a následným zadáním příkazu multiuser on
    C-a : addacl uživatelé, … přidání práva zápisu do sdílené session
    C-a : sessionname nové_jméno
    C-a * seznam uživatelů připojených k sezení

    screen -r vlastník_sezení/[sessionname]

    # file … determine file type

    # tty … print the file name of the terminal connected to standard input

    # strace … trace system calls and signals, debugging shell commands

    # sum … checksum and count the blocks in a file

    # write … allows you to communicate with other users, by copying lines from your terminal to theirs
    write bdokot pts/1
    When you are done, type an end-of-file or interrupt character.

    # getent – get entries from administrative database

    # nscd – name service cache daemon

    # nsswitch – System Databases and Name Service Switch configuration file

    # Linux PAM – Linux Pluggable Authentication Modules (PAM) provide dynamic authorization for applications and services in a Linux system.

    # DRBD (Distributed Replicated Block Device) is a distributed storage system for the GNU/Linux platform.

    # Bacula is an open source, enterprise level computer backup system for heterogeneous networks.

    # tmpfs is a common name for a temporary file storage facility

    # /proc
    ps aux – zjistit id procesu
    /proc/3867 – exe – odkud byl proces spusten
    – cwd – pracovni adresar procesu
    – environ – prostredi procesu

    # iotop

    # iostat
    iostat -k 1 /dev/sd[abcd]

    # bash shell script
    #! /bin/sh
    – může být shell spustěn i s login či debug parametry

    # id – print user identity

    # shell – expanze proměnných
    ${proměnná:-slovo} – pokud není definována proměnná (nebo je prázdná), použije se slovo


    # Shell – speciální proměnné
    $# – počet parametrů skriptu
    $0 – název skriptu
    $n – n-tý parametr
    shift [n] – posun číslování parametrů
    $* – všechny parametry
    $@ – –//–
    $? – návratový kód posledního programu
    $$ – PID aktuálního shellu
    $! – PID poslední úlohy na pozadí

    # getopt – parse command options (enhanced)

    # read promenna
    – načtění řádku ze vstupu
    – read nastavuje návratový kód, který je možné otestovat (kontrola zda proběhl vstup)
    – je možné načíst více argumentů najednou
    echo -n “Zadej login:”;read login
    # eval $promenna
    – argumenty se zpracují a znovu provedou

    # shell – řídící struktury
    if příkaz; then příkazy
    [elif příkazy]
    [else příkazy]

    while příkaz; do příkazy; done
    for a [in text]; do příkazy; done

    case text in
    vzor1 | vzor2)

    ls * | while read soubor; do echo $soubor; done

    # Regulární výrazy
    „maska“ pro definici řetězců
    využití: vi, sed, grep, awk, perl…
    – Speciální znaky:
    . libovolný znak (mimo konce řádku – LF)
    ^, $začátek a konec slova
    [seznam]jakýkoliv znak z výčtu
    [^seznam]jakýkoliv znak z doplňku výčtu
    – Opakování:
    * libovolný počet opakování (i žádné) předchozího výrazu
    + minimálně jeden výskyt předchozího výrazu
    (, ), nvymezení části vzoru a její následné použití

    [^.] výrazu odpovídají všechny znaky krome . (musi byt escapovano )
    [] – pokud jsou zavorky jako vycet a je pouzit znak ^ napr. [^] jedna se jakykoliv znak krome ^…

    vypíše uživatele, kteří mají stejné UID a GID:
    getent passwd | egrep ‘^[[:alnum:]_-]+:x:([[:digit:]]+):1’

    nevypsání záznamů od spamd a CRONu:
    tail -f /var/log/syslog | egrep -v “(spamd|CRON[|”

    načtení pravidel ze souboru:
    … | egrep -v -f soubor

    # tr ‘[[:upper:]]’ ‘[[:lower:]] | …
    Převedení velkých písmen na malá:

    find . -type f | while read soubor; do mv “${soubor}” “`echo $soubor | tr ‘[[:upper:]]’ ‘[[:lower:]]’`”; done

    Převedení CR v textovém souboru z DOSu do Unixu (translate)
    tr -d ‘r’ < input.file > output.file

    # sed – filtr pro práci s texty – neinteraktivní editor
    Spuštění: sed [adresa]příkaz
    Příkazů může být více
    prázdná – pro všechny řádky
    /exp/ – pro odpovídající vzorek (reg. výraz)
    n – n-tý řádek
    $ – poslední řádek
    s/vzorek/náhrada/[g|n] – nahrazení vzorku (reg. výraz), g = všechny výskyty, n = n-tý výskyt
    y/vzorek/náhrada/ – ekvivalent programu tr
    p vypsání textu

    sed -i.bak ‘s#:/home/#:/home/users/#g’ /etc/passwd
    hromadné přestěhování domácích adresářů uživatelů
    -i bude editovat primo soubor a vytvori jeho zalohu .back
    bezne je oddelovac / a muselo by byt escapovano, tudiz jako oddelovac
    slouzi znak #

    echo “Ahoj, Tondo.” | sed ‘s/^([a-zA-Z]+), ([a-zA-Z]+)./2/g’
    – zameni textove retezce

    sed -n ‘10,11,12p’ soubor
    – vypásní konkrétních řádků ze souboru

    # awk – postupně zpracovává řádky souboru a aplikuje na ně příkazy
    Předdefinované proměnné:
    RS- oddělovač záznamů/řádků
    FS- oddělovač polí
    NR- počet záznamů
    NF- počet polí
    ENVIRON[“HOME”]- přístup k prom. prostředí
    – je možné provádět přesměrování do souboru (print > file), spouštět externí programy (fce system())

    cat /etc/passwd | awk -F: ‘/^s/{print $1 “ma UID “$3” a jeho GID je “$4}’
    – zobrazi UID a GID kazdeho uzivatele zacinajiciho na pismeno ‘s’
    – parametr F urcuje oddelovac

    cat /etc/passwd | awk -F: ‘/^s/{print $1 “ma UID “$3” a jeho GID je “$4}; /^r/{print “uzivatel “$1″ zacina na r”}’
    cat /etc/passwd | awk -F: ‘/^s/{print $1 “ma UID “$3” a jeho GID je “$4}; /^r/{print “uzivatel “$1″ zacina na r”}; END{ print “celkem zpracovano: “NR}’

    cat > counter
    print “uzivatel: “$1″ zacina na s”
    END {
    print “Vypsal jsem ” r ” zaznamu s pismenkem s”

    cat /etc/passwd | awk -f counter

    $4 == “1000” {
    print “uzivatel: “$1″ je ve skupine 1000”
    END {
    print “Vypsal jsem ” r ” zaznamu”

    if ($4 == “1000”) {
    print “uzivatel: “$1″ je ve skupine 1000”
    else {
    print “uzivatel “$1″ neni ve skupine 1000”
    END {
    print “Vypsal jsem ” r ” zaznamu”

    # Skripty
    – Skripty neumožňují používat SUID bit
    vyjimka: perl
    editace visudo (ekvivalent vipw,vigr)

    # make
    – Generátor příkazů – automatizace opakujících se postupů.
    – GNU make, cmake
    – autoconf, automake, configure
    – python/perl/java mají své specifické postupy
    all: singlesingle: clean ldap.xml xhtml-onechunk.xsl xhtml-common.xsl
    xsltproc -o html/ xhtml-onechunk.xsl ldap.xml
    @rm -f html/*.html

    make – Makefile
    Závislosti cíle:targets: [files|targets]
    Prováděné příkazy:command
    Pokračování na dalším řádku:
    Nezáleží na pořadí definic, podpora maker, dostupnost systémových proměnnýchs

    # X Window systém
    Různé implementace, různé OS:
    cygwin, proprietární X servery
    síťově transparentní, lze provést přesměrování výstupu

    X Window systém x uživatel
    X umí vykreslovat základní grafické prvky (bod, úsečka) a neví co je menu, tlačítko, nestará se o okna
    pro vykreslení grafických prvků je nutné použít vhodný toolkit
    pro správu oken window manager

    X – konfigurace
    statická konfigurace v /etc/X11/xorg.conf
    Možnost ovlivnění konfigurace při startu případně za běhu
    Modulární systém

    X – vzdálený přístup
    různé implementace, klientský SW
    sdílení aktuálního sezení uživatele i samostatné sezení
    využití: X terminál
    nezabezpečený protokol – pouze lokální síť
    vysoké nároky na propustnost sítě
    neumožňuje sdílet sezení uživatelů
    SSH a forward aplikací skrz tunel

    # MySQL
    mysqladmin kill status processlist
    while true; do mysqladmin status; sleep 1; done

    # watch – execute a program periodically, showing output fullscreen
    watch -n 1 — mysqladmin status
    watch -n 1 cat /proc/mdstat

    # —
    touch — –ahoj
    rm — –ahoj

    # Troubleshooting
    chování OS:
    balíček sysstat:
    -iostat -k 1
    -vmstat 1
    iotop, top
    process accounting
    balíček acct
    sa /var/log/pacct
    sa –print-users /var/log/account/pacct
    # sar – Collect, report, or save system activity information.
    /etc/init.d/sysstat statrt

    Troubleshooting 2
    – zjistí typ souboru, ale i zařízení
    file -s
    file -s /dev/sda
    Trasování volání:
    strace systémová volání
    strace -ff -o /tmp/stracelog cat /etc/shadow
    – trasování více vláknových procesů např. apache (param. -ff)
    strace -o /tmp/stracelog -p 123 (připojení na běžící proces)
    ltrace volání knihoven
    ltrace getent passwd root

    ldd ldconfig
    lsof -n otevřené soubory
    fuser zjištění kdo „drží“ FS
    fuser -m -u /var/log

    Troubleshooting 3
    tcpdumpodchytávání provozu
    wiresharkodchytávání provozu, analýza
    openssl s_client -host server -port 443 = test SSL spojení
    openssl s_client -host mojedatovaschranka.cz -port 443
    telnettest TCP spojení
    netstat -tpln zobrazení TCP „listenerů“
    netstat -tpaun zobrazení všech spojení
    ip r lroutovací tabulka
    ip a lIP adresy lokálních rozhraní
    iptables -L -v -n [-t nat|-t mangle] stav iptables
    ethtool – ovládání síťové karty
    ethtool -p eth0 = např. identifikuje blikáním síťovou kartu
    dmidecode = reports information about your system’s hardware as described in your system
    smartctl -a /dev/sda = vypíše informace o SMART či provede test

    # Pošta
    – SMTP server bývá na každém serveru
    sendmail, postfix, exim, qmail a další
    – Zabezpečení komunikace
    – šifrování
    -TLS – 25/tcp
    – autorizace/autentizace
    – uživatel → SMTP server
    – SMTP server → SMTP server
    -Implementace (používané s Postfixem)
    – Cyrus – saslauthd
    – Dovecot

    # Doručování pošty – filtry
    Filtrování zpráv na straně serveru zajišťuje LDA
    -sieve filtry, možnost zpravovat vzdáleně
    – Autoodpovídač (vacation)
    externí program, sieve skripty

    # Zpřístupnění pošty klientům
    Lokální soubory
    klientský sw: mail, mutt, pine
    Courier IMAP/POP3, Dovecot
    Zabezpečení komunikace
    -TLS (IMAP, POP3)
    -SSL (IMAPs/POP3s)
    Existují proxy pro IMAP/POP3

    # Pošta – antispam/antivir
    Spamassassin, dspam
    razor, pyzor
    greylisting (gld, postgrey)
    Integrace s mailserverem:
    -zajišťuje základní filtrování, správu karantény

    # Pošta – odeslání
    Odesílání pošty
    -využívají systémové služby
    – Náhrada za /usr/sbin/sendmail
    – Postfix – nástroje:
    mailq, qshape- zobrazení stavu fronty
    postsuper- správa fronty
    postcat -q ID- vypsání zprávy ve frontě
    sendmail -bv adresa – test doručení komu email finálně bude doručen (kontrola rewrite) – na postfixu

    Doručování pošty do schránek
    – Formát schránky
    – LDA (local delivery agent)
    – mailserver
    – postfix -local, virtual
    – většinou velmi omezené možnosti filtrování
    – procmail
    – maildrop
    – dovecot
    – MDA (mail delivery agent)

    # postfix
    qshape – zobrazí počet čekajících mailů na jednotlivé domény
    postsuper – umí mazat z fronty emaily
    přes mailq zjistit ID a přes postsuper -d E83WF44DD
    postcat -q D8FUD88F23 | less – vypíše detaily emailu včetně obsahu
    postsuper -h ID zprávy – pozastavení zprávy a její opětovné unholdnutí -H
    postsuper -d ALL deferred
    mailq | awk ‘/marketing@adrsa/{print $1}’ | awk -F* {print $1}| while read id; do postsuper -h id;
    pro testování nahradit postsuper echo id
    pfqueue – sledování a modifikování poštovní fronty

    # mail klient – pine, mutt
    echo Ahoj Tondo… | mail -s “Pozdrav z hor” zc]tod[anemodnull]ta[letavizu
    cat /etc/config.conf | mail ….

    # gdb – The GNU Debugger (ddd)

    # Různé nástroje
    whois, geoiplookup (GeoIP)
    cheops-ng a alternativy

    Monitoring služeb
    Různé nástroje:
    – hotsanic (lokální historie zatížení serveru)
    – munin (server vs daemon – zobrazí grafy monitoringu)
    – smokeping (změří latenci linky)
    – Centreon (nástavba pro Nagios – využívá jeho backend), nagiosgrapher
    – CFEngine (cfengine.org) – standalone, datacenter management platform
    – Aktivní kontroly – NRPE – lokální agent
    – Pasivní kontroly – NSCA – pasivní příjem notifikací
    – Notifikace uživatelům – email, sms, vlastní
    – Závislosti, eskalace

    # Nagios – pluginy
    Velký výběr pluginů pro konkrétní služby
    – Vlastní moduly
    nezávislé na programovacím jazyku
    využití externích programů – možnost kontrolovat např. HW
    – Návratová hodnota
    0 = OK
    1 = warning
    2 = critical
    3 = unknown
    – Textový výstup

    # Debian Administration Utilities
    apachetop – Realtime Apache monitoring tool
    arping – Tool to send ICMP echo requests to an ARP address
    busybox – Tiny utilities for small and embedded systems
    cpbk – a mirroring utility for backing up your files
    cutter – disconnect routed IP connections
    di – advanced df like disk information utility
    disktype – detection of content format of a disk or disk image
    etherwake – A little tool to send magic Wake-on-LAN packets
    falselogin – False login shell
    fcrackzip – password cracker for zip archives
    htop – interactive processes viewer
    httping – ping-like program for http-requests
    hwinfo – Hardware identification system
    idswakeup – A tool for testing network intrusion detection systems.
    ifrename – Rename network interfaces based on various static criteria
    installwatch – Track installation of local software
    ipsc – IP Subnet Calculator for console
    iptraf – Interactive Colorful IP LAN Monitor
    knockd – small port-knock daemon
    labrea – a “sticky” honeypot and IDS
    linuxinfo – Displays extended system information
    lsscsi – list all SCSI devices (or hosts) currently on system
    memtester – memtest is a utility for testing the memory subsystem
    mindi – creates boot/root disks based on your system
    mtop – MySQL terminal based query monitor
    multitail – view multiple logfiles windowed on console
    notifyme – A program to notify the user when other one logs in
    rpl – intelligent recursive search/replace utility
    tiger – Report system security vulnerabilities
    tripwire – file and directory integrity checker
    shc – Shell script compiler
    wall – Prints a message to each user
    wcd – saves time typing when you want to change directories
    wipe – Secure file deletion
    whowatch – Real-time user logins monitoring tool
    zsafe – Password manager with encryption

    # Informations
    Open Computer and Software Inventory Next Generation, the open source automated inventory and deployment system


    AWK examples: http://www.ibm.com/developerworks/library/l-awk1.html

    Linux ArmOps (American Army) Game: http://www.americasarmy.com/

    Cedega (Point 2 Play) Distro: http://www.transgaming.com/products_linux.php

    CXOffice (Wine, CrossOver) Apps: http://www.codeweavers.com/products/cxoffice/

    Spacewalk – Linux systems management: http://www.redhat.com/spacewalk/

    Slax Distro: http://slax.linux-live.org/screenshots.php

    DSL Distro: http://www.damnsmalllinux.org/index.html

    Gentoo Distro: http://www.gentoo.org/

    ABC Linuxu: http://www.abclinuxu.cz/ucebnice/zaklady/zakladni-soucasti-systemu/procesy

    Linux Man: http://linux.die.net/man/1/top

    Linux CZ: http://www.linux.cz/

    Knoppix Bootable USB Key: http://www.knoppix.net/wiki/Bootable_USB_Key

    Linux Printing: http://www.linuxprinting.org

    Linux Security: http://www.grsecurity.net/

    Linux Advanced Routing & Traffic Control: http://lartc.org/

    KeyPass: http://keepass.info/