МІНІСТЕРСТВО ОСВІТИ І НАУКИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра ЗІ
З В І Т
до лабораторної роботи №7, 8
з курсу «Безпека інформації в інформаційно-комунікаційних системах»
на тему:
«Автоматизація процесу адміністрування за допомогою скриптів.»
Мета роботи: Отримати базові знання, необхідні для написання скриптів. Навчитися працювати з технічною літературою.
Короткі теоретичні відомості:
Кожен системний адміністратор Linux рано чи пізно стикається з таким поняттям, як «скрипт», будь то один із завантажувальних скриптів чи написаний розробником ПЗ скрипт конфігурування. В даній роботі ви зрозумієте, що написання скриптів на shell не являється чимось надзвичайно складним і повністю під силу навіть новачку в світі Linux.
Почнемо з того, що розберемо, що ж ховається за англійськими термінами shell та script. Shell, або оболонка, як цей термін іноді перекладають - це командний інтерпретатор, інтерфейс між користувачем і операційною системою, її ядром. Але, крім цього, це ще й потужна мова програмування та написання сценаріїв. Вона містить свої службові слова та керуючі конструкції і дозволяє писати на ній програми. Така програма на мові сценаріїв, звана скриптом, може поєднувати в собі системні виклики і команди операційної системи, а також зовнішні утиліти, створюючи потужний інструмент для системного адміністрування.
Отже, перш за все, нам необхідно розібратися в структурі скрипта. Вона не являє собою нічого складного. За великим рахунком, найпростіший скрипт – просто перерахування системних команд. Наприклад:
echo This is just example
whoami
uname –a
Ці команди об’єднані в одному файлі. Але shell повинен знати, що він повинен цей файл обробити, а не просто прочитати його вміст. Для цього є спеціальна конструкція: #!
Ця конструкція називається «Sha-Bang». Взагалі-то, # задає коментар, але в даному випадку Sha-Bang означає, що після неї піде шлях до обробника скрипта. Наприклад:
#!/bin/bash
#!/bin/sh
#!/usr/bin/perl
Хід роботи:
Створити скрипт, який здійснює вивід меню, яке складається з наступних пунктів:
поточний користувач,
об’єм пам’яті, яка використовується,
об’єм дискового простору,
запущені процеси,
процеси, які запущені поточним користувачем,
системні дата і час,
час запуску системи
вихід,
Вивід відповідної інформації в залежності від вибраного пункту меню. Процес повторювати до тих пір, поки не буде вибраний пункт меню «вихід».
Результат:
[cra@cra ~]$ sh lab7.shДії:1.Вивести поточного користувача2.Обєм RAM3.Статус HDD4.Запущені процеси5.Процеси поточного користувача6.Дата та час7.Час запуску ситеми8.Завершення роботиВиберіть дію1craВиберіть дію2 total used free shared buffers cachedMem: 1030684 967152 63532 0 23704 443164-/+ buffers/cache: 500284 530400Swap: 2064376 8768 2055608Виберіть дію3Файловая система 1K-блоков Исп Доступно Исп% смонтирована на/dev/mapper/vg_cra-lv_root 5716804 4265728 1160672 79% /tmpfs 515340 616 514724 1% /dev/shm/dev/sda1 495844 32002 438242 7% /bootdf: «/root/.gvfs»: Отказано в доступе/dev/sr0 3080782 3080782 0 100% /media/RHEL_6.4 i386 Disc 1Виберіть дію4USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 8421 0.0 0.0 4288 932 pts/0 T 11:52 0:00 man psroot 8440 0.0 0.1 5064 1064 pts/0 T 11:52 0:00 sh -c /usr/bin/root 8442 0.0 0.0 4488 808 pts/0 T 11:52 0:00 /usr/bin/less -cra 8706 0.0 0.1 5068 1168 pts/2 T 12:04 0:00 sh lab7.shcra 8722 0.0 0.1 5068 1160 pts/2 T 12:05 0:00 sh lab7.shcra 8725 0.0 0.1 5068 1156 pts/2 T 12:05 0:00 sh lab7.shcra 8729 0.0 0.1 5068 1160 pts/2 T 12:06 0:00 sh lab7.shcra 8735 0.0 0.1 5068 1156 pts/2 T 12:07 0:00 sh lab7.shcra 8745 4.2 0.1 5068 1252 pts/2 S+ 12:08 0:00 sh lab7.shcra 8749 4.0 0.1 4932 1044 pts/2 R+ 12:08 0:00 ps -a uВиберіть дію5Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDcra 8691 0.0 0.1 5288 1752 pts/2 Ss 12:04 0:00 bashcra 8706 0.0 0.1 5068 1168 pts/2 T 12:04 0:00 sh lab7.shcra 8722 0.0 0.1 5068 1160 pts/2 T 12:05 0:00 sh lab7.shcra 8725 0.0 0.1 5068 1156 pts/2 T 12:05 0:00 sh lab7.shcra 8729 0.0 0.1 5068 1160 pts/2 T 12:06 0:00 sh lab7.shcra 8735 0.0 0.1 5068 1156 pts/2 T 12:07 0:00 sh lab7.shcra 8745 3.4 0.1 5068 1252 pts/2 S+ 12:08 0:00 sh lab7.shcra 8750 2.0 0.1 4932 1060 pts/2 R+ 12:08 0:00 ps -uВиберіть дію6Пнд Дек 7 12:08:10 EET 2015Виберіть дію7 12:08:11 up 12:08, 5 users, load average: 0.05, 0.24, 0.35Виберіть дію9Хибний пункт менюВиберіть дію8[cra@cra ~]$
Висновок: на даній лабораторній роботі я познайомився з оболонкою bash та отримав базові знання, необхідні для написання скриптів.
Лабораторна робота №8
Мета роботи: Закріпити отримані навики і знання в попередній лабораторній роботі. Навчитись працювати з технічною літературою..
Короткі теоретичні відомості:
1) Необхідно, щоб наш скрипт працював з командною стрічкою. Аргументи командної стрічки задаються після імені скрипта через пробіл: somescript arg1 arg2 arg3. Скрипт сприймає аргументи за їх порядковими номерами, тому ми будемо використовувати конструкції виду $номер_аргументу, тобто $1, $2, $3.
2) Для перевірки існування директорії застосовується наступна конструкція:
if [ ! -e $ARCHIVE_DIR ];then echo "\"$ARCHIVEDIR\" не существует"fi
3) Для стискання застосовуються наступні команди: tar скріплює окремі файли в єдиний архівний файл, а для стискання цього файлу використовують команду gzip.
4) cron - демон-планувальник задач в UNIX-подібних операційних системах, який використовується для періодичного виконання завдань за заданий час.
Основний файл конфигурації cron, /etc/crontab, виглядає приблизно так:
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
Кожний користувач системи має свій файл завдань crontab, в якому описано, в який час і які програми запускати від імені цього користувача. Для редагування файлу crontab використовується спеціальна однойменна програма crontab, яка дозволяє не переривати процес cron на час редагування.
Для редагування файлу crontab вашого користувача застосовується команда:
crontab –e
Хід роботи:
Створити скрипт, який здійснює вивід меню, яке складається з наступних пунктів:
Передати в скрипт ім’я папки для архівації, ім’я папки призначення та ім’я архіву,
Перевірити правильність кількості переданих параметрів,
Визначити існування папки для архівації. У випадку її відсутності вивести відповідне повідомлення.
Визначити існування папки призначення. У випадку її відсутності її необхідно створити і вивести відповідне повідомлення.
Заархівувати всі файли із папки для архівації.
Перемістити файл в папку призначення, додавши до імені файлу поточні час і дату.
Скрипт:
#!/bin/bashdt=$(date +%d.%y.%m_%H-%M-%S)if [ -a $4 ] then if [ -a $3 ] then echo "Замало аргументів"echo "Перезапустіть скрипт в форматі script [archfolder] [destination] [archname] " exit 0 fi else echo "Забагато аргументів"echo "Перезапустіть скрипт в форматі script [archfolder] [destination] [archname] " exit 0fiif [ -d $1 ] then echo else echo "Папка для архівації не існує"echo "Перезапустіть скрипт в форматі script [archfolder] [destination] [archname] " exit 0 fi if [ -d $2 ] then echo else echo "Папка призначння не існує" mkdir $2 echo "Папка призначення створена" fi tar -cvf $3_"$dt".tar $1 mv ./$3_"$dt".tar $2 echo "Файл переміщено"exit 0
Останнім етапом буде автоматизація виклику даного скрипту. Зробіть, щоб даний архів створювався кожні 5 хв. (для перевірки працездатності).
Висновок: на даній лабораторній роботі я познайомився з оболонкою bash та отримав базові
знання, необхідні для написання скриптів.а також навичвся проводити резервне копіювання даних.