Скрипт для тих, кому ліньки розбиратися в Linux

Сфер застосування Linux може бути дуже багато. Особливо, коли орендувати VPS стало можна від $1 на місяць. Крім стандартного використання під хостинг сайтів, його використовують в якості сервера для ігор (CS:GO, Terraria, Minecraft), в якості Проксі-сервера і сервера VPN. Під майнінг криптовалют. Під резервне сховище бекапів. Під домашню торренто-гойдалку. А також для тестування, розробки і просто різних експериментів. Саме доступність VPS на базі Linux з величезним спектром можливого його застосування призвела до популяризації Linux. Але охочих використовувати Linux значно більше, ніж людей, які вміють його використовувати. І часто саме слабкі пізнання адміністрування Linux зупиняють людей від його використання. Ну або просто ускладнюють таким людям життя — їм доводиться годинами колупатися в мануалах, форумах і «статтях для новачків».

Та мені й самому набридло лазити по спеціалізованих форумах, кожен раз, коли доводиться зробити крок вліво, крок вправо відносно того, що я вже навчився робити. Саме тому, з часом, всі типові речі я звів в один скрипт з дружнім інтерфейсом, який вміє робити все сам. Починалось все з малого. Скрипт просто автоматизував установку потрібного мені софту. Але за півроку він перетворився вже в досить серйозну утиліту вагою 85 Кб, в якій понад 2100 рядків коду. Скрипт раніше ніде не викладався. Використовувався тільки в особистих цілях мною й кількома моїми товаришами. Настав час їм поділитися з публікою. Впевнений, багатьом людям він здатний заощадити купу часу.

Щоб зрозуміти, що він вміє, найпростіше глянути на заголовний скріншот:


Далі докладніше опишу, що і як він робить.

Інформація про систему
Цей розділ в доброзичливій формі виводить інформацію про це сервері. Що за залізо, яка ОС, який IP-адресу. Причому, IP адреса спочатку він намагається визначити по інтерфейсу, але т. до. бувають VPS без виділеного IP-адрес (NAT), далі скрипт лізе в інтернет і з допомогою сторонніх сайтів дивиться з якого IP прийшли запити і показує реальний зовнішній IP-адреса (на це витрачається пара секунд). Виглядає це інформаційне вікно так:


Робота з ОС
У цьому розділі зібрано кілька як дрібних утиліт, типу зміни пароля root, встановлення часового поясу, оновлення ОС, додавання репозиторію, установка популярних додатків (типу midinght commander), так і декілька більш серйозних, на яких зупинюся детальніше:

  • Антивірус. Так, на Лінуксі не буває вірусів. Але бувають бекдори, які через сайт відкривають доступ до всіх ваших файлів зловмисникам. Через ці ж бекдори спамери потім можуть робити спам-розсилки використовуючи ваш сервер. У мене в свій час за це забанили VPS. Тому, я передбачив установку антивіруса. Розбиратися в ньому не потрібно. Сам ставить все, оновлює. Далі, не розбираючись в синтаксисі антивіруса, через скрипт можна перевірити весь диск або конкретну папку (наприклад, де хостятся сайти).

  • Firewall. Не всі вміють налаштовувати правила Firewall (iptables). А в деяких орендованих VPS він преднастроен і включений, причому так, що встановлюються вами сервіси не будуть доступні. І вам доведеться копатися в настройках і відкривати порти. А неправильна і необдумана налаштування firewall може взагалі призвести до того, що ви після цього в принципі не зможете підключитися по SSH до свого сервера і вам доведеться або встановлювати заново ОС, або як-то лізти на сервер через web-термінал, але ця функція є не у всіх хостерів. У разі використання мого скрипта такі проблеми виключені, а налаштування Firewall відбувається через «Помічник», де потрібно просто відповісти на прості запитання.

  • Планувальник завдань (cron). Буває, що треба періодично виконувати якісь типові дії: перевірка на віруси, очищення логів, викладання бекапів і т. д. Багато хто знає, що в Linux є планувальник, який може виконувати завдання за розкладом, але не всі вміють ним користуватися. Мій скрипт дозволяє встановити, включити, вимкнути планувальник і додати в нього завдання, вибравши інтервал запуску.
Установка панелі управління хостингом
Дуже часто Linux використовується саме для хостингу, але руками налаштовувати там всі сервіси типу: Apache, Nginx, PHP, MySQL, поштовий демон і так далі — зовсім непросто для новачків. Більшість віддає перевагу встановити яку-небудь панель управління. Але навіть її треба спочатку якось встановити. У своєму скрипті я зібрав п'ять безкоштовних панелей управління сайтом (Vesta CP, Webuzo, CWP, ZPanel, Ajenti) і платну ISPmanager (яка є, мабуть, найпоширенішою панеллю в Росії). Про кожну панель є невеликий опис, системні вимоги. Вибираємо потрібну панель, скрипт сам її завантажить з офіційного сайту (свіжу версію) і встановить.

Робота з VPN
Останнім часом багато заводять собі VPN для того, щоб отримати переваги користувачів інших географічних зон. Наприклад, обхід заборон РосКомНадзора, використання якихось внутрішніх американських або європейських сервісів і так далі. Багато для цього купують готові VPN-сервіси. Але значно дешевше купити собі VPS в потрібній країні та підняти свій власний VPN. Ось тільки не всі вміють його налаштовувати. За допомогою цього скрипта вам потрібно просто відповідати на питання і все. Весь потрібний софт встановиться сам, firewall пропишуться потрібні правила. Ви зможете переглядати, додавати та видаляти користувачів, яким дозволений доступ. Причому скрипт проаналізує яка у вас ОС і зробить все, враховуючи особливості конкретно цієї ОС.

Робота з Proxy
Деяким звичніше використовувати проксі замість VPN. Ну і це частенько дешевше, тому що Проксі, на відміну від VPN, можна використовувати на серверах, у яких немає свого виділеної IP-адреси (які знаходяться за NAT), а такі сервера коштують у кілька разів дешевше (їх можна придбати за $2 в рік). Піднімати свій проксі-сервер на Лінукс — теж не найлегша завдання для новачків. Але цей скрипт все зробить за вас. Причому там дуже багато налаштувань. «Помічник» при встановленні запитає на якому порту нам потрібен Проксі (або ж запропонує стандартний), запитає потрібна авторизація по логіну/паролю (або пускати всіх, хто знає адресу і порт). Скрипт навіть врахує потреби тих користувачів, хто любить заганяти прихильник трафік Проксі (через програми типу Proxifier) і налаштує конфіг потрібним чином. Ну і, природно, сам внесе всі потрібні правила Firewall (iptables). Налаштування проксі ще ніколи не була такою простою. Руками в конфіг лазити взагалі не потрібно.

Робота з файлами і програмами
У цьому розділі можна встановити потрібну програму (пакет) або видалити. Причому саме корисне там — це саме правильне видалення. Справа в тому, що при встановленні будь-якої програми дуже часто до неї встановлюється декілька супутніх пакетів, необхідних для її роботи. І найчастіше, розмір цих додаткових пакетів перевищує розмір власне тієї програми, яку ви встановлювали. Але ось при видаленні вашої програми піде тільки сама програма, а всі пакети, які були потрібні для її (і лише її) роботи — залишаться і надалі займати місце. В моєму скрипті я передбачив повне видалення програми — з усім додатковим софтом, який ставився разом з нею. В скрипті просто вказуємо назву програми, далі скрипт все зробить сам.

Очищення системи
У випадку активного використання сервера хостинг, часто накопичується величезна кількість логів доступу до сайтів. Обсяг усього цього сміття іноді може досягати гігабайт. Не всі знають де і як це видаляти. У цьому розділі можна почистити ці логи. Видаляються логи Apache і Nginx, як цілком, так і конкретного користувача. Крім цього, з цього розділу можна видалити старі настановні пакети, які за замовчуванням залишаються на диску після установки софта і продовжують займати місце.



На цьому, власне, поки що все. У планах, звичайно, багато що ще хочеться додати. Наприклад, бенчмарк, для оцінки продуктивності різних компонентів сервера. Розширити підтримку інших ОС і так далі. По мірі сил і часу, я власне цим і займаюся. Але, вже зараз, він виконує досить багато функцій, затребуваних новачками і здатний сильно спростити їм життя.

Тепер, власне, дуже важливе питання. А на яких дистрибутивах Linux все це працює? На всіх версіях CentOS. А також, на всіх інших, похідних від Red Hat Enterprise Linux дистрибутиви (наприклад, Scientific Linux). Чому саме RHEL? Ну скрипт я писав для себе, а мені CentOS ближче. Ну і якщо говорити про цільової аудиторії даного скрипта (новачки), то їм, як правило, без різниці на якому дистрибутиві працювати. Адже зазвичай вони однаково погано знають будь-який з них. А RHEL вельми непоганий, стабільний, невимогливий до ресурсів, ну і, найголовніше, є майже у кожного хостера VPS. Версію CentOS при цьому можна вибрати будь-яку (5, 6, 7), як і розрядність. Для всіх дій скрипт аналізує яка версія дистрибутива і враховує специфіку саме цієї версії. Я зазвичай вибираю дистрибутив CentOS 6.x (можна Minimal) з розрядністю 64 біта.

Ну і найголовніше. Як власне обзавестися цим скриптом? Нижче додаю повний лістинг коду скрипта з усіма потрохами і докладними коментарями (для тих, хто хоче щось своє дописати):

Вихідний код скрипта
#!/bin/bash
ver="v1.8.1"
title="Breeze Easy Shell"
title_full="$title $ver"
#-----------------
#типові функції
#-----------------

#функція, яка запитує один символ
myread()
{
temp=""
while [ -z "$temp" ] #захист від порожніх значень
do
read -n 1 temp
done
eval $1=$temp
echo
}

#функція, яка запитує тільки так чи ні. А ще можна спробувати використовувати як while [ -z ${!$1} ]
myread_yn()
{
temp=""
while [[ "$temp" != "y" && "$temp" != "Y" && "$temp" != "n" && "$temp" != "N" ]] #запитуємо значення, поки не буде "y" або "n"
do
echo -n "y/n: "
read -n 1 temp
echo
done
eval $1=$temp
}

#функція, яка запитує тільки цифру
myread_dig()
{
temp=""
counter=0
while [[ "$temp" != "0" && "$temp" != "1" && "$temp" != "2" && "$temp" != "3" && "$temp" != "4" && "$temp" != "5" && "$temp" != "6" && "$temp" != "7" && "$temp" != "8" && "$temp" != "9" ]] #запитуємо значення, поки не буде цифра
do
if [ $counter -ne 0 ]; then echo -n "Неправильний вибір. Ведіть цифру: "; fi
let "counter=$counter+1"
read -n 1 temp
echo
done
eval $1=$temp
}

#функція установки з перевіркою не встановлено пакет
myinstall()
{
if [ -z `rpm -qa $1` ]; then
yum -y install $1
else
echo "Пакет $1 вже встановлено"
br
fi
}

title()
{
clear
echo "$title"
}

menu()
{
clear
echo "$menu"
echo ", Виберіть пункт меню:"
}

wait()
{
echo "Натисніть будь-яку клавішу, щоб продовжити..."
read -s -n 1
}

br()
{
echo ""
}

updatescript()
{
wget $updpath/$filename -r -N -nd
chmod 777 $filename
}

undone()
{
echo "Дана функція в стадії розробки або відключена." #функція ставиться в нереалізовані пункти№№№№№№№№№№ меню як заглушки
}

settimezone()
{
/bin/cp /usr/share/zoneinfo/$1/$2 /etc/localtime
echo "Новий часовий пояс встановлений. Поточний час: $(date +%H:%M)."
wait
}

repo4()
{
echo "Будуть додані репозиторії для CentOS 4 x64"
wait
echo "Встановлюємо репозиторії..."
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el4.rf.x86_64.rpm
rpm -K rpmforge-release-0.5.3-1.el4.rf.x86_64.rpm
rpm -i rpmforge-release-0.5.3-1.el4.rf.x86_64.rpm
}

repo5()
{
echo "Будуть додані репозиторії EPEL, REMI, RPMForge і ELRepo для CentOS 5 x64"
wait
echo "Встановлюємо репозиторії..."
rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL
rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-5.rpm
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.3-1.el5.rf.x86_64.rpm
rpm -K rpmforge-release-0.5.3-1.el5.rf.*.rpm
rpm -i rpmforge-release-0.5.3-1.el5.rf.*.rpm
rpm -Uvh http://www.elrepo.org/elrepo-release-5-5.el5.elrepo.noarch.rpm
br
echo "Репозиторії були додані."
wait
}

repo6()
{
echo "Будуть додані репозиторії EPEL, REMI, RPMForge і ELRepo для CentOS 6 x64"
wait
echo "Встановлюємо репозиторії..."
rpm --import https://fedoraproject.org/static/0608B895.txt
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
br
echo "Репозиторії були додані."
wait
}

repo7()
{
echo "Будуть додані репозиторії EPEL, REMI, RPMForge, ELRepo, atrpms для CentOS 7 x64"
wait
echo "Встановлюємо репозиторії..."
rpm --import https://fedoraproject.org/static/0608B895.txt
rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
rpm --import http://packages.atrpms.net/RPM-GPG-KEY.atrpms
rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
rpm -ivh http://atrpms.net/ht/httptunnel-4.0.0-3_pre1.el7.centos.x86_64.rpm
br
echo "Репозиторії були додані."
wait
}

iptables_save()
{
#перевірка CentOS 7
if [ $osver1 -eq 7 ]; then 
myinstall iptables-services | tee > null
fi
service iptables save
}

openport()
{
chain=$(echo $1 | tr [:lower:] [:upper:])
if [ "$chain" == "IN" ]; then chain="INPUT"; t1="dport"
else
if [ "$chain" == "OUT" ]; then chain="OUTPUT"; t1="sport"
else
echo "неправильно вказано напрямок правила для відкриття порту"
wait
fi
fi
iptables -I $chain -p $2 --$t1 $3 -j ACCEPT #можливо в майбутньому предусмотрю вибір ключа -I або -A
iptables_save
}

webuzo_install()
{
openport in tcp 2004
openport in tcp 2002
wget http://files.webuzo.com/install.sh -r -N -nd
sh install.sh
rm -f install.sh
}

cwp_install()
{
openport in tcp 2030
openport in tcp 2031
wget http://centos-webpanel.com/cwp-latest
sh cwp-latest
rm -f cwp-latest
}

zpanel_install()
{
wget http://evtikhov.ru/zpanel.sh
sh zpanel.sh
rm -f zpanel.sh
}

ajenti_install()
{
openport in tcp 8000
rpm -i http://repo.ajenti.org/ajenti-repo-1.0-1.noarch.rpm 
echo "Встановлюємо Ajenti"
yum -y install ajenti
echo "Встановлюємо Ajenti V"
yum -y install ajenti-v ajenti-v-nginx ajenti-v-mysql ajenti-v-php-fpm php-mysql
echo "Відключаємо SSL для адмінки"
sed -i -e 's/"enable": true/"enable": false/' /etc/ajenti/config.json
whatismyipext
echo "Виставляємо наш зовнішній IP в конфіг"
sed -i -e "s/\"host\": \"0.0.0.0\"/\"host\": \"$ipext\"/". /etc/ajenti/config.json
echo "Встановлюємо російську мову за замовчуванням"
sed -i -e 's/ "bind": {/ "language": "ru_RU",\n "bind": {/' /etc/ajenti/config.json
echo "Перезапускаємо Ajenti"
service ajenti restart
br
echo "Панель управління Ajenti і Ajenti V були встановлені. Тепер можете керувати сервером з браузера."
echo "Адреса: http://$ipext:8000"
echo "Логін: root"
echo "Пароль: admin"
br
wait
}

mtu_change()
{
ifconfig $1 mtu $2
wait
}
#Функція перевірки встановленого додатка, exist повертає true якщо встановлена і false, якщо немає.
installed()
{
exist=`whereis $1 | awk {'print $2'}` #варіант швидкий, але не завжди ефективний
if [ -z $exist ]
then #будемо використовувати обидва варіанти
exist=`rpm -qa $1` #варіант повільніше, але ефективніше
fi

if [ -n "$exist" ]
then
exist=true
else
exist=false
fi
}

#функція яка відкриває на редагування файл в пріоритеті: mc, nano, vi
edit()
{
installed mc
if [ $exist == true ]; then mcedit $1
else
installed nano
if [ $exist == true ]; then nano $1
else
vi $1
fi
fi
}

#функція видалення.
uninstall()
{
if [ $osver1 -eq 5 ]; then yum erase $1 $2 $3 $4 $5;
else
myinstall yum-remove-with-leaves | tee > null
yum --remove-leaves remove $1 $2 $3 $4 $5
fi
}

#Визначаємо активний зовнішній інтерфейс
whatismyiface()
{
if [ $osver1 -eq 7 ]; then
installed ifconfig
if [ $exist == false ]; then yum -y install net-tools | tee > null; fi
fi
if [ -n "$(ifconfig | grep eth0)" ]; then iface="eth0"
else
if [ -n "$(ifconfig | grep venet0:0)" ]; then iface=venet0:0; fi
fi
}

#визначаємо ip на зовнішньому інтерфейсі
whatismyip()
{
whatismyiface
case "$osver1" in
4/5/6)
ip=`ifconfig $iface | grep 'inet addr' | awk {'print $2'} | sed s/.*://`
;;
7)
installed ifconfig
if [ $exist == false ]; then yum -y install net-tools | tee > null; fi
ip=`ifconfig $iface | grep 'inet' | sed q | awk {'print $2'}`
;;
*)
echo "Версія ОС невідома. Виходимо."
wait
;;
esac
}

#визначаємо зовнішній IP через запит
whatismyipext()
{
installed wget
if [ $exist == false ]; then myinstall wget; fi
ipext=`wget --no-check-certificate -qO - https://2ip.ru/index.php | grep "Ваш IP адреса:" | sed s/.*button\"\>// | sed s_"<"_" "_ | awk {'print $1'}`
}

whatismyip_full()
{
whatismyip
echo "Ваш зовнішній IP: $ip?"
myread_yn ans
case "$ans" in
y|Y)
#нічого не робимо, виходимо з case
;;
n|N|т|Т)
echo "Якщо неправильно визначено IP, ви можете зробити налаштування в ручному режимі."
echo "Для цього Вам потрібно визначити як називається Ваш мережевий інтерфейс, через який Ви виходите в інтернет."
echo "Якщо хочете вивести на екран всі мережеві інтерфейси, щоб визначити який з них зовнішній - натисніть 1."
myread ans
if [ "$ans" == "1" ]; then ifconfig; br; wait; fi
br
echo "Вкажіть назву інтерфейсу, який має зовнішній IP (зазвичай eth0, venet0 або venet0:0)"
read int
ip=`ifconfig $int | grep 'inet addr' | awk {'print $2'} | sed s/.*://`
#centOS7
if [ $osver1 -eq 7 ]; then ip=`ifconfig $int | grep 'inet' | sed q | awk {'print $2'}`; fi
echo "Ваш зовнішній IP: $ip?"
myread_yn ans
case "$ans" in
y|Y)
;;
n|N|т|Т)
echo "Тоді введіть IP вручну:"
read ip
;;
*)
echo "Неправильний відповідь. Виходимо."
wait
sh $0
exit 0
;;
esac
;;
*)
echo "Неправильний відповідь. Виходимо."
wait
sh $0
exit 0
;;
esac
}

showinfo()
{
echo '┌──────────────────────┐'
echo '│ Інформація про систему │'
echo '└──────────────────────┘'
echo "CPU: $cpu_cores x $cpu_clock MHz ($cpu_model)"
if [ $swap_mb -eq 0 ]; then echo "RAM: $mem_mb Mb"; else
echo "RAM: $mem_mb Mb (Плюс swap $swap_mb Mb)"; fi
#Визначаємо диск (робимо це при кожному висновку, т. к. дані змінюються)
hdd_total=`df | awk '(NR == 2)' | awk '{print $2}"
let "hdd_total_mb=$hdd_total / 1024"
hdd_free=`df | awk '(NR == 2)' | awk '{print $4}"
let "hdd_free_mb=$hdd_free / 1024"
echo "HDD: $hdd_total_mb Mb (вільно $hdd_free_mb Mb)"
echo "ОС: $osfamily $osver2"
echo "Розрядність ОС: $arc bit"
echo "Версія ядра Linux: $kern"
echo "Ваш IP на інтерфейсі $iface: $ip"
echo "Ваш зовнішній IP визначається як: $ipext"
}

about()
{
echo "Дану утиліту написав Павло Евтихов (aka Brizovsky).
р. Єкатеринбург, Росія.
2016 рік.
"
}
changelog()
{
wget $updpath/changelog.txt -r -N -nd
cat changelog.txt
br
}

log()
{
changelog
}

#-----------------
#задаємо змінні
#-----------------
#Визначаємо змінну з потрібною кількістю пробілів, щоб меню не разъезжалось від зміни версії
title_full_len=${#title_full}
title_len=${#title}
space=""
let "space_len=43-$title_full_len" 
while [ "${#space}" -le $space_len ]
do
space=$space" "
done

space2=""
let "space2_len=30-$title_len" 
while [ "${#space2}" -le $space2_len ]
do
space2=$space2" "
done

filename='breeze.sh'
updpath='http://evtikhov.ru/'

#визначаємо скільки RAM
mem_total=`cat /proc/meminfo | grep MemTotal | awk '{print $2}"
swap_total=`cat /proc/meminfo | grep SwapTotal | awk '{print $2}"
let "mem_mb=$mem_total / 1024"
let "swap_mb=$swap_total / 1024"

#Визначаємо дані процесора
cpu_clock=`cat /proc/cpuinfo | grep "cpu MHz" | awk {'print $4'} | sed q`
let "cpu_clock=$(printf %.0f $cpu_clock)"
#cpu_cores=`cat /proc/cpuinfo | grep "cpu cores" | awk {'print $4'}`
cpu_cores=`grep -o "processor" <<< "$(cat /proc/cpuinfo)" | wc -l`
cpu_model=`cat /proc/cpuinfo | grep "model name" | sed q | sed -e "s/model name//" | sed -e "s/://" | sed -e 's/^[ \t]*//' | sed -e "s/(tm)//g" | sed -e "s/©//g" | sed -e "s/®//g"`
#приберемо подвійні пробіли:
cpu_model=`echo $cpu_model | sed -e "s/ / /g" | sed -e "s/ / /g" | sed -e "s/ / /g" | sed -e "s/ / /g" | sed -e "s/ / /g" | sed -e "s/ / /g" | sed -e "s/ / /g" | sed -e "s/ / /g" | sed -e "s/ / /g" | sed -e "s/ / /g"`

#Визначаємо ОС
if [ "$(cat /etc/redhat-release | awk {'print $2'})" == "release" ]
then
osfamily=$(cat /etc/redhat-release | awk {'print $1'})
osver2=$(cat /etc/redhat-release | awk {'print $3'})
else
if [ "$(cat /etc/redhat-release | awk {'print $3'})" == "release" ]
then
osfamily=$(cat /etc/redhat-release | awk {'print $1'})" "$(cat /etc/redhat-release | awk {'print $2'})
osver2=$(cat /etc/redhat-release | awk {'print $4'})
else osver2=0
fi
fi
osver1=`echo $osver2 | cut -c 1` #беремо тільки перший символ від версії для визначення покоління
if [ "$osfamily" == "CentOS Linux" ]; then osfamily="CentOS"; fi

#Визначаємо розрядність ОС
arc=`arch`
if [ "$arc" == "x86_64" ]; then arc=64 #В теорії можливо позначення "IA-64" і "AMD64", але я не зустрічав
else arc=32 #Щоб не перебирати всі можливі IA-32, x86, i686, i586 і т. д.
fi 

#визначаємо версію ядра Linux
kern=`uname -r | sed -e "s/-/ /" | awk {'print $1'}`

menu="
┌─────────────────────────────────────────────┐
│ $title $ver$space│
├───┬─────────────────────────────────────────┤
│ 1 │ Інформація про систему │
├───┼─────────────────────────────────────────┤
│ 2 │ Робота з ОС │
├───┼─────────────────────────────────────────┤
│ 3 │ Встановити панель управління хостингом │
├───┼─────────────────────────────────────────┤
│ 4 │ Встановлення та налаштування VPN-сервера │
├───┼─────────────────────────────────────────┤
│ 5 │ Робота з Proxy │
├───┼─────────────────────────────────────────┤
│ 6 │ Робота з файлами і програмами │
├───┼─────────────────────────────────────────┤
│ 7 │ Очищення системи │
├───┼─────────────────────────────────────────┤
│ 8 │ Термінал │
├───┼─────────────────────────────────────────┤
│ 9 │ Оновити $title$space2│
├───┼─────────────────────────────────────────┤
│ 0 │ Вихід │
└───┴─────────────────────────────────────────┘
"
menu2="
● Робота з ОС:
│
│ ┌───┬──────────────────────────────────────┐
├─┤ 1 │ Додати зовнішні репозиторії │
│ ├───┼──────────────────────────────────────┤
├─┤ 2 │ Оновити ОС │
│ ├───┼──────────────────────────────────────┤
├─┤ 3 │ Встановити популярні додатки │
│ ├───┼──────────────────────────────────────┤
├─┤ 4 │ Антивірус │
│ ├───┼──────────────────────────────────────┤
├─┤ 5 │ Firewall (iptables) │
│ ├───┼──────────────────────────────────────┤
├─┤ 6 │ Планувальник завдань (cron) │
│ ├───┼──────────────────────────────────────┤
├─┤ 7 │ Встановити часовий пояс │
│ ├───┼──────────────────────────────────────┤
├─┤ 8 │ Змінити пароль користувача │
│ ├───┼──────────────────────────────────────┤
└─┤ 0 │ Вийти на рівень вгору │
└───┴──────────────────────────────────────┘
"
menu24="
● Робота з ОС:
│
└─● Антивірус:
│
│ ┌───┬───────────────────────────┐
├─┤ 1 │ Встановити Антивірус │
│ ├───┼───────────────────────────┤
├─┤ 2 │ Оновити антивірус │
│ ├───┼───────────────────────────┤
├─┤ 3 │ Перевірити папку на віруси │
│ ├───┼───────────────────────────┤
├─┤ 4 │ Видалити антивірус │
│ ├───┼───────────────────────────┤
└─┤ 0 │ Вийти на рівень вгору │
└───┴───────────────────────────┘
"
menu25="
● Робота з ОС:
│
└─● Firewall (iptables):
│
│ ┌───┬───────────────────────────────────────────────┐
├─┤ 1 │ Включити firewall (помічник налаштування) │
│ ├───┼───────────────────────────────────────────────┤
├─┤ 2 │ Відключити брандмауер (рарешить всі підключення) │
│ ├───┼───────────────────────────────────────────────┤
├─┤ 3 │ Тимчасово вимкнути брандмауер │
│ ├───┼───────────────────────────────────────────────┤
├─┤ 4 │ Перезапустити firewall │
│ ├───┼───────────────────────────────────────────────┤
├─┤ 5 │ Відкрити порт в iptables │
│ ├───┼───────────────────────────────────────────────┤
├─┤ 6 │ Подивитися поточну політику firewall │
│ ├───┼───────────────────────────────────────────────┤
├─┤ 7 │ Зберегти поточні правила firewall │
│ ├───┼───────────────────────────────────────────────┤
└─┤ 0 │ Вийти на рівень вгору │
└───┴───────────────────────────────────────────────┘
"
menu26="
● Робота з ОС:
│
└─● Планувальник завдань (cron):
│
│ ┌───┬─────────────────────────────────────────┐
├─┤ 1 │ Перевірити запущений планувальник (cron) │
│ ├───┼─────────────────────────────────────────┤
├─┤ 2 │ Перезапустити cron │
│ ├───┼─────────────────────────────────────────┤
├─┤ 3 │ Додати завдання в планувальник (cron) │
│ ├───┼─────────────────────────────────────────┤
├─┤ 4 │ Відкрити файл із завданнями cron │
│ ├───┼─────────────────────────────────────────┤
├─┤ 5 │ Вимкнути планувальник (cron) │
│ ├───┼─────────────────────────────────────────┤
└─┤ 0 │ Вийти на рівень вгору │
└───┴─────────────────────────────────────────┘
"
menu27="
● Робота з ОС:
│
└─● Встановити часовий пояс:
│
│ ┌───┬────────────────────────┐
├─┤ 1 │ Калінінград │
│ ├───┼────────────────────────┤
├─┤ 2 │ Москва │
│ ├───┼────────────────────────┤
├─┤ 3 │ Самара │
│ ├───┼────────────────────────┤
├─┤ 4 │ Єкатеринбург │
│ ├───┼────────────────────────┤
├─┤ 5 │ Новосибірськ │
│ ├───┼────────────────────────┤
├─┤ 6 │ Красноярськ │
│ ├───┼────────────────────────┤
├─┤ 7 │ Іркутськ │
│ ├───┼────────────────────────┤
├─┤ 8 │ Владивосток │
│ ├───┼────────────────────────┤
├─┤ 9 │ Камчатка │
│ ├───┼────────────────────────┤
└─┤ 0 │ Вийти на рівень вгору │
└───┴────────────────────────┘
"
menu3="
● Встановити панель управління хостингом:
│
│ ┌───┬────────────────────────┐
├─┤ 1 │ ISPmanager 4 │
│ ├───┼────────────────────────┤
├─┤ 2 │ ISPmanager 5 │
│ ├───┼────────────────────────┤
├─┤ 3 │ Vesta CP │
│ ├───┼────────────────────────┤
├─┤ 4 │ Webuzo │
│ ├───┼────────────────────────┤
├─┤ 5 │ CentOS Web Panel (CWP) │
│ ├───┼────────────────────────┤
├─┤ 6 │ ZPanel CP │
│ ├───┼────────────────────────┤
├─┤ 7 │ Ajenti │
│ ├───┼────────────────────────┤
└─┤ 0 │ Вийти на рівень вгору │
└───┴────────────────────────┘
"
menu4="
● Встановлення та налаштування VPN-сервера:
│
│ ┌───┬────────────────────────────────────────────────┐
├─┤ 1 │ Встановити VPN-сервер (pptpd) │
│ ├───┼────────────────────────────────────────────────┤
├─┤ 2 │ Додати користувачів VPN │
│ ├───┼────────────────────────────────────────────────┤
├─┤ 3 │ Відкрити файл з логінами/паролями користувачів │
│ ├───┼────────────────────────────────────────────────┤
├─┤ 4 │ Додати правила для роботи VPN в IPTables │
│ ├───┼────────────────────────────────────────────────┤
├─┤ 5 │ Видалити VPN-сервер │
│ ├───┼────────────────────────────────────────────────┤
└─┤ 0 │ Вийти на рівень вгору │
└───┴────────────────────────────────────────────────┘
"
menu5="
● Робота з Proxy:
│
│ ┌───┬────────────────────────────────────────────────┐
├─┤ 1 │ Встановити Proxy-сервер (на базі Squid) │
│ ├───┼────────────────────────────────────────────────┤
├─┤ 2 │ Видалити Proxy (Squid) │
│ ├───┼────────────────────────────────────────────────┤
├─┤ 3 │ Поміняти MTU для інтерфейсу │
│ ├───┼────────────────────────────────────────────────┤
├─┤ 4 │ Відкрити файл налаштувань Squid │
│ ├───┼────────────────────────────────────────────────┤
├─┤ 5 │ Додати користувача Proxy │
│ ├───┼────────────────────────────────────────────────┤
├─┤ 6 │ Відкрити файл з логінами/паролями користувачів │
│ ├───┼────────────────────────────────────────────────┤
├─┤ 7 │ Перезапустити сервіс Proxy (Squid) │
│ ├───┼────────────────────────────────────────────────┤
└─┤ 0 │ Вийти на рівень вгору │
└───┴────────────────────────────────────────────────┘
"
menu6="
● Робота з файлами та програмами:
│
│ ┌───┬─────────────────────────────────────────────────────┐
├─┤ 1 │ Встановити яку-небудь програму │
│ ├───┼─────────────────────────────────────────────────────┤
├─┤ 2 │ Видалити будь-яку програму │
│ ├───┼─────────────────────────────────────────────────────┤
├─┤ 3 │ Видалити будь-яку програму з усіма залежностями │
│ ├───┼─────────────────────────────────────────────────────┤
├─┤ 4 │ Подивитися скільки вільного місця на диску │
│ ├───┼─────────────────────────────────────────────────────┤
└─┤ 0 │ Вийти на рівень вгору │
└───┴─────────────────────────────────────────────────────┘
"
menu7="
● Очищення системи:
│
│ ┌───┬──────────────────────────────────────────────┐
├─┤ 1 │ Видалити старі настановні пакети (кеш yum) │
│ ├───┼──────────────────────────────────────────────┤
├─┤ 2 │ Видалити логи Apache, Nginx │
│ ├───┼──────────────────────────────────────────────┤
├─┤ 3 │ Видалити логи Apache конкретного користувача │
│ ├───┼──────────────────────────────────────────────┤
├─┤ 4 │ Подивитися скільки вільного місця на диску │
│ ├───┼──────────────────────────────────────────────┤
└─┤ 0 │ Вийти на рівень вгору │
└───┴──────────────────────────────────────────────┘
"

#-----------------
#Інтерфейс
#-----------------
repeat=true
chosen=0
chosen2=0
while [ "$repeat" = "true" ] #виводимо меню, поки не треба вийти
do

#пішов висновок
if [ $chosen -eq 0 ]; then #виводимо меню, лише якщо ще нікуди не заходили
menu
myread_dig pick
else
pick=$chosen
fi

case "$pick" in
1) #Інформація про систему
clear
showinfo
br
echo "Обчислюємо Ваш IP на інтерфейсі..."
whatismyip
clear
showinfo
br
echo "Обчислюємо Ваш зовнішній IP..."
whatismyipext
clear
showinfo
br
wait
;;
2) #Робота з ОС
chosen=2
clear
if [ $chosen2 -eq 0 ]; then #виводимо меню, лише якщо ще нікуди не заходили
echo "$title"
echo "$menu2"
myread_dig pick
else
pick=$chosen2
fi
case "$pick" in
1) #Додати зовнішні репозиторії
case "$osver1" in
4)
repo4
;;
5)
repo5
;;
6)
repo6
;;
7)
repo7
;;
0)
echo "Ми не змогли визначити версію Вашої ОС, але Ви можете вибрати самі на свій страх і ризик:"
echo "5) CentOS 5.x x64 (або інший дистрибутив на базі RHEL 5)"
echo "6) CentOS 6.x x64 (або інший дистрибутив на базі RHEL 6)"
echo "7) CentOS 7.x x64 (або інший дистрибутив на базі RHEL 7)"
echo "0) Будь-яка інша ОС"
myread_dig osver_user
case "$osver_user" in
5)
repo5
;;
6)
repo6
;;
7)
repo7
;;
0)
echo "Ніякі інші ОС поки не підтримуються. Але планується розширення підтримки"
wait
;;
esac
;;
*) #по ідеї ми НІКОЛИ не повинні потрапити сюди, виходячи з того, як будується перевірка
echo "неочікувана помилка при визначенні версії CentOS. Виходимо."
exit 0
;;
esac 
;;
2) #Оновити ОС
echo "Починаємо оновлення ОС..."
yum update -y
echo "ОС була успішно оновлено."
wait 
;;
3) #Встановити популярні додатки
echo "Зараз будуть встановлені наступні програми:"
echo "mc - Midnigh Commander (файловий менеджер)"
echo "htop (більш просунутий моніторинг ресурсів)"
echo "nano (найпростіший текстовий редактор)"
if [ $osver1 -ne 5 ]; then echo "аддон для yum, який дозволяє видаляти програми з усіма залежностями"; fi #Не для CentOS 5
if [ $osver1 -eq 7 ]; then echo "net-tools (щоб повернути команду ifconfig)"; fi #Тільки для CentOS 7
br
wait
echo "Починаємо установку програм..."
yum -y install mc
yum -y install htop
yum -y install nano
if [ $osver1 -ne 5 ]; then yum -y yum install-remove-with-leaves; fi #Не для CentOS 5
if [ $osver1 -eq 7 ]; then yum -y install net-tools; fi #Тільки для CentOS 7
br
echo "Програми були встановлені."
wait 
;;
4) #Антивірус
chosen2=4
clear
echo "$title"
echo "$menu24"
myread_dig pick
case "$pick" in
1) #Встановити Антивірус
echo "зараз буде встановлений антивірус ClamAV."
wait
yum -y install clamav clamd
br
echo "Антивірус був встановлений. Зараз оновимо антивірусні бази"
br
freshclam
br
echo "Бази були оновлені."
br
echo "Зараз ми спробуємо запустити цей сервіс (демон)."
chkconfig --levels 235 clamd on
service clamd restart
br
echo "Все готово!"
wait
;;
2) #Оновити антивірус
installed clamscan
if [ $exist == true ]; then
freshclam
br
wait
else
echo "У вас не встановлений антивірус."
wait
fi
;;
3) #Перевірити папку на віруси
installed clamscan
if [ $exist == true ]; then
echo 'Вкажіть папку, яку потрібно просканувати (введіть "/", якщо весь сервер):'
read scandir
echo "чи Потрібно зберегти лог сканування у файл?"
myread_yn avlog
case "$avlog" in
y|Y)
echo 'Вкажіть шлях для збереження лода сканування (починаючи з "/")'
read avlogdir
echo "Скануємо..."
br
clamscan $scandir -r -i --log=$avlogdir
;;
n|N|т|Т)
echo "Скануємо..."
br
clamscan $scandir -r
;;
*)
echo "Неправильний вибір"
wait
;;
esac
br
wait
else
echo "У вас не встановлений антивірус."
wait
fi
;;
4) #Видалити антивірус
uninstall clamav*
br
wait
;;
0)
chosen2=0
;;
esac
;;
5) #Firewall (iptables)
chosen2=5
clear
echo "$title"
echo "$menu25"
myread_dig pick
case "$pick" in
1) #Включити firewall (помічник налаштування)
clear
echo "Зараз будуть видалені всі правила iptables (якщо вони були), встановлено заборону"
echo "на обробку всіх вхідних і вихідних пакетів, крім внутрішнього обміну"
echo "пакетами (localhost), SSH-з'єднання (22 порт) і всіх пов'язаних пакетів"
echo "(стан RELATED і ESTABLISHED). А далі вам буде запропоновано варіант відкрити"
echo "найпоширеніші порти (з вашого дозволу). Продовжити?"
myread_yn ans
case "$ans" in
y|Y)
echo "Починаємо налаштування iptables"
#Перевірка на CentOS 7
if [ $osver1 -eq 7 ]; then 
systemctl stop firewalld
systemctl mask firewalld
myinstall iptables-services | tee > null
systemctl enable iptables
fi
iptables -F
iptables -X
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
br
echo "Готовий. Хочете, щоб цей комп'ютер пинговался з інших комп'ютерів?"
myread_yn ans
case "$ans" in
y|Y)
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
;;
esac
br
echo "Часто люди на серверах відкривають наступні порти:"
echo "web: 80, 443"
echo "ftp: 21"
echo "ntp: 123 (для синхронізації годин)"
echo "dns: 54"
echo "Хочете відкрити їх зараз?"
myread_yn ans
case "$ans" in
y|Y)
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 443 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 123 -j ACCEPT
;;
esac
br
echo "Хочете відкрити порт 3128 для Proxy?"
myread_yn ans
case "$ans" in
y|Y)
iptables -A INPUT -p tcp --dport 3128 -j ACCEPT
;;
esac
br
echo "Хочете відкрити порти для сервера VPN (PPTP)?"
myread_yn ans
case "$ans" in
y|Y)
whatismyip_full
iptables -A INPUT -p 47 -j ACCEPT
iptables -A OUTPUT -p 47 -j ACCEPT
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1723 -j ACCEPT
iptables -t nat -I POSTROUTING -j nat джерела є специфічною формою --to $ip
iptables -A FORWARD -s 10.1.0.0/24 -j ACCEPT
iptables -A FORWARD -d 10.1.0.0/24 -j ACCEPT
;;
esac
iptables_save
br
echo "Firewall був налаштований. Інші порти ви можете відкрити самостійно,"
echo 'скориставшись розділом "Відкрити порт в iptables".'
wait
;;
esac
;;
2) #Вимкнути брандмауер (рарешить всі підключення)
echo "Зараз будуть видалені всі правила iptables, після чого будуть дозволені всі підключення. Продовжити?"
myread_yn ans
case "$ans" in
y|Y)
iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
;;
esac
iptables_save
br
echo "Готовий. Iptables продовжує працювати, але в ньому можна все підключення."
wait
;;
3) #Тимчасово вимкнути брандмауер
iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
br
echo "Готовий. Були тимчасово скинуті всі правила для iptables. Зараз проходять всі"
echo "підключення. Після перезавантаження сервера або перезапуску iptables все буде"
echo "як перш (застосовуватися всі правила, які були до цього)."
br
wait
;;
4) #Перезапустити firewall
if [ $osver1 -eq 7 ]; then 
myinstall iptables-services | tee > null
fi
service iptables restart
br
echo "Готовий. "
wait
;;
5) #Відкрити порт в iptables
echo "Вкажіть у яку сторону ви хочете відкрити порт:"
echo "1) Вхідні з'єднання (щоб до цього сервера можна було підключитися по заданому порту)"
echo "2) Вихідні з'єднання (щоб сервер міг підключитися до інших комп'ютерів по заданому порту)"
myread_dig taffic_type
case "$taffic_type" in
1)
taffic_type=in
;;
2)
taffic_type=out
;;
*)
echo "Неправильний вибір. Аварійний вихід."
wait
exit
;;
esac
br
echo "Вкажіть який порт ви хочете відкрити:"
read port
br
echo "Виберіть протокол, по якому його потрібно відкрити:"
echo "1) TCP"
echo "2) UDP"
echo "3) TCP і UDP"
myread_dig protocol
case "$protocol" in
1)
openport $taffic_type tcp $port
;;
2)
openport $taffic_type udp $port
;;
3)
openport $taffic_type tcp $port
openport $taffic_type udp $port
;;
*)
echo "Неправильний вибір."
;;
esac
br
echo "Готовий."
wait
;;
6) #Подивитися поточну політику firewall
iptables -nvL
br
wait
;;
7) #Зберегти поточні правила firewall
iptables_save
br
echo "Готовий."
wait
;;
0)
chosen2=0
;;
esac
;;
6) #Планувальник завдань (cron)
chosen2=6
clear
echo "$title"
echo "$menu26"
myread_dig pick
case "$pick" in
1) #Перевірити запущений планувальник (cron)
if [[ -n $(service crond status | grep "is running") ]]; then
echo "Планувальник Cron працює..."
wait
else
echo "Планувальник Cron даний момент не запущений. Спробувати запустити?"
myread_yn pick
case "$pick" in
y|Y)
service crond start
br
echo "Готовий. Хочете додати Cron в автозавантаження, щоб він запускався після кожної перезавантаження?"
myread_yn pick
case "$pick" in
y|Y)
echo "Додаємо..."
chkconfig crond on
echo "Готовий."
br
wait
;;
esac 
;;
esac
fi
;;
2) #Перезапустити cron
service crond restart
br
wait
;;
3) #Додати завдання в планувальник (cron)
clear
echo "Введіть команду, яку повинен виконувати планувальник:"
read cron_task
br
echo "Виберіть інтервал, з яким повинна виконуватися ця задача:"
echo "1) При кожному завантаженні системи"
echo "2) Один або кілька разів на годину"
echo "3) Один або кілька разів в день"
echo "4) Один раз на тиждень"
echo "5) Один раз в місяць"
echo "0) Не потрібно виконувати, я передумав"
myread_dig pick
case "$pick" in
1)
echo "@reboot $cron_task" >> /var/spool/cron/$(whoami)
echo "Готовий. Завдання буде виконуватися після кожного завантаження системи."
;;
2)
br
echo "Виберіть інтервал"
echo "1) Кожний годину"
echo "2) Два рази в годину (кожні 30 хвилин)"
echo "3) Три рази в годину (кожні 20 хвилин)"
echo "4) Чотири рази в годину (кожні 15 хвилин)"
echo "5) Шість разів на годину (кожні 10 хвилин)"
echo "6) Дванадцять разів на годину (кожні 5 хвилин)"
echo "7) Тридцять разів на годину (кожні 2 хвилини)"
echo "8) Шістдесят разів на годину (за кожну хвилину)"
echo "0) Не потрібно виконувати, я передумав"
myread_dig pick
case "$pick" in
1)
echo "0 * * * * $cron_task" >> /var/spool/cron/$(whoami) # @hourly
echo "Готовий. Завдання буде виконуватися в 0 хвилин кожної години."
;;
2)
echo "*/30 * * * * $cron_task" >> /var/spool/cron/$(whoami)
echo "Готовий. Завдання буде виконуватися кожні 30 хвилин" 
;;
3)
echo "*/20 * * * * $cron_task" >> /var/spool/cron/$(whoami)
echo "Готовий. Завдання буде виконуватися кожні 20 хвилин" 
;;
4)
echo "*/15 * * * * $cron_task" >> /var/spool/cron/$(whoami)
echo "Готовий. Завдання буде виконуватися кожні 15 хвилин" 
;;
5)
echo "*/10 * * * * $cron_task" >> /var/spool/cron/$(whoami)
echo "Готовий. Завдання буде виконуватися кожні 10 хвилин" 
;;
6)
echo "*/5 * * * * $cron_task" >> /var/spool/cron/$(whoami)
echo "Готовий. Завдання буде виконуватися кожні 5 хвилин" 
;;
7)
echo "*/2 * * * * $cron_task" >> /var/spool/cron/$(whoami)
echo "Готовий. Завдання буде виконуватися кожні 2 хвилини" 
;;
8)
echo "* * * * * $cron_task" >> /var/spool/cron/$(whoami)
echo "Готовий. Завдання буде виконуватися кожну хвилину" 
;;
0)
;;
*)
echo "Неправильний вибір..."
;; 
esac
;;
3)
br
echo "Виберіть інтервал"
echo "1) Кожен день (можна вибрати в яку годину)"
echo "2) Два рази на день (кожні 12 годин)"
echo "3) Три рази на день (кожні 8 годин)"
echo "4) Чотири рази на день (кожні 6 годин)"
echo "5) Шість разів на день (кожні 4 години)"
echo "6) Дванадцять разів на день (кожні 2 години)"
echo "0) Не потрібно виконувати, я передумав"
myread_dig pick
case "$pick" in
1)
br
echo "Вкажіть у яку годину запускати завдання (0-23)"
read temp
let temp2=$temp+0
if [[ $temp2 -gt 0 && $temp2 -le 23 ]]; then #введено правильно
echo "0 $temp * * * $cron_task" >> /var/spool/cron/$(whoami)
echo "Готовий. Завдання буде виконуватися кожен $temp-ї год"
else #можливо введено неправильно
if [[ "$temp" = "0" ]]; then #все-таки введено правильно
echo "0 $temp * * * $cron_task" >> /var/spool/cron/$(whoami)
echo "Готовий. Завдання буде виконуватися кожен $temp-ї год"
else #точно введено неправильно
echo "Неправильно вказали годину"
fi
fi
;;
2)
echo "0 */12 * * * $cron_task" >> /var/spool/cron/$(whoami)
echo "Готовий. Завдання буде виконуватися кожні 12 годин" 
;;
3)
echo "0 */8 * * * $cron_task" >> /var/spool/cron/$(whoami)
echo "Готовий. Завдання буде виконуватися кожні 8 годин" 
;;
4)
echo "0 */6 * * * $cron_task" >> /var/spool/cron/$(whoami)
echo "Готовий. Завдання буде виконуватися кожні 6 годин" 
;;
5)
echo "0 */4 * * * $cron_task" >> /var/spool/cron/$(whoami)
echo "Готовий. Завдання буде виконуватися кожні 4 години" 
;;
6)
echo "0 */2 * * * $cron_task" >> /var/spool/cron/$(whoami)
echo "Готовий. Завдання буде виконуватися кожні 2 години" 
;;
0)
;;
*)
echo "Неправильний вибір..."
;; 
esac
;;
4)
br
echo "Виберіть день тижня, в який треба запускати завдання"
echo "1) Понеділок"
echo "2) Вівторок"
echo "3) Середовище"
echo "4) Четвер"
echo "5) П'ятниця"
echo "6) Субота"
echo "7) Неділя"
echo "0) Не потрібно виконувати, я передумав"
myread_dig pick
case "$pick" in
1/2/3/4/5/6/7)
echo "0 4 * * $pick $cron_task" >> /var/spool/cron/$(whoami)
case "$pick" in
1) day="кожен понеділок"
;;
2) day="щовівторка"
;;
3) day="щосереди"
;;
4) day="щочетверга"
;;
5) day="кожну п'ятницю"
;;
6) day="щосуботи"
;;
7) day="щонеділі"
;;
esac
echo "Готовий. Завдання буде виконуватися $day в 4 години ранку."
;;
0)
;;
*)
echo "Неправильний вибір..."
;;
esac
;;
5)
br
echo "Вкажіть в який день місяця запускати завдання"
read temp
let temp=$temp+0
if [[ $temp -gt 0 && $temp -le 31 ]]; then #введено правильно
echo "0 4 $temp * * $cron_task" >> /var/spool/cron/$(whoami)
echo "Готовий. Завдання буде виконуватися кожне $temp-е часло кожного місяця в 4 години ранку."
else # введено неправильно
echo "Неправильно вибрано число"
fi
;;
0)
;;
*)
echo "Неправильний вибір..."
;;
esac
service crond reload | tee > null
br
wait
;;
4) #Відкрити файл із завданнями cron
edit /var/spool/cron/$(whoami)
;;
5) #Вимкнути планувальник (cron)
echo "Планувальник не рекомендується відключати. Ви впевнені, що хочете вимкнути його?"
myread_yn pick
case "$pick" in
y|Y)
br
service crond stop
br
echo "Планувальник був вимкнений. Якщо він стояв в автозавантаженні, то він знову буде запущено після перезавантаження системи"
br
wait
;;
esac
;;
0) #Вийти на рівень вгору
chosen2=0
;;
esac 
;;
7) #Встановити часовий пояс
clear
echo "$title"
echo "$menu27"
echo "Поточний час на цьому комп'ютері: $(date +%H:%M). Виберіть часовий пояс, який ви хочете встановити."
myread_dig pick
case "$pick" in
1)
settimezone Europe Kaliningrad
;;
2)
settimezone Europe Moscow
;;
3)
settimezone Europe Samara
;;
4)
settimezone Asia Yekaterinburg
;;
5)
settimezone Asia Novosibirsk
;;
6)
settimezone Asia Krasnoyarsk
;;
7)
settimezone Asia Irkutsk
;;
8)
settimezone Asia Vladivostok
;;
9)
settimezone Asia Kamchatka
;;
0)
;;
*)
echo "Неправильний вибір."
wait
esac
;;
8) #Змінити пароль поточного користувача
passwd
br
wait
;;
0)
chosen=0
;;
*)
echo "Неправильний вибір"
wait
;;
esac
;;
3) #Встановити панель управління хостингом
chosen=3
clear
echo "$title"
echo "$menu3"
myread_dig pick
case "$pick" in
1) #ISPmanager 4
clear
echo 'Панель управління "ISPManager 4"'
echo 'Підтримка ОС: CentOS | RHEL | Debian | Ubuntu'
echo 'Системні вимоги: мінімальні не визначено'
echo 'Ліцензія: Панель управління ПЛАТНА! Без ліцензії, активованої на ваш IP навіть не встановиться.'
echo 'Мова: Російська'
echo 'Хочете встановити?'
myread_yn pick
case "$pick" in
y|Y)
wget "http://download.ispsystem.com/install.4.sh" -r -N -nd
sh install.4.sh
rm -f install.4.sh
;;
esac
;;
2) #ISPmanager 5
clear
echo 'Панель управління "ISPManager 5"'
echo 'Підтримка ОС: CentOS | RHEL | Debian | Ubuntu'
echo 'Системні вимоги: мінімальні не визначено'
echo 'Ліцензія: Панель управління ПЛАТНА! Після установки буде Trial на 14 днів.'
echo 'Мова: Російська'
echo 'Хочете встановити?'
myread_yn pick
case "$pick" in
y|Y)
wget http://cdn.ispsystem.com/install.sh -r -N -nd
sh install.sh
rm -f install.sh
;;
esac
;;
3) #Vesta CP
clear
echo 'Панель управління "Vesta CP"'
echo 'Підтримка ОС: CentOS | RHEL | Debian | Ubuntu'
echo 'Системні вимоги: мінімальні не визначено'
echo 'Ліцензія: Панель управління повністю безкоштовна.'
echo 'Мова: Англійська, російська'
echo 'Хочете встановити?'
myread_yn pick
case "$pick" in
y|Y)
if [[ $(pidof httpd) != "" ]] #перевіряємо встановлено httpd
then
echo "У вас встановлений http-сервер, а Vesta CP вимагає установки на чисту машину."
echo 'Хочете видалити перед установкою "Vesta CP"?'
myread_yn pick
case "$pick" in
y|Y)
service httpd stop
yum erase httpd -y
;;
esac
fi
br
echo 'Починаємо установку...'
openport in tcp 8083
wget http://vestacp.com/pub/vst-install.sh -r -N -nd
sh vst-install.sh --force
rm -f vst-install.sh
;;
esac
;;
4) #Webuzo
clear
echo 'Панель управління "Webuzo"'
echo 'Підтримка ОС: CentOS 5.x, 6.x | RHEL 5.x, 6.x | Scientific Linux 5.x, 6.x | Ubuntu LTS'
echo 'Системні вимоги: 512 MB RAM (minimum)'
echo 'Ліцензія: Панель управління має платну і безкоштовну версію. Встановіть без ліцензії для використання безкоштовної версії.'
echo 'Мова: Англійська'
echo 'Хочете встановити?'
myread_yn pick
case "$pick" in
y|Y)
case "$osver1" in
5/6)
webuzo_install
;;
7)
echo 'У вас CentOS 7.x. Дана панель управління не підтримує цю версію. Виходимо.'
wait
;;
0)
echo 'нам не вдалося визначити Вашу ОС. Можливо, вона не підтримується Webuzo.'
echo 'Хочете все одно встановити дану панель управління на свій страх і ризик?'
myread_yn ans
case "$ans" in
y|Y)
webuzo_install
;;
n|N|т|Т)
;;
*)
echo 'Неправильний вибір. Виходимо.'
wait
;;
esac
;; 
esac
;;
n|N|т|Т)
;;
*)
echo 'Неправильний вибір. Виходимо.'
wait
;;
esac
;;
5) #CentOS Web Panel (CWP)
clear
echo 'Панель управління "CentOS Web Panel (CWP)"'
echo 'Підтримка ОС: CentOS 6.x | RHEL 6.x | CloudLinux 6.x'
echo 'Системні вимоги: 512 MB RAM (minimum)'
echo 'Ліцензія: Панель управління повністю безкоштовна.'
echo 'Мова: Англійська'
br
echo "УВАГА! Ця панель буде встановлюватися дуже довго (до 1 години)!"
br
echo 'Хочете встановити?'
myread_yn pick
case "$pick" in
y|Y)
case "$osver1" in
5/7)
echo "У вас CentOS $osver1.x. Дана панель управління не підтримує цю версію. Виходимо."
wait
;;
6)
cwp_install
;;
0)
echo 'нам не вдалося визначити Вашу ОС. Можливо, вона не підтримується Webuzo.'
echo 'Хочете все одно встановити дану панель управління на свій страх і ризик?'
myread_yn ans
case "$ans" in
y|Y)
cwp_install
;;
n|N|т|Т)
;;
*)
echo 'Неправильний вибір. Виходимо.'
wait
;;
esac
;; 
esac
;;
n|N|т|Т)
;;
*)
echo 'Неправильний вибір. Виходимо.'
wait
;;
esac
;;
6) #ZPanel CP
clear
echo 'Панель управління "ZPanel CP"'
echo 'Підтримка ОС: CentOS 6.x | RHEL 6.x'
echo 'Системні вимоги: не вказано розробником'
echo 'Ліцензія: Панель управління повністю безкоштовна.'
echo 'Мова: Англійська, німецька'
br
echo 'УВАГА! Підтримка даної панелі давно припинено, русифікації немає. Встановлюйте на свій страх і ризик.'
br
echo 'Хочете встановити?'
myread_yn pick
case "$pick" in
y|Y)
case "$osver1" in
5/7)
echo "У вас CentOS $osver1.x. Дана панель управління не підтримує цю версію. Виходимо."
wait
;;
6)
zpanel_install
;;
0)
echo 'нам не вдалося визначити Вашу ОС. Можливо, вона не підтримується Webuzo.'
echo 'Хочете все одно встановити дану панель управління на свій страх і ризик?'
myread_yn ans
case "$ans" in
y|Y)
zpanel_install
;;
n|N|т|Т)
;;
*)
echo 'Неправильний вибір. Виходимо.'
wait
;;
esac
;; 
esac
;;
n|N|т|Т)
;;
*)
echo 'Неправильний вибір. Виходимо.'
wait
;;
esac
;;
7) #Ajenti
clear
echo 'Панель управління "Ajenti"'
echo 'Підтримка ОС: CentOS 6, 7 | Debian 6, 7, 8 | Ubuntu | Gentoo'
echo 'Системні вимоги: 35 Mb RAM '
echo 'Ліцензія: Панель має безкоштовну версію, так і платну'
echo 'Опис: Ajenti - це панель управління сервером, але до неї є Addon під назвою Ajenti V,'
echo ' з допомогою якого можна керувати хостингом.'
echo 'Мова: Англійська, російська і ще 42 інших мови'
echo 'Хочете встановити?'
myread_yn pick
case "$pick" in
y|Y)
case "$osver1" in
4/5)
echo "У вас CentOS $osver1.x. Дана панель управління не підтримує цю версію. Виходимо."
wait
;;
6/7)
ajenti_install
;;
0)
echo 'нам не вдалося визначити Вашу ОС. Можливо, вона не підтримується Webuzo.'
echo 'Хочете все одно встановити дану панель управління на свій страх і ризик?'
myread_yn ans
case "$ans" in
y|Y)
ajenti_install
;;
n|N|т|Т)
;;
*)
echo 'Неправильний вибір. Виходимо.'
wait
;;
esac
;; 
esac
;;
n|N|т|Т)
;;
*)
echo 'Неправильний вибір. Виходимо.'
wait
;;
esac 
;;
0)
chosen=0
;;
*)
echo "Неправильний вибір."
wait
;;
esac
;;
4) #Установка і настройка VPN-сервера
chosen=4
clear
echo "$title"
echo "$menu4"
myread_dig pick
case "$pick" in
1) #Встановити VPN-сервер (pptpd)
echo "Увага! Цей скрипт працює ТІЛЬКИ на centOS!"
echo "Увага! Для роботи VPN потрібен інтерфейс PPP, який зазвичай відключений при віртуалізації"
echo "на OpenVZ. Його можна включити через тех. підтримку або в панелі керування сервером"
echo "Якщо у вас технологія віртуалізації XEN або KVM, то все нормально."
br
echo "Далі буде вироблено оновлення ОС і установка необхідних компонентів для VPN-сервера."
wait
br
echo "установка PPTP"
#CentOS 5
if [ $osver1 -eq 5 ]; then rpm -Uvh http://pptpclient.sourceforge.net/yum/stable/rhel5/pptp-release-current.noarch.rpm; fi
#yum update -y
yum -y install ppp pptpd pptp
br
whatismyip_full
#відкриваємо порти і налаштовуємо маршрутизацію
br
echo "Відкриваємо порти у firewall для роботи VPN"
br
iptables -I INPUT -p 47 -j ACCEPT
iptables -I OUTPUT -p 47 -j ACCEPT
openport in tcp 1723
openport out tcp 1723
iptables -t nat -I POSTROUTING -j nat джерела є специфічною формою --to $ip
iptables -I FORWARD -s 10.1.0.0/24 -j ACCEPT
iptables -I FORWARD -d 10.1.0.0/24 -j ACCEPT
#тепер робимо так, щоб збереглися правила після перезавантаження
iptables_save
br
echo "Введіть ім'я користувача, яке потрібно створити (н. п.. client1 or john):"
read u
echo "Введіть пароль цього користувача:"
read p
br
echo "Створення конфігурації сервера"
cat > /etc/ppp/pptpd-options <<END
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
ms-dns 8.8.8.8
ms-dns 8.8.4.4
proxyarp
nodefaultroute
lock
nobsdcomp
END
sed -i -e '/net.ipv4.ip_forward = 0/d' /etc/sysctl.conf #Видаляємо рядок net.ipv4.ip_forward = 0
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
# setting up pptpd.conf
echo "option /etc/ppp/pptpd-options" > /etc/pptpd.conf
echo "logwtmp" >> /etc/pptpd.conf
echo "localip $ip" >> /etc/pptpd.conf
echo "remoteip 10.1.0.1-100" >> /etc/pptpd.conf
#autostart pptpd
chkconfig pptpd on 
# adding new user
echo "$u * $p *" >> /etc/ppp/chap-secrets
# правимо mtu для 10 ppp-юзерів
sed -i -e '/exit 0/d' /etc/ppp/ip-up #Видаляємо exit 0 в кінці файлу
cat >> /etc/ppp/ip-up <<END
ifconfig ppp0 mtu 1400
ifconfig ppp1 mtu 1400
ifconfig ppp2 mtu 1400
ifconfig ppp3 mtu 1400
ifconfig ppp4 mtu 1400
ifconfig ppp5 mtu 1400
ifconfig ppp6 mtu 1400
ifconfig ppp7 mtu 1400
ifconfig ppp8 mtu 1400
ifconfig ppp9 mtu 1400
exit 0 #повертаємо exit 0
END
br
echo "Перезапуск PPTP"
service pptpd restart
#centOS7
if [ $osver1 -eq 7 ]; then systemctl start pptpd; systemctl enable pptpd.service; fi
br
echo "Налаштування вашого власного VPN завершена!"
echo "Ваш IP: $ip? логін і пароль:"
echo "Ім'я користувача (логін):$u ##### Пароль: $p"
br
wait
;;
2) #Додати користувачів VPN
echo "Введіть ім'я користувача для створення (eg. client1 or john):"
read u
echo ", введіть пароль для нового користувача:"
read p
# adding new user
echo "$u * $p *" >> /etc/ppp/chap-secrets
echo
echo "Додатковий користувач створений!"
echo "Ім'я користувача (логін):$u ##### Пароль: $p"
br
wait
;;
3) #Відкрити файл з логінами/паролями користувачів
edit /etc/ppp/chap-secrets
;;
4) #Додати правила для роботи VPN в IPTables
whatismyip_full 
iptables -I INPUT -p 47 -j ACCEPT
iptables -I OUTPUT -p 47 -j ACCEPT
openport in tcp 1723
openport out tcp 1723
iptables -t nat -I POSTROUTING -j nat джерела є специфічною формою --to $ip
iptables -I FORWARD -s 10.1.0.0/24 -j ACCEPT
iptables -I FORWARD -d 10.1.0.0/24 -j ACCEPT
br
echo 'Хочете, щоб це правило зберігалося після перезавантаження?'
myread_yn ans
case "$ans" in
y|Y)
iptables_save 
;;
esac
br
wait
;;
5) #Видалити VPN-сервер
clear
echo "Увага! Буде повністю видалений VPN-сервер, файл з логінами/паролями і файл налаштувань"
echo "Продовжити?"
myread_yn ans
case "$ans" in
y|Y)
uninstall -y pptpd pptp
rm -f /etc/ppp/chap-secrets
rm -f /etc/pptpd.conf
sed -i -e '/ifconfig ppp0 mtu 1400/d' /etc/ppp/ip-up #Видаляємо рядки, які додавали
sed -i -e '/ifconfig ppp1 mtu 1400/d' /etc/ppp/ip-up #Видаляємо рядки, які додавали
sed -i -e '/ifconfig ppp2 mtu 1400/d' /etc/ppp/ip-up #Видаляємо рядки, які додавали
sed -i -e '/ifconfig ppp3 mtu 1400/d' /etc/ppp/ip-up #Видаляємо рядки, які додавали
sed -i -e '/ifconfig ppp4 mtu 1400/d' /etc/ppp/ip-up #Видаляємо рядки, які додавали
sed -i -e '/ifconfig ppp5 mtu 1400/d' /etc/ppp/ip-up #Видаляємо рядки, які додавали
sed -i -e '/ifconfig ppp6 mtu 1400/d' /etc/ppp/ip-up #Видаляємо рядки, які додавали
sed -i -e '/ifconfig ppp7 mtu 1400/d' /etc/ppp/ip-up #Видаляємо рядки, які додавали
sed -i -e '/ifconfig ppp8 mtu 1400/d' /etc/ppp/ip-up #Видаляємо рядки, які додавали
sed -i -e '/ifconfig ppp9 mtu 1400/d' /etc/ppp/ip-up #Видаляємо рядки, які додавали
echo "Готовий."
br
wait
;;
n|N)
;;
*)
echo "Неправильний відповідь"
wait
;;
esac
;;
0)
chosen=0
;;
*)
echo "Неправильний вибір"
wait
;;
esac
;;
5) #Робота з Proxy
chosen=5
clear
echo "$title"
echo "$menu5"
myread_dig pick
case "$pick" in
1) #Встановити Proxy-сервер (на базі Squid)
echo "Починаємо установку squid"
yum -y install squid
echo "Squid було встановлено"
sed -i "/http_access deny all/d" "/etc/squid/squid.conf" #видаляємо рядок із забороною доступу (нижче додамо знову при необхідності)
echo "#Нижче додані наші налаштування" >> /etc/squid/squid.conf
br
echo 'За замовчуванням Proxy працює на порт 3128, але його можна поміняти. Хочете змінити порт?'
myread_yn ans
port=3128 #ставимо порт за замовчуванням, далі, якщо треба, його перевизначаємо
case "$ans" in
y|Y)
echo 'Вкажіть порт, на якому повинен працювати Proxy?'
read port
sed -i "/http_port/d" "/etc/squid/squid.conf" #видаляємо рядок з налаштуванням порту
echo "http_port $port" >> /etc/squid/squid.conf #додаємо рядок з налаштуванням порту
;;
esac
br
echo "Виберіть варіант авторизації на Проксі:"
echo "1) Вільний доступ (будь-який, хто знає IP і порт - може скористатися)"
echo "2) Доступ по логіну/паролю"
myread_dig ans
case "$ans" in
1)
echo "http_access allow all" >> /etc/squid/squid.conf
echo 'Був відкритий доступ всім користувачам'
br
;;
2)
installed httpd-tools
if [ $exist == false ]; then yum -y install httpd-tools; fi #встановлюємо утиліту htpasswd, якщо її немає
touch /etc/squid/internet_users #створюємо файл з логінами-паролями
chmod 440 /etc/squid/internet_users #виставляємо права на цей файл
chown squid:squid /etc/squid/internet_users
ncsa_path=$(find / -name "ncsa_auth") #визначаємо шлях ncsa_auth
br
echo "Вкажіть логін користувача:"
read login
login_lower=$(echo $login | tr [:upper:] [:lower:]) #Перевели логін в нижній регстр, без цього авторизація взагалі не буде проходити
htpasswd /etc/squid/internet_users $login_lower
echo "auth_param basic program $ncsa_path /etc/squid/internet_users " >> /etc/squid/squid.conf
echo "auth_param basic children 32" >> /etc/squid/squid.conf #кількість юзерів
echo "auth_param basic realm Enter login and password to use this Proxy " >> /etc/squid/squid.conf #привітальна фраза
echo "auth_param basic credentialsttl 8 hours " >> /etc/squid/squid.conf #На скільки запам'ятовувати авторизацію
echo "acl internet_users proxy_auth REQUIRED " >> /etc/squid/squid.conf
echo "http_access allow internet_users " >> /etc/squid/squid.conf
echo "http_access deny all " >> /etc/squid/squid.conf #заборонили доступ всім, крім авторизованих користувачів
;;
*)
echo "Неправильний вибір. Аварійний вихід."
wait
exit
;;
esac
#відкриваємо порт в iptables
br
echo "Зараз відкриємо порт в iptables, щоб можна було підключитися до сервера"
openport in tcp $port
br
echo 'За замовчуванням Proxy не є анонімним і можна визначити Ваш IP, коли Ви їм користуєтеся'
echo 'Хочете зробити Ваш Proxy повністю анонімним?'
myread_yn ans
case "$ans" in
y|Y)
br
echo 'Майте на увазі, що такий Proxy-сервер порушує правила протоколу HTTP і є НЕЗАКОННИМ.'
echo 'Всю відповідальність за такий сервер - несете ви. Все ще хочете продовжити?'
myread_yn ans
case "$ans" in
y|Y)
cat >> /etc/squid/squid.conf <<END
via off
forwarded_for delete
END
;;
esac
;;
esac
br
echo 'Ви хочете налаштувати Proxy таким чином, щоб можна було використовувати програми, типу Proxifier?'
echo 'В цьому випадку буде дозволено перенесення SSL тунелю на порт 80. Якщо ви не впевнені, дайте відповідь "ні"'
myread_yn ans
case "$ans" in
y|Y)
sed -i -e '/http_access deny CONNECT !SSL_ports/d' /etc/squid/squid.conf #Видаляємо з конфига сходинку http_access deny CONNECT !SSL_ports
echo '#http_access deny CONNECT !SSL_ports' >> /etc/squid/squid.conf #повертаємо її назад в закоментованому вигляді"
;;
esac
br
echo "Додаємо Squid в автозавантаження..."
chkconfig squid on
br
service squid restart
br
echo "Proxy-сервер був успішно налаштований. Якщо підключення до нього є, але трафік не йде, то, можливо"
echo "проблема в MTU. Ви можете налаштувати його у відповідному розділі."
br
whatismyipext
echo "Параметри вашого Proxy:"
echo "IP: $ipext"
echo "Порт: $port"
echo "Користувач: $login"
br
wait
;;
2) #Видалити Proxy (Squid)
echo "Буде видалено Proxy-сервер (Squid), а також файл налаштувань і файл"
echo "з логінами/паролями користувачів. Продовжити?"
myread_yn ans
case "$ans" in
y|Y)
echo "Починаємо видалення squid..."
uninstall -y squid
rm -f /etc/squid/squid.conf
rm -f /etc/squid/internet_users
br
echo 'Squid був видалений'
wait
;;
esac 
;;
3) #Поміняти MTU для інтерфейсу
echo 'На якому інтерфейсі ви хочете поміняти mtu?'
read interface
echo 'Який mtu встановити?'
read mtu
mtu_change $interface $mtu
echo 'Для інтерфейсу '$interface' був успішно встановлений MTU '$mtu
wait
;;
4) #Відкрити файл налаштувань Squid
edit /etc/squid/squid.conf
;;
5) #Додати користувачів Proxy
br
installed httpd-tools
if [ $exist == false ]; then yum -y install httpd-tools; fi #встановлюємо утиліту htpasswd, якщо її немає
br
echo "Вкажіть логін користувача:"
read login
login_lower=$(echo $login | tr [:upper:] [:lower:]) #Перевели логін в нижній регстр, без цього авторизація взагалі не буде проходити
htpasswd /etc/squid/internet_users $login_lower 
br
echo "Користувач $login був успішно доданий у файл налаштувань"
wait
;;
6) #Відкрити файл з логінами/паролями користувачів Proxy
clear
br
echo "УВАГА! У цьому файлі містяться не паролі користувачів, а їх хеш-суми!"
echo "Редагувати паролі у файлі не можна! Ви можете відредагувати тільки логін."
echo "З цього файлу Ви можете просто подивитися які у Вас є користувачі і можете видалити когось."
echo "Для видалення користувача просто зітріть відповідний рядок і збережіть файл."
echo "Якщо потрібно змінити пароль просто створіть заново користувача з тим же логіном."
br
wait
edit /etc/squid/internet_users
;; 
7) #Перезапустити сервіс Proxy (Squid)
service squid restart
echo 'Готовий'
wait
;;
0)
chosen=0
;;
*)
echo "Неправильний вибір"
wait
;;
esac
;;
6) #Робота з файлами і програмами
chosen=6
clear
echo "$title"
echo "$menu6"
myread_dig pick
case "$pick" in
1) #Встановити яку-небудь програму
echo "Вкажіть назва пакету який потрібно встановити"
read answer
yum -y install $answer
br
echo "Готовий."
wait
;;
2) #Видалити будь-яку програму
echo "Вкажіть назва пакету який потрібно видалити"
read answer
yum erase $answer
br
echo "Готовий."
wait
;;
3) #Видалити будь-яку програму з усіма залежностями
#CentOS5
if [ $osver1 -eq 5 ]; then echo "Дана функція не підтримується на CentOS 5.x"; wait
else
echo "Вкажіть назва пакету який потрібно повністю видалити"
read answer
uninstall $answer
br
echo "Готовий."
wait 
fi
;;
4) #Подивитися скільки вільного місця на диску
br
df -h
br
wait 
;;
0)
chosen=0
;;
*)
echo "Неправильний вибір"
wait
;;
esac
;;
7) #Очищення системи
chosen=7
clear
echo "$title"
echo "$menu7"
myread_dig pick
case "$pick" in
1) #Очистити кеш yum
yum clean all
br
echo "Готовий."
wait
;;
2) #Видалити логи Apache, Nginx
echo "Увага! Будуть видалені всі архівні логи Apache і NginX, крім сьогоднішніх."
echo "Продовжити?"
myread_yn ans
case "$ans" in
y|Y)
rm -f -v /var/www/httpd-logs/*.gz
rm -f -v /var/log/nginx/*.gz
service httpd restart
service nginx restart
br
echo "Готовий."
wait 
;;
esac
;;
3) #Видалити логи Apache конкретного користувача
br
echo "Введіть логін ispmanager (зазвичай в нижньому регістрі!) для видалення його старих логів:"
read answer
rm -f /var/www/$answer/data/logs/*.gz
br
echo "Готовий."
wait
;;
4) #Подивитися скільки вільного місця на диску
br
df -h
br
wait 
;;
0)
chosen=0
;;
*)
echo "Неправильний вибір. Натисніть будь-яку клавішу, щоб продовжити."
wait
;;
esac
;;
8) #термінал
chosen=8
clear
echo '┌──────────┐'
echo '│ Термінал │'
echo '└──────────┘'
echo "Тут ви можете ввести будь яку команду, яку підтримує bash."
echo "Крім цього, підтримуються внутрішні команди $title"
echo 'Такі як: myinstall, uninstall, openport, changelog, updatescript, about та ін.'
echo 'Для виходу з терміналу наберіть "exit" або "quit".'
br
echo ", Введіть:"
read cmd
if [[ "$cmd" == "exit" || "$cmd" == "quit" ]]
then
chosen=0
else
br
$cmd
br
wait
fi
;;
9) #Оновити Breeze Easy Shell
echo "оновлюю..."
updatescript
repeat=false
sh $0
exit 0
;;
0)
repeat=false
;;
*)
echo "Неправильний вибір."
wait
;;
esac
done
echo "Скрипт очікувано завершив свою роботу."
clear


Все що вам потрібно, щоб його використовувати — це створити файл [назва].sh і засунути в нього вміст. Після чого запустити командою «sh [назва].sh». Створити його можна як на сервері, так і на своєму комп'ютері, а потім скопіювати на сервер. Я, наприклад, закинув її собі на домашній сервер і на кожному новому VPS вбиваю команду:

cd /root/
wget http://evtikhov.ru/breeze.sh -r -N -nd
cat >> /root/.bashrc <<END
alias breeze='cd /root/
sh breeze.sh'
END
exit

Після цього під рутом в терміналі однією командою «breeze» запускаю його.

P. S. Взагалі, частенько виникає питання довіри використання чужих скриптів і це правильно. Але принадність сценаріїв bash в тому, що перед їх запуском можна відкрити і подивитися його. І переконатися в тому, що він не робить нічого поганого. Функцію оновлення скрипта вас використовувати ніхто не змушує. Загалом-то, вас взагалі ніхто не змушує його використовувати. Завжди можна просто подивитися як налаштовується VPN, Proxy та інші речі і вручну вбити пару десятків команд, розібравшись у них. Велика кількість коментарів в коді навіть допоможе розібратися в них.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.