МІНІСТЕРСТВО ОСВІТИ І НАУКИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра ЗІ
З В І Т
до лабораторної роботи №4
з курсу «Безпека інформації в інформаційно-комунікаційних системах»
на тему:
«Автоматизація процесу адміністрування за допомогою скриптів.»
Мета роботи: Отримати базові знання, необхідні для написання скриптів. Навчитися працювати з технічною літературою.
Короткі теоретичні відомості:
Кожен системний адміністратор 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.Обєм RAM
3.Статус HDD
4.Запущені процеси
5.Процеси поточного користувача
6.Дата та час
7.Час запуску ситеми
8.Завершення роботи
Виберіть дію
1
cra
Виберіть дію
2
total used free shared buffers cached
Mem: 1030684 967152 63532 0 23704 443164
-/+ buffers/cache: 500284 530400
Swap: 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% /boot
df: «/root/.gvfs»: Отказано в доступе
/dev/sr0 3080782 3080782 0 100% /media/RHEL_6.4 i386 Disc 1
Виберіть дію
4
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 8421 0.0 0.0 4288 932 pts/0 T 11:52 0:00 man ps
root 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.sh
cra 8722 0.0 0.1 5068 1160 pts/2 T 12:05 0:00 sh lab7.sh
cra 8725 0.0 0.1 5068 1156 pts/2 T 12:05 0:00 sh lab7.sh
cra 8729 0.0 0.1 5068 1160 pts/2 T 12:06 0:00 sh lab7.sh
cra 8735 0.0 0.1 5068 1156 pts/2 T 12:07 0:00 sh lab7.sh
cra 8745 4.2 0.1 5068 1252 pts/2 S+ 12:08 0:00 sh lab7.sh
cra 8749 4.0 0.1 4932 1044 pts/2 R+ 12:08 0:00 ps -a u
Виберіть дію
5
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
cra 8691 0.0 0.1 5288 1752 pts/2 Ss 12:04 0:00 bash
cra 8706 0.0 0.1 5068 1168 pts/2 T 12:04 0:00 sh lab7.sh
cra 8722 0.0 0.1 5068 1160 pts/2 T 12:05 0:00 sh lab7.sh
cra 8725 0.0 0.1 5068 1156 pts/2 T 12:05 0:00 sh lab7.sh
cra 8729 0.0 0.1 5068 1160 pts/2 T 12:06 0:00 sh lab7.sh
cra 8735 0.0 0.1 5068 1156 pts/2 T 12:07 0:00 sh lab7.sh
cra 8745 3.4 0.1 5068 1252 pts/2 S+ 12:08 0:00 sh lab7.sh
cra 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/bash
dt=$(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 0
fi
if [ -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 та отримав базові
знання, необхідні для написання скриптів.а також навичвся проводити резервне копіювання даних.