UNIX-like системи – история и концепция
Unix е компютърна операционна система, разработена през 1969 година от група специалисти от AT&T. В състава на работната група влизат Кен Томпсън, Денис Ричи и Дъглас Мак Илрой. В днешно време Unix има различни версии, разработени през годините от AT&T, както и от други комерсиални доставчици и некомерсиални организации.
Само системи, напълно съвместими и сертифицирани по UNIX спецификацията (Single UNIX Specification) могат да се наричат „UNIX“. Другите се наричат „Юникс подобни“ (Unix-like). Тоест Linux и Mac OS X са Unix-like.
Unix е проектирана като преносима, многозадачна и многопотребителска операционна система, с йерархична файлова структура, голям брой малки програми които могат да бъдат навързани заедно чрез интерпретатор на команден ред (bash) и чрез канали (pipe). Тази концепция е известна като философията на Unix.
В Unix операционната система ядрото отговаря за пускане и спиране на програмите, за работа с файловите системи и други. Най-важната му задача обаче е, че то контролира директния достъп до хардуера. Затова ядрото има специални привилегии за достъп до системата, което води до отделянето на „потребителско“ и „системно“ пространство.
Тъй като новото комерсиално лицензиране на UNIX през 80-те години на 20-ти век не е изгодно за академично използване, разработчици от Бъркли продължават да развиват BSD Unix като алтернатива на UNIX System. Така се ражда BSD лиценза който е свободен за ползване и операционни системи като FfeeBSD, NetBSD и OpenBSD, които се използват широко и до днес.
Какво е Линукс и Линукс дистрибуция
Линус Торвалдс e Роден е в Хелзинки, Финландия на 28 декември 1969 г. Още Като студент през 1991 г. той написва ядрото Линукс (Linux Kernel), занимавайки се с Unix, разпространява го сред приятели студенти и програмисти чрез университетския FTP сървър и всеки започва да добавя по нещо и да го подобрява.
Linux (Линукс) е общото название, което се дава на всички операционни системи, основаващи се на ядрото Linux Kernel, системните инструменти и библиотеки от проекта GNU. Различните такива операционни системи се наричат Линукс дистрибуции, като те се различават по това с какъв друг софтуер пристигат.
Ubuntu е базирана на една от най-големите Линукс дистрибуции Debian. За разлика от всички други Debian деривати Ubuntu изпреварва родителя си и оглавява челните позиции по популярност. Според Canonical, към 2011 г. Ubuntu се ползва от около 20 милиона потребители. Тя е на челно място и в списъка на най-популярните дистрибуции на Линукс за уеб сървъри.
Други известни имена на Линукс дистрибуции които може да чуете са Debian, slackware, RedHad, Fedora, Centos, Mint, PCLinuxOS, openSUSE, elementary, KNOPPIX, Arch, Kali и др.
Линукс ядрото – Linux Kernel
Линукс ядрото е сърцето на операционната система. Всъщност, то е самата операционна система. Зарежда се със стартирането на компютъра и се заключва в паметта до изключването на машината. Има две основни задачи да обслужва хардуера на ниско ниво и да създава средата, необходима за работата на процесите.
Линукс ядрото се характеризира като монолитно – един голям изпълним файл (максимално няколко мегабайта), съдържащ множество логически разделени компоненти.
Модулите дават възможност на ядрото да придобива временни пълномощия, каквито не са му вродени при компилацията. Ядрото може да зарежда динамично допълнителни парчета код, за да изпълни конкретна задача и след това да изчисти модула от паметта.
Има някои драйвери или функции, които не могат да работят като модули. Те трябва или да се вградят в ядрото, или напълно да се изключат. Повечето неща се копилират като модули, но някои, от които зависи пряко бързодействието на системата, задължително трябва да бъдат част от ядрото.
Обвивката на ядрото – Bash Terminal
Bash (Bourne Again SHell) е не само команден интерпретатор но и език за писане на скриптове. bash скриптовете ви позволяват да автоматизирате множество задачи. Много от програмите, които може да намерите за Linux са bash скриптове. Ако искате да разберете как работят те или да ги редактирате трябва да разбирате синтаксиса на bash. Познаването на bash, ви позволява да напишете ваши собствени програми, които да изпълняват определени задачи.
Файлова система
Файловата система в Линукс не използва идентификатори на устройствата (C:,D:,E:) а организира всичко в една единствена йерархична дървовидна структура. Всеки нов хард диск се добавя към тази дървовидна структура като нейно под-дърво. Мястото където присъединяваме (монтираме) диска, може да е във всяка една поддиректория от главната в която пожелаем.
Основната директория “/” се нарича root директория. В нея са разположени всички други директории, всички файлове, всички устройства, всичко, което системата използва.
/bin - основни програми на операционната система /boot - ядрото на операционната система /dev - файловете (устройства), отговарящи на хардуерa /etc - глобални конфигурационни файлове /home - домашните директории на потребителите /lib - най-важните системни библиотеки /mnt - обикновено тук се монтират външните устройства /opt - инсталации на големи софтуерни пакети, като KDE и Gnome /proc - достъп до различни параметри на операционната система /root - домашната директория на root потребителя /sbin - основни програми използвани от root /tmp - временни файлове /usr - повечето инсталирани програми, помощната информация и др. /var - данни на системните програми
Всичко е файл: За Linux всичко е файл. Звуковата карта е файл, към който се изпращат команди. Мониторът е файл, към който тече информация. Модемът е файл, към който и от който текат данни и т.н. Такава организация създава гъвкавост на работа, особено на системно ниво.
Основни Линукс команди
cd – промяна на директорията ls – показване на файловете pwd – knowing where you are cp – копиране на файлове ln – създаване на символни връзки mv – преместване и преименуване на файлове rm – изтриване на файлове tail – наблюдавай какви промени се случват в даден файл top – програма за следене на CPU-то и паметта who – виж кой още е влезнал в системата
Tекстов редактор Nano
Прозорецът на редактора се състои от 3 части. Най-отгоре е лентата, в която в ляво се изобразява версията на редактора, в средата името на текущия файл, и в дясно индикация дали файлът е променен след последното записване. В средата на екрана се изобразява съдържанието на обработвания файл. Третият ред отдолу е предназначен за важни съобщения, а на последните два реда е помощната информация с опциите за възможните команди. Може да се активира и мишка.
GNU nano 2.5.3 File: text.txt Modified [ Wrote 1 line ] ^G Get Help ^O Write Out ^W Where Is ^K Cut Text ^J Justify ^C Cur Pos ^X Exit ^R Read File ^\ Replace ^U Uncut Text^T To Spell ^_ Go To Line
Линукс не е Windows
Линукс общността не се опитва да предложи на средностатистическия Windows потребител една заменяща ОС. Един Windows потребител трябва да осъзнае, че той е само един опитен Windows потребител, а не опитен компютърен потребител. Този прост факт причинява доста трудности на по-напредналите Windows потребители. Всичките излишни бутони и падащи менюта в системната администрация, без които не може да се направи даден софтуер лесен за употреба, са просто препятствия, които се пречкат на опитния потребител. За това голяма част от конфигурационните файлове в Linux са текстове файлове въпреки, че има възможност това да се направи с менюта през web страничка например.
Потребители в системата
Администраторът на системата се нарича root потребител. Той има всички права над всичко и всички. Останалите потребители имат ограничени права спрямо операционната система и пълни права във собствената си директория, която се намира в директорията /home. Това означава, че потребителят може да се разпорежда само със директориите и файловете в директорията на акаунта си /home/потребител, но не с файлове и директории на други потребители или в системните директории. Всички програми и услуги, стартирани от определен потребител, придобиват неговите права. Някои програми, предназначени за управление на операционната система, не могат да се стартират от обикновен потребител, а само от root.
Права потребителите
Всички директории и файлове са притежание на потребителите означени не само с име, но и със специални флагове, показващи няколко неща:
1. Файловете трябва да се указват дали са изпълними или не.
2. Чия собственост е файла или директорията.
3. Права за употреба на файловете и директориите. Тук имаме три варианта:
a) права на собственика,
b) права на потребителите от групата
c) права на другите потребители
Тези три пункта имат следните възможности:
a) файла или директорията са забранени
b) файла или директорията може да се отворят, но не и да се променят
c) файла или директорията може да се отварят и променят.
samyil@desktop:~$ ls -la total 200 drwxr-xr-x 32 samyil samyil 4096 апр 25 16:21 . drwxr-xr-x 3 root root 4096 мар 31 19:53 .. drwx------ 3 samyil samyil 4096 апр 1 02:26 .adobe -rw------- 1 samyil samyil 10957 апр 26 02:22 .bash_history -rw-r--r-- 1 samyil samyil 220 мар 31 19:53 .bash_logout -rw-r--r-- 1 samyil samyil 3771 мар 31 19:53 .bashrc drwx------ 24 samyil samyil 4096 апр 20 11:00 .cache drwxr-xr-x 2 samyil samyil 4096 мар 31 20:26 Music drwxrwxr-x 2 samyil samyil 4096 апр 2 23:51 .nano
Символите в началото на всеки ред представляват флаговете, показващи правата за изпълнение на файла или директорията. d показва, че файла представлява директория. Липсата на такъв символ указва, че файла си е обикновен файл. Останалите символи описват правата за достъп до файла от различните потребители. Както казахме, имаме три групи потребители: собственик, група и останалите. За всяка такава група има три варианта за достъп: r (четене ), w (писане ) и x (изпълнение). Така получаваме последователност от 10 символа, описващи правата за достъп. Посочената поредица от флагова ни казва, че Music е директория, собственика може да я изпълнява, да чете и пише в нея. Потребителите от групата могат само да я изпълняват (разглеждат) и да четат файловете, докато останалите могат само да отварят тази директория. Да се изпълни една директория? Значи, че може да се разгледа съдържанието на тази директория. Ако за някой потребител директорията не е означена с x , то той не може да види съдържанието и.
Създаване собственик и група на файл.
chown samyil:samyil /home/samyil/new.txt
Създаване права на файл.
chmod 777 /home/samyil/new.txt
7 read, write and execute rwx 6 read and write rw- 5 read and execute r-x 4 read only r-- 3 write and execute -wx 2 write only -w- 1 execute only --x 0 none ---
su – превключване между потребителите
Потребителите могат да извикват голяма част от командите на обвивката, но има команди, които са достъпни само за суперпотребителя root. Тези забранени команди се използват за системни администраторски функции и обикновеният потребител не трябва да има достъп.
С командата su знаейки паролата на даден потребител, винаги можете да влезете в неговият акаунт и да ползвате неговите права.
su име на потребител
Докато сме в системата като обикновен потребител промпта изглежда така:
samyil@host2:~$
Когато влезем в системата като root вече промта ще изглежда така;
root@host2:~#
Промпта е променен и знака # показва че сте root.
sudo – превръщане в root
Sudo е програма за Unix подобните операционни системи която позволява на потребителите да работят с програми с привилегии за сигурност на root потребител. За разлика от съответната команда su, потребителите трябва да представят собствената си парола за удостоверяване, а не паролата на root.
Конфигурационния файл на sudo е /etc/sudorc а за да се причисли обикновения потребител в групата sudo трябва да се добави в /etc/group обикновенно като sudo:x:xx:обикновен-потребител.
За да се изпълни команда като root от текущия потребител се добавя само sudo преди командата
samyil@host2:~$ sudo service apache2 restart [sudo] password for samyil:***************** * Restarting web server apache2 [ OK ] samyil@host2:~$
Програмиране на bash
Една програма за bash комбинира UNIX командите по даден начин, за да изпълни определена задача. Програмата за bash представлява текстов файл, съдържащ команди, които можете да въведете със най-обикновен текстов редактор като nano. Този текстов файл се нарича скрипт за обвивката.
Изпълняваме в терминала “nano script” за да отвори редактора nano файла script и въвеждаме:
#!/bin/bash echo "Hello, World"
с Ctrl+O запаметявайки файла а с Ctrl+x излизаме от него
за да създадем традиционния Hello, World script трябва да направим скрипта изпълним
chmod 755 script
А за да го изпълним
samyil@desktop:~$ ./script Hello, World
pipe в shell
Pipe е една от най-важните характеристики, които са налични в Linux shell. Тази функция е просто удивителна за хора, които не са запознати с концепцията за pipe. Te са напълно изненадани когато видят че работи. С използването на pipe се свързват две или повече програми. С pipe обикновенно с изхода на дадена команда изпращаме поток от данни за да действа като вход за друга команда.
пример:
root@host:~# ls -la /var/log/ | grep mail -rw-r--r-- 1 syslog adm 0 мар 25 06:25 mail.err -rw-r----- 1 syslog adm 144 мар 24 14:10 mail.err.1 -rw-r----- 1 syslog adm 422 фев 28 23:42 mail.err.2.gz -rw-r----- 1 syslog adm 1988 фев 27 11:06 mail.err.3.gz -rw-r--r-- 1 syslog adm 11069351 апр 28 12:50 mail.log -rw-r--r-- 1 syslog adm 10353702 апр 24 06:25 mail.log.1 -rw-r--r-- 1 syslog adm 923847 апр 18 06:25 mail.log.2.gz -rw-r--r-- 1 syslog adm 783193 апр 10 06:25 mail.log.3.gz -rw-r--r-- 1 syslog adm 1247165 апр 3 06:25 mail.log.4.gz
root@host:~# cat * | grep "Linux" | grep -v "UNIX" | wc -l
Създаване и изтриване на потребители
Най често използвания скрипт за създаване на потребител е:
samyil@desktop:~$ sudo adduser ivan [sudo] password for samyil: Adding user `ivan' ... Adding new group `ivan' (1001) ... Adding new user `ivan' (1001) with group `ivan' ... Creating home directory `/home/ivan' ... Copying files from `/etc/skel' ... Enter new UNIX password: **** Retype new UNIX password: **** passwd: password updated successfully Changing the user information for ivan Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y
Нека видим какво направи скрипта:
създаде директoрия:
samyil@desktop:~$ sudo ls -la /home/ivan/ total 32 drwxr-xr-x 2 ivan ivan 4096 апр 28 13:12 . drwxr-xr-x 4 root root 4096 апр 28 13:12 .. -rw-r--r-- 1 ivan ivan 220 апр 28 13:12 .bash_logout -rw-r--r-- 1 ivan ivan 3771 апр 28 13:12 .bashrc -rw-r--r-- 1 ivan ivan 8980 апр 28 13:12 examples.desktop -rw-r--r-- 1 ivan ivan 675 апр 28 13:12 .profile
потребител във файла:
samyil@desktop:~$ sudo cat /etc/passwd | grep ivan ivan:x:1001:1001:,,,:/home/ivan:/bin/bash
паролата му в:
samyil@desktop:~$ sudo cat /etc/shadow | grep ivan ivan:$6$h/gHX8qn$G.0BuGUEiwZfWdovdGKGsaHyYyev9PTrjoFLKwLvona1GaQHnTmBKP1G08C8OaPm.bVqDPycYX9CdcPU3uJO51:16919:0:99999:7:::
добави потребител ivan към група ivan
samyil@desktop:~$ sudo cat /etc/group | grep ivan ivan:x:1001:
Изтриване на Иван:
samyil@desktop:~$ sudo deluser --remove-home ivan Looking for files to backup/remove ... Removing files ... Removing user `ivan' ... Warning: group `ivan' has no more members. Done.
Мрежа в Линукс
Няма такова нещо като Cisco мрежи, Windows мрежи или Linux мрежи ! Има мрежови стандарти, които се поддържат от всички. Както производители на хардуер така и разработчици на софтуер.
RFC (Request for Comments) е термин за компютърни мрежи и Интернет и представлява работен документ с пореден номер в серия от такива документи, съдържащ предложения за стандарти или допълнителна информация. Тези документи се използват широко от общностите на Интернет и Юникс потребителите. Поредицата от RFC документи започва през 1969 като част от проекта ARPANET, предшественик на Интернет. Днес това е официалният канал, през който IETF и други Интернет организации публикуват стандарти.
OSI (на английски: Open Systems Interconnection Basic Reference Model) е теоретичен модел, описващ принципния начин на комуникация в компютърните мрежи. OSI моделът предоставя обща рамка, която производителите и разпространителите да следват при проектиране на хардуера, операционните системи и протоколите, като дефинира стандартните спецификации за комуникация между системите.
командата ifconfig: Най-важния аспект на Линукс е работата му в мрежа. Основната команда, която служи за конфигурирането на мрежата е ifconfig. Чрез нея може да се задават IP адресите на мрежовите интерфейси, мрежовата маска и т.н.
enp2s0 Link encap:Ethernet HWaddr d0:50:99:59:45:8d inet addr:192.168.10.101 Bcast:192.168.10.255 Mask:255.255.255.0 inet6 addr: fe80::e07e:75be:3cef:a457/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:6482389 errors:0 dropped:0 overruns:0 frame:0 TX packets:7428944 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4147355784 (4.1 GB) TX bytes:8140197137 (8.1 GB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:17550 errors:0 dropped:0 overruns:0 frame:0 TX packets:17550 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:2797709 (2.7 MB) TX bytes:2797709 (2.7 MB)
enp2s0 и lo са идентификаторите на мрежовите интерфейси, като enp2s0 е първата мрежова карта, а lo е интерфейса осигуряващ loopback. Този интерфейс съществува винаги, даже и ако компютъра няма инсталирана мрежова карта. inet addr показва IP адреса, който е присвоен на съответния интерфейс; Bcast – адреса за броадкаст на мрежата; Mask – мрежовата маска. Link encap показва типа на интерфейса. Ако интерфейса е мрежова карта Hwaddr показва нейния хардуерен адрес (MAC адрес).
ifconfig enp2s0 192.168.10.101/24
командата route. Чрез нея администратора може да манипулира маршрутизиращата таблица на ядрото на операционната система. Най-простото използване на командата е:
route add default gw 192.168.10.1
DNS сървъри за имена: Ако се конфигурира gateway, компютъра ще получи и достъп до Интернет. Достъпът до Интернет изисква и задаване на DNS сървър във файла /etc/resolv.conf.
nameserver 8.8.4.4 nameserver 8.8.8.8
командата ping
Ping е компютърна програма за мрежова администрация, използвана за проверка на достъпността на хостове в интернет или локална мрежа. Използва протокола (ICMP). Името пинг произлиза от сонарната терминология.
Ping работи на принципа на ехото, като изпраща съобщение чрез ICMP протокола до отдалечен компютър. Съобщението съдържа „искане“ за отговор от хоста. В този процес се измерва времето от предаване на съобщението до времето на получаването му от първоначалния компютър (двупосочния път) и се записва всяка загуба на пакети. Резултатите от теста се отпечатват на екрана под формата на статистически съобщения.
Резултат от програмата Ping, при тестване на хоста google.com:
sami@sami:~$ ping abv.bg PING abv.bg (194.153.145.104) 56(84) bytes of data. 64 bytes from abv.bg (194.153.145.104): icmp_req=1 ttl=60 time=9.10 ms 64 bytes from abv.bg (194.153.145.104): icmp_req=2 ttl=60 time=8.46 ms 64 bytes from abv.bg (194.153.145.104): icmp_req=3 ttl=60 time=8.19 ms 64 bytes from abv.bg (194.153.145.104): icmp_req=4 ttl=60 time=8.96 ms ^C --- abv.bg ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3004ms rtt min/avg/max/mdev = 8.199/8.682/9.107/0.379 ms
Ping може да се стартира чрез използване на различни опции в командния ред, които позволяват специални режими на работа, като например да се уточни размера на изпращаните пакети и др. С Ping може да се злоупотребява, обикновено под формата елементарна DoS атака, в която програмата е настроена така, че да изпраща много пакети с големи размери, които да „наводнят“ атакувания хост и да затруднят работата му.
командата traceroute
Често пъти е полезно да бъде проследен маршрута, по който даден пакет поема пътя от компютъра източник до хоста местоназначение. TCP/IP стековете включват помощна програма за проследяване на маршрута, която позволява да идентифицирате маршрутизаторите, през които преминава съобщението.
В следващият пример е използване командата traceroute за да бъде проследен маршрута на пакетите от източника до местоназначението:
sami@sami:~$ traceroute abv.bg traceroute to abv.bg (194.153.145.104), 30 hops max, 60 byte packets 1 172.16.50.1 (172.16.50.1) 3.660 ms 3.642 ms 3.634 ms 2 93.155.130.57 (93.155.130.57) 3.625 ms 3.616 ms 3.606 ms 3 212.70.158.89 (212.70.158.89) 10.177 ms * * 4 netinfo.bix.bg (193.169.198.168) 10.149 ms 10.150 ms 10.142 ms 5 abv.bg (194.153.145.104) 10.131 ms 10.124 ms 10.115 ms
Както можете да видите, проследяването показва IP адрес и името на препращащия компютър или маршрутизатор. На пакета са му били необходими четиринадесет скока, за да достигне до своето местоназначение, което е хостьт с име www.google.bg. Времената за отиване и връщане (в милисекунди) са показани за всеки скок.
командата nmap
Nmap (Network Mapper) е порт-скенер с отворен код създаден от Гордън Лайън. Използва се за откриване на хостове и активни услуги в компютърна мрежа.
Nmap изпраща специално изработени пакети до хостa и след това анализира отговорите. За разлика от други порт-скенери, Nmap проверява условията в мрежата (претоварване на мрежата и др.) преди сканирането. Благодарение на голямата общност от активни потребители, които предоставят информация и подобряват характеристиките му, Nmap е успял да разшири възможностите си за сканиране, като освен, че открива, дали един хост е активен или определен порт е отворен, той може да определи операционната система на хоста и нейната версия, наименованието и версиите на услугите, които са активни на хоста, типа на устройството, наличието на защитна стена и др.
sami@sami:~$ nmap 10.129.3.7 Starting Nmap 6.00 ( http://nmap.org ) at 2012-12-18 09:55 EET Nmap scan report for 10.129.3.7 Host is up (0.011s latency). Not shown: 987 closed ports PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 53/tcp open domain 80/tcp open http 139/tcp filtered netbios-ssn 445/tcp filtered microsoft-ds 1433/tcp open ms-sql-s 1947/tcp open sentinelsrm 2000/tcp open cisco-sccp 2002/tcp open globe 3389/tcp open ms-wbt-server 8080/tcp open http-proxy 8291/tcp open unknown Nmap done: 1 IP address (1 host up) scanned in 14.40 seconds
SSH – Отдалечен достъп
Основeн инструмент на системния администратор за достъп до отдалечен Линукс е SSH.
SSH, или Secure Shell, е протокол, използван за сигурен достъп в отдалечени системи. Това е най-разпространеният начин за достъп до отдалечен Linux и Unix подобни сървъри.
Инструментът на Linux за свързване към отдалечена система, използвайки SSH съвсем естествено също се нарича ssh и ползва следния синтаксис:
samyil@desktop:~$ ssh samyil@host2.itservice-bg.net -p 22 The authenticity of host 'host2.itservice-bg.net (93.155.130.11)' can't be established. ECDSA key fingerprint is SHA256:6/4c07gAUtmnTeM35ZqiNBYoZFkMKcC1UF+VPyYmBgI. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'host2.itservice-bg.net' (ECDSA) to the list of known hosts. samyil@host2.itservice-bg.net's password: Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 4.2.0-35-generic x86_64) * Documentation: https://help.ubuntu.com/ Last login: Thu Apr 28 08:38:46 2016 from 93.155.130.38 samyil@host2:~$ w 09:43:47 up 6 days, 8:17, 2 users, load average: 0,00, 0,04, 0,05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT samyil pts/1 93.155.130.38 08:38 27:04 0.07s 0.00s sshd: samyil samyil@host2:~$
Инструментът за Windows за свързване към отдалечена система, използвайки SSH се нарича putty, безплатен е за ползване и се стартира без да се инсталира.
Инсталиране и конфигуриране на програми
Debian подобните системи разполагат с “пакети” което е общо взето колекция от файлове за една програма пакетирани в един общ файл, с който се работи по-лесно. Във всеки пакет има специфични файлове, наречени инсталационни скриптове, които се четат от инсталатора и указват къде да се копират останалите файлове от пакета в системата.
Много от програмите ползват еднакви други програми и библиотеки. За това във Линукс повечето програми ползват споделени ресурси от библиотеки когато това е възможно. Така не се налага пакетите на програмите да носят всичко необходимо със себе си и да бъдат ненужно големи, както това става в други операционни системи. Когато един пакет се нуждае от друг пакет, това се нарича зависимост. Всеки пакет в Линукс знае от какво зависи, работата на инсталатора е да удовлетвори тези зависимости.
Хранилищата се намират на сървъри в Интернет в които има пакети и пакетния мениджър просто ги тегли и инсталира. Самия пакетен мениджър съхранява информация в себе си къде се намира и какво има в дадено хранилище.
опресняване на базата данни на хранилищата
sudo apt-get update
обновление на всички пакети
sudo apt-get upgrade
инсталиране на повече от един пакет
sudo apt-get install apache2 php5 libapache2-mod-php5 mysql-server mysql-client
инсталиране на един пакет и дейснталирането му
sudo apt-get install php5-xcache sudo apt-get --purge remove php5-xcache
поправка на пакетите
sudo apt-get install -f
автоматично почистване на системата от ненужни пакети
sudo apt-get autoclean sudo apt-get autoremove
Какво е сървър
Сървър е компютър, стартиращ сървърен софтуер и предоставящ една или повече услуги на други компютри в мрежата. Сървърните услуги обикновенно представляват база данни, WEB, SAMBA, MAIL, FTP, DNS, GAME, NTP, PROXY, DATABASES, PRINT сървър и др.
Сървърният софтуер се характеризира с това, че работи на базата на приложение, което слуша за заявки (request) и връща отговор (response), като и двете операции са по предварително зададен протокол. Тъй като заявката може да пристигне по всяко време, сървърният софтуер е постоянно стартиран, чакайки за заявка.
Сървърът е компютър, който работи съвместно с други компютри в компютърна мрежа. При комуникацията сървърът предоставя услуги към останалите компютри, наричани клиенти. Терминът „сървър“ е пряко свързван с модела за обслужване (наричан още мрежова архитектура) клиент-сървър, който представлява антипод на модела P2P (peer to peer, равен към равен).
DNS сървър – Bind
Системата за домейн имената (DNS, Domain Name System) представлява базовата технология, върху която е изграден интернет. Компонентите които изграждат DNS са IP адресите и домейн имената.
Домейн имената са названия на сайтовете в интернет и представляват една или няколко думи, отделени с точка от съответния домейн от високо ниво, например domain.com. Домейните са обвързани с IP адресите, тъй като всеки сайт е разположен върху някаква машина, която има съответен IP адрес.
През 1984 г., четирима студенти от Калифорнийски университет, Бъркли написват първата Unix имплементация, наречена Berkeley Internet Name Domain (BIND) сървър. Днес това е една от най-разпространените сървърни програми за изпълняване на DNS заявки.
Главен конфигурационен файл.
samyil@host:~$ sudo cat /etc/bind/named.conf.local }; zone "itservice-bg.net" { type master; allow-query { any; }; allow-transfer {93.155.130.11;}; file "/etc/bind/pri.itservice-bg.net"; };
Примерен конфигурационен файл на домейн.
samyil@host:~$ sudo cat /etc/bind/pri.itservice-bg.net $TTL 86400 @ IN SOA ns1.itservice-bg.net. support.itservice-bg.net. ( 2016042202 ; serial, todays date + todays serial # 28800 ; refresh, seconds 7200 ; retry, seconds 604800 ; expire, seconds 86400 ) ; minimum, seconds ; cloud 86400 A 93.155.130.11 data 86400 A 93.155.130.11 host 86400 A 93.155.130.14 host2 86400 A 93.155.130.11 itservice-bg.net. 86400 A 93.155.130.14 mail 86400 A 93.155.130.14 netmon 86400 A 93.155.130.11 ns1 86400 A 93.155.130.14 ns2 86400 A 93.155.130.11 smtp 86400 A 93.155.130.14 www 86400 A 93.155.130.14 itservice-bg.net. 86400 MX 10 mail.itservice-bg.net. itservice-bg.net. 86400 MX 20 host2.itservice-bg.net. itservice-bg.net. 86400 NS ns1.itservice-bg.net. itservice-bg.net. 86400 NS ns2.itservice-bg.net. itservice-bg.net. 86400 TXT "v=spf1 a mx ptr ip4:93.155.130.14 -all"
Проверка на домейна с кой IP адрес е асоцииран.
samyil@host:~$ ping mail.itservice-bg.net PING mail.itservice-bg.net (93.155.130.14) 56(84) bytes of data. 64 bytes from host.itservice-bg.net (93.155.130.14): icmp_seq=1 ttl=64 time=0.008 ms 64 bytes from host.itservice-bg.net (93.155.130.14): icmp_seq=2 ttl=64 time=0.010 ms ^C --- mail.itservice-bg.net ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 2998ms rtt min/avg/max/mdev = 0.008/0.009/0.010/0.002 ms
FTP сървър – Proftpd
File Transfer Protocol (Протокол за пренос на файлове, FTP) представлява мрежов протокол от тип клиент-сървър, предоставящ възможност за обмяна на файлове между машини, свързани в локална мрежа или в Интернет. Протоколът за пренос на файлове използва тип комуникация между клиент и сървър. Клиентът е специално разработена програма, чрез която се предоставя лесен начин за използване на възможностите за комуникация. Протоколът предоставя възможността за изпълняване на операции на сървъра като показване на съдържанието на директории, смяна на директорията, създаване на директории и триене на файлове.
ProFTPD (съкратено от Pro FTP демон) е FTP сървър. ProFTPD е софтуер за свободно ползване с отворен код, съвместим с Unix-подобни системи. Изключително богат на функции FTP сървър, излагайки голямо количество опции за конфигуриране от потребителя.
конфигурационен файл: /etc/proftpd/proftpd.conf
След като е инсталиран proftpd директно обслужва локалните потребители в системата, но може и да се конфигурира с виртуални такива свързвайки го с база данни.
Най често употребявания графичен клиент е Filezilla.
HTTP сървър – Apache
Web сървърът приема, обработва и отговаря на HTTP заявки. Тези заявки се подават от Web браузърите, които клиентските компютри използват за комуникиране, изпращане и получаване на информация по Интернет. Взаимоотношението между Web сървъра и Web клиента се нарича взаимоотношение клиент-сървър.
Apache Web Server е най-често използвания Web сървър в Интернет. Причината за неговата популярност е стабилността и поддръжката на множество езици като PHP, ASP, JSP, Perl, CGI, SSI и много други. Apache поддържа множество сайтове на един сървър. Това става чрез конфигуриране на виртуални хостове. В практиката често се използва термина “shared hosting” споделен хостинг.
Главният конфигурационен файл на Apache е /etc/apache2/apache2.conf.
Конфигурационен файл на домейна http://files.itservice-bg.net
sudo nano /etc/apache2/sites-available/files.itservice-bg.net.conf
В конфигурационните файлове се описват така наречените директиви, които сървъра използва за управлението си.
<VirtualHost *:80> ServerAdmin support@itservice-bg.net ServerName files.itservice-bg.net ServerAlias www.files.itservice-bg.net DocumentRoot /home/samyil/files ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> <Directory /home/samyil/files> Options Indexes FollowSymLinks </Directory>
.htaccess (hypertext access) е конфигурационен файл за Apache web сървъри, който има въздействие в рамките на директория и нейните поддиректории. Чрез този файл вие можете да направите промени в настройките на сървъра за вашия сайт, без да имате достъп до основния конфигурационен файл на сървъра.
order allow,deny allow from all deny from 93.155.130.38 deny from 93.155.169.0/24
Апачи има удобен сервизен скрипт който можем да стартираме, рестартираме и спираме сървъра.
samyil@host2:~$ sudo service apache2 Usage: apache2 {start|stop|graceful-stop|restart|reload|force-reload|start-htcacheclean|stop-htcacheclean}
Moдyлнaтa cиcтeмa нa Арасhе пoзвoлявa мoдyли дa бъдaт зapeждaни или cпиpaни в зaвиcимocт oт нyждитe нa администратора. Ядpoтo нa Арасhе ocтaвa непроменено и ce зapeждaт caмo дoпълнитeлни мoдyли, ĸoитo пpeдocтaвят paзлични фyнĸции. Същecтвyвa гoлямo paзнooбpaзиe oт нaличие мoдyли. Пpимep: mоd_рhр, пpи ĸoйтo ce вгpaждa РНР интepпpeтaтop в пpoцeca.
samyil@host2:~$ sudo apachectl -M Loaded Modules: core_module (static) so_module (static) watchdog_module (static) http_module (static) log_config_module (static) logio_module (static) version_module (static) unixd_module (static) access_compat_module (shared) actions_module (shared) alias_module (shared) auth_basic_module (shared) auth_digest_module (shared) authn_core_module (shared) authn_file_module (shared) authz_core_module (shared) authz_host_module (shared) authz_user_module (shared) autoindex_module (shared) cgi_module (shared) dav_module (shared) dav_fs_module (shared) deflate_module (shared) dir_module (shared) env_module (shared) fastcgi_module (shared) fcgid_module (shared) filter_module (shared) include_module (shared) mime_module (shared) mpm_prefork_module (shared) negotiation_module (shared) php5_module (shared) python_module (shared) rewrite_module (shared) setenvif_module (shared) socache_shmcb_module (shared) ssl_module (shared) status_module (shared) suexec_module (shared) suphp_module (shared)
В Apache е обърнато сериозно внимание на регистриране на събития в сървъра като основно те са два вида, грешки и посещения:
samyil@host2:~$ sudo tail -f /var/log/apache2/error.log [sudo] password for samyil: [Thu Apr 28 09:01:20.010044 2016] [suexec:notice] [pid 6513] AH01232: suEXEC mechanism enabled (wrapper: /usr/lib/apache2/suexec) [Thu Apr 28 09:01:20.018817 2016] [auth_digest:notice] [pid 6514] AH01757: generating secret for digest authentication ... [Thu Apr 28 09:01:20.019359 2016] [:notice] [pid 6517] FastCGI: process manager initialized (pid 6517) [Thu Apr 28 09:01:20.038341 2016] [:notice] [pid 6514] mod_python: Creating 8 session mutexes based on 150 max processes and 0 max threads.
samyil@host2:~$ sudo tail -f /var/log/apache2/access.log 157.55.39.84 - - [28/Apr/2016:10:37:27 +0300] "GET /baza/ic_power/sm_data/SG5842A_data.pdf HTTP/1.1" 200 482856 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" 93.155.130.4 - nagiosadmin [28/Apr/2016:10:37:38 +0300] "GET /nagios3/cgi-bin/status.cgi?host=all&limit=0 HTTP/1.1" 200 17521 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36" 93.155.130.4 - nagiosadmin [28/Apr/2016:10:38:08 +0300] "GET /nagios3/cgi-bin/status.cgi?host=all&limit=0 HTTP/1.1" 200 17524 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36"
Сървър за база данни – MySQL
MySQL е многопоточна, многопотребителска, SQL (Structured Query Language) система за управление на бази данни.
Достъпни са програмни интерфейси, позволяващи програми, написани на различни програмни езици да имат достъп до MySQL бази данни. Такива са: C, C++, C#, Java, Perl, PHP, Python, Ruby и други като всеки от тях има специфичен програмен интерфейс.
MySQL е най популярна за Интернет приложения писани на езика PHP така наречената база данни LAMP (Linux-Apache-MySQL-PHP)
MySQL може да се администрира в терминал с командите mysql и mysqladmin а също и с популярната алтернатива, написана на PHP phpMyAdmin през уеб браузер.
SMTP сървър – Postfix
SMTP (Simple Mail Transfer Protocol) е Интернет стандарт host-to-host имейл транспортен протокол и традиционно оперира с TCP порт 25. SMTP протокола се използва от повечето имейл системи, които изпращат поща. Писмата след това могат да се изтеглят с POP3 или IMAP от локален клиент или програма. Широко разпространение е получил в началото на 80-те години (1980). Преди това е бил използван (Unix to Unix Copy Program) протокола, който изисква от изпращача пълен маршрут до получателя или постоянно съединение между компютрите на изпращача и получателя. SMTP протоколът е създаден да бъде еднакво полезен на който и да е компютър и потребител.
Postfix е безплатен пощенски сървър с отворен код (MTA – mail transfer agent),осигурява електронната поща между сървърите препращайки я, написан е като алтернатива на Sendmail MTA.
Squirrelmail WEB mail
SquirrelMail е проект, който поддържа уеб-базиран мейл клиент и прокси сървър за протокола IMAP. SquirrelMail уеб-базирана поща е съвместима с мнозинството от сегашните браузъри. SquirrelMail използва плъгин архитектура с допълнителни функции към базовата си конфигурация.
Dovecot IMAP/POP3 сървър
Dovecot е IMAP и POP3 сървър с отворен код за Linux/UNIX подобни системи, написан предимно с идеята да повиши сигурността. Dovecot за първи път го обявен през юли 2002 г. разработчиците му основно имат за цел създаването на лек, бърз и лесен за настройване с отворен код MailServer. Dovecot може да се използва в търговска употреба без никакви лицензионни такси, има и комерсиална версия която се предлага като Dovecot Pro. По неофициални данни над 60% от IMAP сървърите в света се обслужват от Dovecot.
Dovecot работи със стандартни MBOX, Maildir формати. Той е напълно съвместим с всички IMAP/POP3 куриерски сървъри, както и пощенски клиенти с достъп до пощенските кутии директно. Dovecot поддържа всички съвремени схеми за удостоверяване за IMAP и POP3 протокола.
SASL удостоверяване
Simple Authentication Security Layer (SASL) е рамка за удостоверяване и сигурност на данните в интернет протоколи. Тя описва механизмите за удостоверяване от протоколи за приложения, на теория позволява всеки един механизъм за удостоверяване поддържан от SASL да се използва във всеки протокол приложение, което използва SASL. В пощенския сървър чрез SASL клиента се удостоверява чрез Transport Layer Security (TLS) който е част от SASL.
Amavisd – пощенски филтър
Amavis е програма играеща ролята на филтър за електронна поща, следяща трансфера в пощенския сървър. Amavis се използва за откриване на вируси, спам, забранени типове съдържание, синтактични грешки в мейл съобщенията, блокирва, маркирва или пренасочва съдържанието в писмото.
Spamassassin – антиспам
SpamAssassin е програма която се използва в пощенските сървъри за филтриране на спам. SpamAssassin използва различни техники за спам-откриване като външни програми, черни списъци и онлайн бази данни. Програмата може да се интегрира с пощенския сървър за автоматично филтриране на цялата поща за даден сайт. Тя може да се използва и от частни потребители в своята собствена пощенска кутия.
Clamav – пощенски антивирус
ClamAV AntiVirus е безплатен, с отворен код антивирусен софтуер с инструментариум който може да открие много видове зловреден софтуер. Една от основните му функции е в пощенския сървър като мейл скенер за вируси. Приложението е разработено за Unix/Linux но има версии и на трети страни и за Windows
Samba сървър – споделяне на файлове
Server Message Block(SMB) e протокол който се използва от Windows базирани компютри за организиране на достъп до файлове и принтери, така наречените споделени файлове (shared files) и споделени принтери (shared printers). С конфигурирането на Samba сървър под Линукс може да се организира достъп до дисковете и принтерите за Windows машини.
samyil@host2:~$ sudo nano /etc/samba/smb.conf [global] wins support = no dos charset = CP1251 workgroup = WORKGROUP server string = Samba Server %v netbios name = ubuntu security = user map to guest = bad user dns proxy = no domain master = no preferred master = no local master = no os level = 8 [Public] path = /mnt/hdd4/Public browsable =yes writable = no guest ok = yes read only = yes
Syslog – запис на събитията
Syslog представлява стандарт за предаване на логови съобщения по IP мрежа. Терминът се използва както за софтуерната библиотека и приложението, които изпращат съобщенията така и за самият протокол.
Протоколът syslog е клиент-сървър тип. Syslog клиентът изпраща малки текстови съобщения/пакети (по-малки от 1024 байта) към syslog сървъра. Той се нарича най-често “syslogd“, “syslog daemon” или “syslog server“. Пакетите могат да се изпращат по UDP и/или TCP. Често данните се предават в чист текст, но има възможност да се предават криптирани с помощта на програми.
В Линукс Syslog записва съобщенията си в различни файлове в зависимост от програмите в директорията /var/log/
samyil@host:~$ ls /var/log/ alternatives.log fontconfig.log ntpstats alternatives.log.1 fsck php5-fpm.log alternatives.log.2.gz installer php5-fpm.log.1 apache2 ispconfig php5-fpm.log.2.gz apt ispconfig_install.log php5-fpm.log.3.gz auth.log kern.log php5-fpm.log.4.gz auth.log.1 kern.log.1 php5-fpm.log.5.gz auth.log.2.gz kern.log.2.gz php5-fpm.log.6.gz auth.log.3.gz kern.log.3.gz php5-fpm.log.7.gz auth.log.4.gz kern.log.4.gz php5-fpm.log.8.gz boot.log lastlog pure-ftpd btmp mail.err rkhunter.log btmp.1 mail.err.1 rkhunter.log.1 clamav mail.err.2.gz rkhunter.log.2.gz dbconfig-common mail.err.3.gz rkhunter.log.3.gz dist-upgrade mail.log rkhunter.log.4.gz dmesg mail.log.1 rkhunter.log.old dmesg.0 mail.log.2.gz suphp dmesg.1.gz mail.log.3.gz syslog dmesg.2.gz mail.log.4.gz syslog.1 dmesg.3.gz memcached.log syslog.2.gz dmesg.4.gz mysql syslog.3.gz dpkg.log mysql.err syslog.4.gz dpkg.log.1 mysql.log syslog.5.gz dpkg.log.2.gz mysql.log.1.gz syslog.6.gz fail2ban.log mysql.log.2.gz syslog.7.gz fail2ban.log.1 mysql.log.3.gz udev fail2ban.log.2.gz mysql.log.4.gz upstart fail2ban.log.3.gz mysql.log.5.gz wtmp fail2ban.log.4.gz mysql.log.6.gz wtmp.1 faillog mysql.log.7.gz
Cron – автоматизиране на задачи
Cron Jobs е автоматизиран процес за стартиране на определени задачи и процеси. Чрез него можете да задавате време за изпълнение на даден процес, както и да настройвате период за повторение на изпълнението на процеса. Ако желаете да стартирате изпълнението на php, perl, python, bash скриптове в различен период от време.
# ┌───────────── min (0 - 59) # │ ┌────────────── hour (0 - 23) # │ │ ┌─────────────── day of month (1 - 31) # │ │ │ ┌──────────────── month (1 - 12) # │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0) # │ │ │ │ │ # │ │ │ │ │ # * * * * * command to execute # m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
Fail2ban – защита от атаки
Fail2ban е скрипт написан на езика Python с основна цел предотвратяване на прониквания в сървъра, Brute Force речникова атака или DoS отказ на услуга.
Fail2ban работи чрез наблюдение на лог файлове (например /var/log/auth.log, /var/log/apache/access.log и т.н.), за избрани записи и се изпълняват скриптове, базирани на тях. Най-често това се използва за блокиране на избраните IP адреси, които могат да принадлежат на хората които се опитват да нарушат сигурността на системата. Той може да забрани всякакъв IP адрес, който прави твърде много опити за влизане или извършва друго нежелано действие в срок, определен от администратора. Fail2ban обикновено блокира IP адрес в рамките на определен период от време така, че след това блокирването отпада. Скрипта използва iptables защитната стена която е по подразбиране в Линукс.