Tag Archives: ssh

Reverse SSH tunnel

Access Linux SSH server behind NAT via reverse SSH tunnel on relay server

http://xmodulo.com/access-linux-server-behind-nat-reverse-ssh-tunnel.html
https://www.everythingcli.org/ssh-tunnelling-for-fun-and-profit-autossh/
http://logan.tw/posts/2015/11/15/autossh-and-systemd-service/

• You have your Linux server running at home behind a NAT router without public IP address.
• You want to SSH to the home server from outside Internet.
• SSH port forwarding is not an option in this case.
• You don’t have your own public IP and you share some IP address with other users behind NAT.

The solution is reverse SSH tunneling.
• You need another relay host outside your network (for example VPS), which you can connect to via SSH.
• Then you set up a persistent SSH tunnel from the server in your home network to the public relay host.
• With this settings, you can connect back to your home server via the relay host.

Linux SSH server behind NAT: root@home-server
Relay SSH host (VPS): root@vps.eu (public IP: 80.243.110.249)
Your SSH client: username@laptop

Allow SSH daemon to port forward from external network interface (not only loopback) on SSH relay host.
[root@vps.eu ~]# vi /etc/ssh/sshd_config

GatewayPorts clientspecified

Restart SSH daemon.
[root@vps.eu ~]# /etc/init.d/ssh restart

Allow incoming port range on SSH relay host and autossh monitoring ports:
[root@vps.eu ~]# ufw allow 20001:20010/tcp
[root@vps.eu ~]# ufw allow 21001:21010/tcp

Create user account on relay server for SSH connection.
[root@vps.eu ~]# useradd -m -c "Name Surname" relay_username

Exchange the public key, the SSH connection works passwordless.
[root@home-server: ~]# ssh-copy-id relay_username@vps.eu

If you don’t have SSH keys generated yet, create them.
[root@home-server: ~]# ssh-keygen

Connect from your Linux server behind NAT using SSH relay host IP address and credentials (for example on VPS).
[root@home-server: ~]# ssh -N -R 80.243.110.249:20001:localhost:22 username@vps.eu

On SSH relay host check if SSH tunnel is established successfully.
[root@vps.eu ~]# netstat -nap | grep 20001

Now, from your client laptop, you can access your home server behind NAT.
[username@laptop: ~]$ ssh -p 20001 home-server_username@vps.eu

Locate testing session on relay server.
[root@vps.eu ~]# netstat -nap | grep 20001

tcp        0      0 80.243.110.249:20001    0.0.0.0:*               LISTEN      24823/sshd: relay_username

Kill testing session identified by PID, in our example 24823.
[root@vps.eu ~]# kill 24823

Configure persistent reverse SSH tunnel by installing AutoSSH.
[root@home-server: ~]# apt-get install autossh

Test the connection with AutoSSH.
[root@home-server: ~]# autossh -M 21001 -N -T -q -o "PubkeyAuthentication=yes" -o "StrictHostKeyChecking=false" -o "PasswordAuthentication=no" -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 80.243.110.249:20001:localhost:22 relay_username@vps.eu

“-M 20001” heartbeat port on relayserver to monitor SSH session
“-N” open the connection and do nothing (not interactive)
“-T” disable pseudo-terminal allocation
“-q” quiet mode
“PubkeyAuthentication” use key authentication
“StrictHostKeyChecking” does not accept unknown SSH host keys automatically
“ServerAliveInterval” exchange keep-alive messages every 60 seconds
“ServerAliveCountMax” send 3 keep-alive messages without receiving any response back

Start AutoSSH during boot with systemd:
/etc/systemd/system/autossh.service

[Unit]
Description=AutoSSH tunnel service
After=network.target

[Service]
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh -M 21001 -N -T -q -o "PubkeyAuthentication=yes" -o "StrictHostKeyChecking=false" -o "PasswordAuthentication=no" -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 80.243.110.249:20001:localhost:22 relay_username@vps.eu

[Install]
WantedBy=multi-user.target

Reload systemd and start AutoSSH daemon:
[root@home-server: ~]# systemctl daemon-reload && systemctl start autossh.service

Check AutoSSH the status.
[root@home-server: ~]# systemctl status autossh

Enable AutoSSH start during boot.
[root@home-server: ~]# systemctl enable autossh.service

SSH RSA fingerprint

SSH RSA fingerprint (-l means “list” instead of create a new key, -f means “filename”):

ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub

How to fix “X11 forwarding request failed on channel 0″

https://joshua.hoblitt.com/rtfm/2013/04/how_to_fix_x11_forwarding_request_failed_on_channel_0/

I’m using Ubuntu 12.04. The X11 forwarding is enabled in /etc/ssh/sshd_config (X11Forwarding yes).

As I stared more verbose mode:
ssh -vvv -X remotehost

I received following error:

X11 forwarding request failed on channel 0

The solution is to add following to configuration file /etc/ssh/sshd_config:

X11UseLocalhost no

Do not forget to restart ssh daemon:
service ssh restart

SSH Server configuration

Change following settings:

/etc/ssh/sshd_config

Port 22
Protocol 2
PermitRootLogin no
RSAAuthentication yes
PubkeyAuthentication yes
PermitEmptyPasswords no
X11Forwarding yes
UsePAM yes
UseDNS no

FreeNX remote desktop access

https://help.ubuntu.com/community/FreeNX

FreeNX is a system that allows you to access your desktop from another machine over the Internet. You can use this to login graphically to your desktop from a remote location. One example of its use would be to have a FreeNX server set up on your home computer, and graphically logging in to the home computer from your work computer, using a FreeNX client.

It’s Open Source, secure (SSH based), fast and versatile! License: GPL

FreeNX server:

sudo add-apt-repository ppa:freenx-team
sudo apt-get install python-software-properties
sudo sed -i 's/natty/lucid/g' /etc/apt/sources.list.d/freenx-team-ppa-natty.list
sudo apt-get update
sudo apt-get install freenx
wget https://bugs.launchpad.net/freenx-server/+bug/576359/+attachment/1378450/+files/nxsetup.tar.gz
tar -xvf nxsetup.tar.gz
sudo cp nxsetup /usr/lib/nx/nxsetup
sudo /usr/lib/nx/nxsetup --install
scp /var/lib/nxserver/home/.ssh/client.id_dsa.key client-user@cliet-machine:/~
sudo /etc/init.d/freenx-server start

By default, nxserver uses port 22 for communicating over SSH.
/etc/ssh/sshd_config
/etc/nxserver/node.conf

# The port number where local ‘sshd’ is listening.

SSHD_PORT=22

FreeNX client:
sudo apt-get install qtnx

SSH Port Forwarding (SSH Tunneling)

http://www.linuxhorizon.ro/ssh-tunnel.html

Syntax:
ssh -L localport:host:hostport user@ssh_server -N
where:

-L – port forwarding parameters (see below)
localport – local port (chose a port that is not in use by other service)
host – server that has the port (hostport) that you want to forward
hostport – remote port

-N – do not execute a remote command, (you will not have the shell, see below)
user – user that have ssh access to the ssh server (computer)
ssh_server – the ssh server that will be used for forwarding/tunneling

Without the -N option you will have not only the forwarding port but also the remote shell. Try with and without it to see the difference.

Note:
1. Privileged ports (localport lower then 1024) can only be forwarded by root.
2. In the ssh line you can use multiple -L like in the example…
3. Of course, you must have ssh user access on secure_computer and moreover
the secure computer must have access to host:hostport
4. Some ssh servers do not allow port forwarding (tunneling). See the sshd man
pages for more about port forwarding (the AllowTcpForwarding keyword is set to
NO in sshd_config file, by default is set to YES)…

Example:
ssh -L 4443:10.0.0.138:80 user@example.org -N
ssh -L 8888:www.linuxhorizon.ro:80 user@computer -N
ssh -L 8888:www.linuxhorizon.ro:80 -L 110:mail.linuxhorizon.ro:110 25:mail.linuxhorizon.ro:25 user@computer -N

The second example (see above) show you how to setup your ssh tunnel for web, pop3
and smtp. It is useful to recive/send your e-mails when you don’t have direct access
to the mail server.

For the ASCII art and lynx browser fans here is illustrated the first example:

   +----------+<--port 22-->+----------+<--port 80-->o-----------+ 
   |SSH Client|-------------|ssh_server|-------------|   host    | 
   +----------+             +----------+             o-----------+ 
  localhost:8888              computer      www.linuxhorizon.ro:80 

Open your browser and go to http://localhost:8888 to see if your tunnel is working.

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 192.168.1.100 string
grep “test string” -R /dir/*

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

# DNS client configuration
/etc/resololv.conf
search mydomain.local
nameserver 192.168.1.101
nameserver 192.168.1.102

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

# memory info
top
vmstat
free

# create file
touch

# chroot
chroot /directory
před chroot udělat:
mount -o bind /proc /chroot/proc; chroot /chroot
mount -t proc none /proc
nebo
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 //192.168.1.100/home/user /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)
Konfigurace:
/etc/exports:
/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
/files 192.168.1.100/24(rw,no_root_squash,async)
/etc/init.d/nfs-kernel-server restart
exportfs -a
/etc/init.d/portmap restart
mount 192.168.1.100:/data /data

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

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

Souborový systém:
/etc/fstab
– ext3:
nodiratime
errors=remount-ro
acl,user_xattr
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
//1.1.1.1/Myfolder /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
server:/var/spool/nagios

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

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

# 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 192.168.1.0
tcpdump -i eth1 -n port 8888 or port 7777 and host 192.168.x.x
tcpdump -n -i any host 192.168.1.100 or host 192.168.1.200 and not port 22
tcpdump -n -i any host 192.168.1.100 or host 192.168.1.200 and not port 22 and not net 192.168.3.100/26
tcpdump -n -i any host 192.168.1.100 or host 192.168.1.200 and not port 22 and not net 192.168.3.100/26 and not host 192.168.1.1 and not host 192.168.2.1 and not port 1215 and not port 1212
tcpdump -n -i any -s 1500 -w test_dump_file.dump host 192.168.1.100 or host 192.168.1.200 and not port 22 and not net 192.168.3.100/26 and not host 192.168.1.1 and not host 192.168.2.1 and not port 1215 and not port 1212

# ifconfig
ifconfig eth0 192.168.1.14
ifconfig eth0 netmask 255.255.255.128
ifconfig eth0 broadcast 192.168.1.127

# routing
route -n … show gateway / genmask
route add default gw 192.168.4.126
route add -net 10.0.1.0 netmask 255.255.255.0 gw 10.10.0.1 dev eth1
route add -net 10.0.2.0 netmask 255.255.255.0 gw 10.9.0.1
arping -i vlan99 192.168.1.200
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
users
who -a
last (last -f /var/log/wtmp)
w

# display linux tasks
top

# 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
chage
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
/etc/network/interfaces
auto eth0
iface eth0 inet dhcp
iface eth0 inet static
address 192.168.1.156
netmask 255.255.255.192
network 192.168.1.128
gateway 192.168.1.190
dns-nameservers 192.168.1.1 192.168.1.2

/etc/init.d/network restart

# network change hostname
hostname=
/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/hosts

# dhcp konfigurace
dhclient

# 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=http://192.168.1.129:8080
/etc/yum.conf
proxy=http://192.168.1.129:8080
/etc/yum.repos.d/install.repo
[os]
name=Red Hat $releasever – $basearch – Base
baseurl = http://192.168.122.30/mrepo/rhel4es-i386/RPMS.updates
baseurl=http://192.168.122.30/mrepo/rhel4.6es-$basearch/RPMS.os
baseurl=http://192.168.122.30/mrepo/rhel5.1-x86_64/RPMS.os
enabled=1
gpgcheck=0
/etc/yum.conf
[main]
cachedir=/var/cache/yum
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=redhat-release
tolerant=1
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
metadata_expire=1800
proxy=http://proxy:8080

yum makecache
yum list all
yum update

# Red Hat registration
rhn_register

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

python-updater

# 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 = 192.168.10.0/16
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
./vmware-install.pl

# 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
./configure
make
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
A=”ahoj”
B=$A
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
~/.bash_profile
~/.bashrc
~/.bash_logout
~/.bash_history

# 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
BLACK=”[33[0;30m]”
BLUE=”[33[0;34m]”
GREEN=”[33[0;32m]”
CYAN=”[33[0;36m]”
RED=”[33[0;31m]”
PURPLE=”[33[0;35m]”
BROWN=”[33[0;33m]”
GRAY=”[33[0;37m]”
# light colors
LBLACK=”[33[1;30m]”
LBLUE=”[33[1;34m]”
LGREEN=”[33[1;32m]”
LCYAN=”[33[1;36m]”
LRED=”[33[1;31m]”
LPURPLE=”[33[1;35m]”
LBROWN=”[33[1;33m]”
LGRAY=”[33[1;37m]”

# set a fancy prompt
if [ “$TERM” == “dumb” ]
then
PS1=’u@h:w$ ‘
else
PS1=$GREEN’u’$LBLUE’@’$LRED’h’$LCYAN’:’$LPURPLE’w’$LBLACK’$ ‘$RED
fi
# 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
ahoj

# processes
pstree
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
free
df

# /etc/inittab
id:runlevels:action:process
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
/etc/crontab
* * * * * 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
/etc/cron.allow
/etc/cron.deny

# 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
syslog
rsyslog
syslog-ng
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) :
AUTH
AUTHPRIV
CRON
DAEMON
FTP
KERN
LOCAL0 – LOCAL7
LPR
MAIL
NEWS
SYSLOG
USER
UUCP

LEVEL (stupeň důležitosti) :
EMERG
ALERT
CRIT
ERR
WARNING
NOTICE
INFO
DEBUG

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

/etc/syslog.conf
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);
log_fifo_size(4096);
stats(3600);
bad_hostname(“gconfd”);
};
source s_net {
udp(ip(192.168.1.10) port(514));
};
destination d_net{
file(
“/export/data/logs/$HOST/$YEAR/$MONTH/$DAY/$FACILITY”
perm(0640)
dir_perm(0710)
create_dirs(yes)
template(“$ISODATE <$FACILITY.$PRIORITY> $HOST $MSGn”)
template_escape(no)
);
};
log {
source(s_net);
destination(d_net);
};

# Klient (syslog):
*.*@loghost

# 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:
#!/usr/bin/perl
use Sys::Syslog;
$SERVER_NAME = shift || ‘www’;
$FACILITY = ‘local1’;
$PRIORITY = ‘info’;
Sys::Syslog::setlogsock(‘unix’);
openlog ($SERVER_NAME,’ndelay’,$FACILITY);
while (<>) {
chomp;
syslog($PRIORITY,$_);
}
closelog;

# 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
quota
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

POSIX ACL
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
user::rw-
user:pepa:rw-
user:franta:rwx
group::r–
group:adm:rwx
mask::rwx
other::r–

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).

mask::rwx
regular file 666
directory 777
777 – 111
101

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
zálohovat
-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é
složce
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
HPIJS
HPLIP
eplaser-jp
……….
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

/etc/cups/printers.conf

DeviceURI ipp://10.0.0.6/printers/LBP2900

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

– configure dynamic linker run time bindings
/etc/ld.so.conf
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á}
${proměnná:-slovo} – pokud není definována proměnná (nebo je prázdná), použije se slovo

DOPSAT

# 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]
fi

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

case text in
vzor1 | vzor2)
příkazy;
*)
příkazy;
esac

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
Adresa:
prázdná – pro všechny řádky
/exp/ – pro odpovídající vzorek (reg. výraz)
n – n-tý řádek
$ – poslední řádek
Příkazy:
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
[BEGIN{příkazy}][/regexp/]{příkazy}[END{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
BEGIN{
FS=”:”
r=0
}
/^s/{
print “uzivatel: “$1″ zacina na s”
r++
}
END {
print “Vypsal jsem ” r ” zaznamu s pismenkem s”
}

cat /etc/passwd | awk -f counter

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

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

# Skripty
– Skripty neumožňují používat SUID bit
vyjimka: perl
Řešení:
SUDO
/etc/sudo
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
Makefile:
all: singlesingle: clean ldap.xml xhtml-onechunk.xsl xhtml-common.xsl
xsltproc -o html/ xhtml-onechunk.xsl ldap.xml
clean:
@rm -f html/*.html

make – Makefile
Závislosti cíle:targets: [files|targets]
Prováděné příkazy:command
Komentář:#komentář
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:
Xorg
XFree86
cygwin, proprietární X servery
klient-server
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
VNC
různé implementace, klientský SW
sdílení aktuálního sezení uživatele i samostatné sezení
XDMCP
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
-sar
iotop, top
iftop
iptraf
htop
mtop
apachetop
process accounting
http://tldp.org/HOWTO/Process-Accounting/index.html
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

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

Troubleshooting 3
síť:
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
mtr
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
-SSL
– autorizace/autentizace
-SASL
– 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
procmail
~/.procmailrc
maildrop
~/.maildroprc
dovecot
-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
IMAP/POP3
Courier IMAP/POP3, Dovecot
Zabezpečení komunikace
-TLS (IMAP, POP3)
-SSL (IMAPs/POP3s)
Existují proxy pro IMAP/POP3

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

# Pošta – odeslání
Odesílání pošty
SMTP
lokálně
-využívají systémové služby
– Náhrada za /usr/sbin/sendmail
SSMTP
– 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
mbox
Maildir
– 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
~/.muttrc
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
DNS:
nslookup
host
dig
whois, geoiplookup (GeoIP)
nmap
nessus
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)
Nagios
– Centreon (nástavba pro Nagios – využívá jeho backend), nagiosgrapher
– CFEngine (cfengine.org) – standalone, datacenter management platform
Nagios:
– 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

Frontpage

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/