wtorek, 23 lipca 2013

Wysłanie powiadomienia z konsoli root na X'y użytkownika

Czasami potrzebujemy wysłać wiadomość na ekran dla użytkownika który pracuje na X'ach a my na poczciwej czarnej konsoli.

Ale jak to zrobić skoro my zalogowaliśmy się  np. po ssh.  i do X'ow nie mamy dostepu.

Załóżmy że , użyszkodnik zalogowany jest jako kowalski.

 

root@komp:~# ps ax | grep X
 6916 tty7     Ss+    6:23 /usr/bin/X :1 -auth /var/run/lightdm/root/:1 -nolisten tcp vt7 -novtswitch
13753 pts/1    S+     0:00 grep --color=auto X

interesuje nas parametr po X , w naszym przypadku :1

 

su - kowalski -c 'DISPLAY=:1.0 xmessage "Prosze o zrestartowanie komputera. Administrator sieci"'

 

w efekcie kolega kowalski powinien na ekranie otrzymać komunikat.

 

Prosze o zrestartowanie komputera. Administrator sieci

 

zamiast xmessage można też użyć notify-send

 

 

środa, 10 lipca 2013

LVM - Logical Volume Management

1) Fdisk (początkowe zarządzenie dyskiem, dyskami)

fdisk /dev/sda
(LVM typ 8e )

2) Tworzenie woluminu fizycznego (formatowanie)

pvcreate /dev/sda1
odpowiednio
pvcreate /dev/sdaX X=[1,2,3,4,5,...,n]

informacje o woluminach
pvdisplay
3) Tworzenie grupy:

vgcreate moje_dane /dev/sda1
lub
vgcreate moje_dane /dev/sda1 /dev/sda2 /dev/sda3
lub
vgcreate moje_dane /dev/sda1 /dev/sdb1 /dev/sdc1

sprawdzamy

vgscan
lub
vgdisplay
lub
vgdisplay moje_dane

4) Tworzenie woluminu logicznego.

tworzymy 100GB o nazwie partycja1 (dla LVM moje_dane)

lvcreate -n partycja1 --size 100g moje_dane
sprawdzamy

lvdisplay

5) Formatiren ;)

mkfs.ext4 /dev/moje_dane/partycja1

6) Montowanie

mkdir /mnt/partycja1/

vi /etc/fstab  (jeśli chcemy aby sie montowało podczas startu maszyny)

/dev/moje_dane/partycja1 /mnt/partycja1/ ext4 auto,users,rw,exec,dev,relatime  0  2

Ustawmy uprawnienia (kto może czytać/pisać w tym zasobie)

 
chown gienek:users /mnt/partycja1
chmod 775 /mnt/partycja1


7) Zmiana rozmiaru wolumenów

:zwiekszanie ze 100 do 300

umount /mnt/partycja1/
lvextend -L+200g /dev/moje_dane/partycja1
e2fsck -f /dev/moje_dane/partycja1
resize2fs /dev/moje_dane/partycja1
mount /mnt/partycja1


:zmniejszanie z 100 do 50

umount /mnt/partycja1/
e2fsck -f /dev/moje_dane/partycja1
resize2fs /dev/moje_dane/partycja1 50g
lvreduce -L-50g /dev/moje_dane/partycja1
resize2fs /dev/moje_dane/partycja1
mount /mnt/partycja1



Montowanie obrazów dysków KVM opartych na LVM


kpartx -av /dev/mapper/vgname/vlname

stworzone zostaną dowiązania do stworzonych w /vgname/vlname partycji
np. /vgname/vlname-home itd.

teraz możemy już traktować te dowiązania jak zwykłe urządzenia blokowe typu /dev/sda1 itd.

np.
mount  /dev/mapper/vgname/vlname-home /home 
fsck.ext4 /dev/mapper/vgname/vlname-home




czwartek, 27 czerwca 2013

Szyfrowanie swap - ecrypt

Aby włączyć/wyłączyć szyfrowanie swap w systemie linux , postępuj z poniższymi instrukcjami



TURN ON
 
sudo ecryptfs-setup-swap 
 
 

TURN OFF

sudo swapoff -a 

sudo cryptsetup remove /dev/mapper/cryptswap1 

sudo vim /etc/crypttab 
(*usunac/zahaszować wpis dla swap /dev/sda5* )

sudo /sbin/mkswap /dev/sda5 

sudo swapon /dev/sda5 

sudo vim /etc/fstab 
(*zamienić /dev/mapper/cryptswap1 na /dev/sda5*)

niedziela, 23 czerwca 2013

Maszyna virtualna - KVM

URUCHAMIANIE KVM  (ubuntu)

sudo apt-get install kvm
sudo apt-get install bridge-utils

Edycja  /etc/network/interfaces

auto lo
iface lo inet loopback
auto br0
iface br0 inet static
address xxx.xxx.xxx.xxx
netmask xxx.xxx.xxx.xxx
gateway xxx.xxx.xxx.xxx
bridge_ports eth0
bridge_stp off
bridge_maxwait 5
 

Edycja /etc/qemu-ifup

#!/bin/sh
/sbin/ifconfig $1 0.0.0.0 promisc up
/usr/sbin/brctl addif br0 $1
sleep 2
 

Teraz musimy stworzyć virtualny dysk:

mamy 2 możliwości

1) tworzymy dysk o stałej wielkości 4GB (dysk fizycznie tyle zajmie na dysku)

    dd if=/dev/zero of=disk01.img bs=1G count=4


2) tworzymy dysk o interesującej nas wielkości ale wielkość nie będzie alokowana (załóżmy ze chcemy dysk 10GB)

    qemu-img create -f qcow2 disk01.qcow2 10G


Teraz instalujemy system na virtualnym dysku

1)  z obrazu instalacyjnego  w pliku
    kvm -hda disk01.img -cdrom os.iso -m 512 -boot d -vnc IP:1
2) z dysku cdrom
    kvm -cdrom /dev/cdrom  -m 1024 -boot d -vnc  IP:1 disk01.qcow2

(po instalacji)

 Teraz mamy zamiar uruchomić maszynę wirtualną z obsługą sieci. Możemy przypisać do niej adresu MAC dla interfejsu sieciowego VM
Jest to ważne, jeśli używamy więcej niż 1 VM. Każda maszyna wirtualna powinna mieć inny mac-address.

    kvm -hda disk01.img -m 512 -boot c -net nic,vlan=0,macaddr=00:16:3e:00:00:01 -net tap -nographic -daemonize

powinniśmy mieć  już możliwość podłączenia się po ssh do naszej maszyny , jeśli występują problemy można dołożyć podgląd vnc

(czasami gdy są problemy z dostepem do sieci możan sprobować tak)

     kvm -hda disk01.img -m 512 -boot c -net nic,vlan=0,macaddr=00:16:3e:00:00:01,model=rtl8139 -net tap -nographic -daemonize

 ******

Konwertowanie obrazów:

virtualbox  --> kvm

  • najpierw konwersja na obraz typu IMG
   VBoxManage clonehd /sciezka/do/obraz.vdi /sciezka/do/obraz.img --format raw

  • teraz konwersja z obrazu IMG na format którego używa KVM
    qemu-img convert -f raw obraz.img -O qcow2 obraz.qcow2





Przykłady uruchomień kvm:

    kvm -hda /sciezka/disk1.qcow -hdb /sciezka/disk2.qcow -m 2048 -vga none -usb -usbdevice tablet -net nic -net user,hostfwd=tcp:192.168.1.2:2228-:22 



*****************

 
Przenoszenie działających obrazów systemu pliku do KVM opartych na LVM.
1. chyba najlepsze rozwiązanie (po sieci) 

Na maszynie docelowej:

iptables -I INPUT -p tcp --dport 9897 -s IP_ZRODLA -j ACCEPT
nc -l -p 9897 |dd of=/dev/mapper/vgname/lvname


Na maszynie źródła:
(wyłączamy bez błędów maszynę virtualną która chcemy skopiować.) 

 
dd if=/dev/mapper/vgname/lvname | nc IP_DOCELOWEJ 9897
[Enter]

i czekamy w zależność od ilości danych i łącza, np. przy łączy 1,5Mbit i 40GB danych to czas około 1h


2. możemy użyć komendy rsync

na maszynie docelowej:

tworzymy partycje na naszym pustym wolumenie LVM identyczna jak na maszynie źródłowej (nie konieczne ale wskazane, nie trzeba zmieniać wówczas /etc/fstab)

fdisk /dev/mapper/vgname/lvname


używamy komendy kpartx aby zobaczyć stworzone partycje
kpartx -av /dev/mapper/vgname/lvname



teraz powinniśmy w /dev/mapper/ odnaleźć odnośniki do naszych partycji

dalej postępujemy już jak z urządzeniami blokowymi (dyskami)
tworzymy system plików
np.

mkfs.ext4 /dev/mapper/vgname/lvname-home

itd.

tworzymy jakiś punkt montowania np. nowy
mkdir /nowy/
cd nowy

tworzymy katalogi które będą montowane np. home , var
mkdir home var
 

na maszynie źródła (na działającym virtualu):

rsync -avz -e ssh root@IP_ZDALNEGOKOMPA:/  /nowy/
i czekamy aż się zrobi

następnie należy uruchomić kvm z butowaniem się cdrom z obrazem np. knoppixa i uaktualnić wpis w MBR dla grub'a lub lilo.

np.
qemu-system-x86_64 -cdrom knoppix.iso -m 1096 -vnc :1 -boot d -drive file=/dev/mapper/vgname/lvname
,cache=none,if=virtio -pidfile /home/test.pid


dla lilo wystarczy uruchomić komendę
lilo

dla grub uruchomić komendę
grub-install /dev/vda1 (podać poprawny dysk)


niedziela, 12 maja 2013

Usuwanie plikow starszych niż ....


Czasami zachodzi potrzeba kasowania plików których "świeżość" ;) przekroczyła pewną ilość dni.


np.
choćby stare backupy ,  lub stare zdjęcia,  cokolwiek

oto kilka prostych porad jak się do tego zabrać:


1)
możemy wykorzystać do tego startego poczciwego find'a



find .  -ctime +30 -delete

lub jeśli szukamy tylko np. archiwum tar.gz

find . -name '*.tar.gz' -ctime +30 -delete

(kasowanie nastąpi w bieżącym katalogu dla plików starszych i równych 30 dni)

jeśli chcemy w innym katalogu to zamiast . po find wpisujemy zadany katalog

np.

find /tmp -name '*.tar.gz' -ctime +30 -delete 

(skasujemy wszystkie swoje pliki tar.tgz z katalogu /tmp , starsze niż 30 dni)


2)
możemy też wykorzystać skrypt w bash'u

vi kasuj_30dni.sh
 
(stwórz plik  z zawartością (poniżej))


#!/bin/sh

DZIS=`date +%s`
DOBA=86400

ls $1 | while read file
do
 STATE=`stat --format=%Y ${file}`
 PARAMETR=$(((DZIS-STATE)/DOBA))
 if [ $PARAMETR -gt 30 ]
 then
        echo "Kasuje plik ${file} ktory jest starszy niz 30 dni"
        rm -f -v ${file}
 fi
done
 
dodajmy uprawnienia dla pliku:
chmod u+x  kasuj_30dni.sh
 
i bęc uruchamiamy (tylko ostrożnie bo skasuje nam wszystko powyżej 30 dni w bieżącym katalogu)
  
./kasuj_30dni.sh
 
 
Andrzej Tarnowiecki
Usługi Informatyczne - tarnet.eu.org 

piątek, 10 maja 2013

Grub – konfiguracja

Konfiguracja GRUBA

GRUB (GRand Unified Bootloader) jest bootloaderem, które zastąpił nieco starsze poczciwe LILO.
Standardowa zawartość katalogu /boot/grub
[root@localhost grub]# ls
device.map  grub.conf  minix_stage1_5  stage2  e2fs_stage1_5  iso9660_stage1_5
reiserfs_stage1_5  ufs2_stage1_5  fat_stage1_5  jfs_stage1_5  splash.xpm.gz
vstafs_stage1_5  ffs_stage1_5  menu.lst stage1 xfs_stage1_5
Przykładową , standardowa konfiguracja
[root@localhost grub]# cat menu.lst
# root
(hd0,0)
# kernel
/boot/vmlinuz-version ro root=/dev/sda1
# initrd
/boot/initrd-version.img
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-194.32.1.el5)
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-194.32.1.el5 ro root=LABEL=/
initrd /boot/initrd-2.6.18-194.32.1.el5.img
title CentOS (2.6.18-194.el5)
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-194.el5 ro root=LABEL=/
initrd /boot/initrd-2.6.18-194.el5.img
OPIS parametrów:
default – w menu GRUB’a oznacza system, który zaznaczony jest jako automatycznie ładowany przy starcie. Cyfra oznacza numer systemu w konfiguracji. Liczenie zaczyna się od 0, a nie od 1.
timeout – czas podawany w sekundach do uruchomienia bootowania systemu. Jeżeli nie zmienimy wybory, automatycznie wystartuje system default.  Przerwanie odliczania można zatrzymać po kliknięciu dowolnego klawisza, z jednym wyjątkiem [ENTER]. Klikniecie [ENTER] zatwierdzi i przejdzie od razu do bootowania.
hiddenmenu – jeżeli ta opcja jest widoczna to znaczy, że menu GRUB’a wyświetli się dopiero po naciśnięciu klawisza ESC.

Dodawanie linijek z bootowaniem WINDOWS:
Z Windows na oddzielnym dysku. Dysk Linux musi być ustawiony na primary i boot.
(hd0,0) = /dev/hda1 #komentarz – pierwszy dysk, pierwsza partycja (Linux)
(hd1,2) = /dev/hdb1 # drugi dysk, trzecia partycja (Windows)
(hd2,1) = /dev/hdc3 # trzeci dysk , druga parycja (jakis inny system)
title Windows # nazwa jaka będzie wyswietlana podczas wyboru menu
map (hd0) (hd1) # zmiana kolejności dysków
map (hd1) (hd0) # System Windows uzna, że bottoje się z dysku PRIMARY
rootnoverify (hd1,0)
chainloader +1 przekazanie kontroli do następnego bootloadera w tym wypadku windowsa
UWAGA: poniedzy konfiguracjami systemów musi wystapić przynajmniej 1 linijka przerwy

Z FreeBSD na oddzielnym dysku:
Systemy z rodziny *BSD nazywaja dyski nie cyframi a literami alfabetu.
np. hd1.a , hd1,b
title FreeBSD
root (hd1,a)
kernel /boot/loader root

środa, 17 kwietnia 2013

Serwer vsFTPd

Czasami tak zdawała by się prosta rzecz jak FTP psuje cały humorek porannej kawy.

Co zrobić by serwer FTP  zadziałał na naszym LINUX np. Centos  6.0
 (Zalecanym przez korporację RedHat serwerem FTP jest VSFTPD czyli Very Secure Ftp Daemon)

1. Instalujemy VSFTPD na naszym serwerze:

yum update
yum install vsftpd

2. Konfigurujemy nasz serwer

plik konfiguracyjny znajdziemy w /etc/:
najpierw robimy kopie:

cd /etc/vsftpd
cp  vsftpd.conf vsftpd.conf.bac

teraz edytujemy:

vi /etc/vsftpd/vsftpd.conf 

(a) wariant pierwszy (tylko lokalni użytkownicy)


( konfiguracja serwera FTP pozwoli na łączenie się użytkowników do swoich katalogów domowych. Będą mogli oni pobierać i wysyłać na swoje konta dane z prędkością do 20 KB/s w obie strony, czasami się przydaje by nie wysycili nam łącza. Po zalogowaniu się do swoich kont, serwer FTP zastosuje zasadę chroot i zamknie możliwość poruszania się tylko do katalogu domowego, a więc user nie będzie mógł go opuścić, jest to dobra i bezpieczna opcja. Istnieje oczywiście możliwość dodania użytkowników którzy będą mogli poruszać się poza swoim katalogiem domowym. Nie ma możliwości logowania się ANONYMOUS. )



nopriv_user=ftp
listen=YES                               # nasłuchuj w trybie standalone
listen_port=21                           # nasłuchuj na porcie 21
anonymous_enable=NO                      # wyłącz logowania kont ANONYMOUS
local_enable=YES
write_enable=YES
local_umask=022
local_max_rate=20480
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log         # zapisuj logi do
max_clients=100                         # maksylmanie wszystkich połączeń        
max_per_ip=4                             # maksymalnie 4 połączenia na raz
banner_file=/etc/vsftpd/vsftpd.banner    # pokaż tekst powitalny z pliku
chroot_local_user=YES                    # włącz tryb chroot chroot_list_enable=YES                   # włącz liste dla których userow

                                         # stosować regule chroot
chroot_list_file=/etc/vsftpd/chroot.list # lista userów




(b) wariant drugi (tylko anonimowi goście, bez możliwości zapisu)

( przydatne gdy chcemy udostępnić dla ogółu jakieś pliki ,  logujemy się wówczas na login ftp i hasło puste lub można podać swój adres e-mail )

listen=YES
anonymous_enable=YES                    # włączamy możliwość logowania się gości
ftp_username=ftp                        # jako użytkownicy ftp
write_enable=NO                         # zabraniamy zapisu
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
anon_world_readable_only=YES
idle_session_timeout=350
connect_from_port_20=YES

port_enable=YES
hide_ids=NO
log_ftp_protocol=NO
syslog_enable=YES

max_per_ip=4
local_root=/usr/share/empty
nopriv_user=nobody
ftpd_banner=(vsFTPd nazwa_naszego_serwera)


(c) wariant trzeci ( lokalni użytkownicy i goście - uprawnienia pełen zapis)

( zezwalamy na zapis zarówno lokalnym użytkownikom jak i anonimowym , wszyscy zamknięci we własnych katalogach , w przypadku anonimowych jest to katalog /var/chroot/vsftpd , dodatkowo wprowadzamy ograniczenia na możliwość UPLOAD'owanie plików, zabraniamy wysyłać pliki typu mp3 i avi , oraz ukrywamy pliki typu txt i vcs )


najpierw tworzymy niezbędny katalog
mkdir /var/chroot/vsftpd


nopriv_user=ftp
listen=YES
listen_port=21
anonymous_enable=YES
local_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/xferlog.log
xferlog_std_format=YES
chroot_local_user=YES
secure_chroot_dir=
/var/chroot/vsftpd 
no_anon_password=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=NO
hide_ids=YES
local_umask=022
anon_umask=022
deny_file={*.mp3,*.avi}
hide_file={*.txt,*.vcs}



Powyższe konfiguracje są poglądowe, warto wykorzystać je do pomieszania i stworzenia własnej unikatowej konfiguracji.

2. Uruchamianie serwera FTP

/etc/init.d/vsftpd start 
 Uruchamianie vsftpd dla vsftpd:                            [  OK  ]

lub jeśli już jest proces uruchomiony (sprawdzamy)
ps ax | grep vsftpd
  28018 ?        Ss     0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf    

( widać, że uruchomiony jako process 28018)
lub

 /etc/init.d/vsftpd status
   vsftpd (pid 30688) jest uruchomiony...

to wpisujemy
/etc/init.d/vsftpd restart
Wyłączanie vsftpd:                                         [  OK  ]
Uruchamianie vsftpd dla vsftpd:                            [  OK  ]



3. Firewall - otwieranie usługi FTP na świat

niezapomnijmy o otwarciu jeszcze niezbędnych portów:
(musimy dopisać odpowiednie linijki do naszego firewalla)

#port 21 (TCP) - negocjacyjny 

iptables -A INPUT -s 0/0 -p tcp --dport 21 -j ACCEPT

#port 20 (TCP) - transmisji danych   (w trybie aktywnym)

 iptables -A INPUT -s 0/0 -p tcp --dport 20 -j ACCEPT

#porty od 1024 do 65530 - transmisji danych    (w trybie pasywnym)
iptables -A INPUT -s 0/0 -p tcp --dport 1024:65530 -j ACCEPT


4. Sprawdzamy naszego FTP
(najszybciej starym poczciwym telnet'em)

telnet localhost 21
 Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
Escape character is '^]'.
220 Witamy - tarnet.eu.org


aby wyjsć z telnetu naciskamy [CTRL} + ]
i wpisujemy quit

i mamy serwer gotowy :)




 Tarnek oKRUTNIK

http://tarnet.eu.org
http://tarnet.eu.org/linux