пятница, 21 января 2011 г.

Скрипт для добавления сайтов Apache в Ubuntu 10.10

 

В связи с частой потребностью добавлять новые удалять старые сайты, надоело постоянно создавать все каталоги и новые файлы вручную. Следовательно был написан простенький скрипт, сводящий эту процедуру к вызову данного файла и ввода имени сайта.

Итак, скрипт для добавления:

#!/bin/sh

echo --------------------------
echo "Добавление нового сайта "
echo --------------------------

echo –n "Введите имя сайта: "

#Ждем ввода  имени сайта
read SITE

DIR="/var/www/$SITE"

#Проверяем существования такого каталога

if [ -d $DIR ]
then
echo "Такой сайт уже существует "
exit 1
fi

FILE="/etc/apache2/sites-available/$SITE"

#Создаем файл с настройками из копии исходного
cp /etc/apache2/sites-available/default $FILE

#Делаем ссылку на наш файл
ln -s $FILE /etc/apache2/sites-enabled/$SITE

#Редактируем наш файл. Заменяются стандартные имена и пути
sed -i "s/*/$SITE/" $FILE
sed -i "/<VirtualHost $SITE:80>/i NameVirtualHost $SITE:80" $FILE
sed -i "s/default/$SITE/g" $FILE
sed -i "s/webmaster@localhost/webmaster@$SITE/" $FILE
sed -i "/DocumentRoot \/var\/www\/$SITE/i ServerAlias www.$SITE" $FILE
sed -i "/ServerAlias www.$SITE/i Servername $SITE" $FILE

#Создаем необходимые каталоги

mkdir $DIR
mkdir $DIR/cgi-bin

#Меняем их владельца
chown -R www-data:www-data /var/www/$SITE

#Включаем сайт
a2ensite $SITE

#Добавляем наш сайт в хосты

echo "127.0.0.1 $SITE" >> /etc/hosts

#Копируем тестовый файл проверки работы веб-сервера

cp /var/www/default/index.html $DIR/index.html

#Перезапускаем веб-сервер

/etc/init.d/apache2 reload

 

Делаем скрипт исполняемым, и помещаем в папку /sbin. Оеперь достаточно набрать имя файла и после запроса ввести имя нового сайта.

Теперь скрипт для удаления. Здесь все еще проще.

#!/bin/sh

echo "Удаление сайта"
echo -n "Введите имя сайта : "

read SITE

DIR="/var/www/$SITE"

if [ -d $DIR ]
then

a2dissite $SITE

rm -r  $DIR
rm /etc/apache2/sites-available/$SITE

sed -i "/127.0.0.1 $SITE/d" /etc/hosts

/etc/init.d/apache2 reload

echo "Сайт $SITE был успешно удален"
exit 1

else

echo "Сайта $SITE нет на сервере"
exit 1
fi

 

С этим скриптом поступаем аналогично первому. Работает точно так же. Запускаем файл, вводим имя удаляемого сайта.

Со временем я решил усовершенствовать эти скрипты и объединил их в один. Получилось вот такое:

#!/bin/sh

#Функция добавления

add_site()
        {
        echo "Добавление нового сайта "
        sleep 1
        echo -n  "Введите имя сайта: "
        #Ждем ввода  имени сайта
        while read SITE
        do
        if
                [ "$SITE" != "" ]
        then
        DIR="/var/www/$SITE"
        FILE="/etc/apache2/sites-available/$SITE"

                if
                        [ -d $DIR ]
                then
                        echo "Такой сайт уже существует "
                        exit 1
                else

                #Создаем файл с настройками из копии исходного
                cp /etc/apache2/sites-available/default $FILE
                ln -s $FILE /etc/apache2/sites-enabled/$SITE

               #Редактируем наш файл
                sed -i "s/*/$SITE/" $FILE
                sed -i "/<VirtualHost $SITE:80>/i NameVirtualHost $SITE:80" $FILE
                sed -i "s/default/$SITE/g" $FILE
                sed -i "s/webmaster@localhost/webmaster@$SITE/" $FILE
                sed -i "/DocumentRoot \/var\/www\/$SITE/i ServerAlias www.$SITE" $FILE
                sed -i "/ServerAlias www.$SITE/i Servername $SITE" $FILE

                #Создаем необходимые каталоги
                mkdir $DIR
                mkdir $DIR/cgi-bin

                #Меняем их владельца
                chown -R www-data:www-data $DIR

                #Включаем сайт
                a2ensite $SITE >> /dev/null 2>&1

                #Добавляем наш сайт в хосты
                echo "127.0.0.1 $SITE" >> /etc/hosts
                cp /var/www/default/index.html $DIR/index.html
                /etc/init.d/apache2 restart  >> /dev/null 2>&1
                echo "Сайт $SITE успешно добавлен"
                exit 0
                fi
        fi
        echo "Вы не ввели название."
        echo -n  "Введите имя сайта или ^Z для выхода: "
        done
        }

#Функция удаления

rm_site()
        {
        echo "Удаление сайта"
        sleep 1
        echo -n  "Введите имя сайта: "
        while read SITE
        do
        if
                [ "$SITE" != "" ]
        then
                DIR="/var/www/$SITE"
                FILE="/etc/apache2/sites-available/$SITE"

                if
                        [ -d $DIR ]
                then
                        a2dissite $SITE >>/dev/null 2>&1

                      #Удаляем каталоги и файлы
                        rm -r  $DIR
                        rm /etc/apache2/sites-available/$SITE
                        sed -i "/127.0.0.1 $SITE/d" /etc/hosts
                        /etc/init.d/apache2 reload >> /dev/null 2>&1
                        echo "Сайт $SITE был успешно удален"
                        exit 0
                else
                echo "Сайта $SITE нет на сервере"
                exit 1
                fi
        fi
        echo "Вы не ввели название."
        echo -n  "Введите имя сайта или ^Z для выхода: "
        done
        }

 

#Проверяем права пользователя 

  if
                [ $(whoami) != "root" ]
        then
                echo 'You must be root.'
                exit 1
        fi

#Процедура добавления удаления 

        if
                [ "$1" = "" ]
        then

         #Если запустили без параметров
        echo "Неверный параметр. "

        echo "Используйте add для добавления и remove для удаления"
        exit 1
        else
                case $1 in
                add)
                add_site #
Добавляем сайт
                ;;
                remove)
                rm_site #
Удадяем сайт
                ;;
                esac
        fi

 

Называем наш файл site, помещаем в папку /sbin, делаем исполняемым. Запускать его нужно с параметрами:

site add – для добавления сайта;

site remove – для удаления.

понедельник, 10 января 2011 г.

Установка и настройка LAMP (Linux+Apache+Mysql+Php) в Ubuntu.

 

Установка довольно проста. Все что нужно это несколько пакетов:

sudo apt-get install apache2 php5 php5-mysql mysql-server-5.1 phpmyadmin

В процессе установки нужно будет ответить на ряд простых вопросов и задать пароли для mysql.

По окончании набираем в адресной строке браузера localhost, если появилась надпись "It works!", значит все норм, и веб-сервер работает.

в конфигурационном файле php /etc/php5/apache2/php.ini изменим следующую опцию:

magic_quotes_gpc = Off

Для проверки работоспособности создаем файл /var/www/test.php со следующим содержанием:

<?php
phpinfo()
?>

В браузере набираем localhost/test.php если все работает то должна появится информация о php.

Работоспособность phpmyadmin проверяем набрав в адресной строке браузера http://localhost/phpmyadmin/

После того как все установлено и работает займемся виртуальными хостами. Управление виртуальными хостами в Apache организовано достаточно просто, – в /etc/apache2/sites-available помещаем файл с описанием, а командой a2ensite с названием файла его включаем. Но сначала нужно создать файл с описанием виртуального хоста

В sites-available уже находится файл default, который описывает узел по умолчанию. Его можно использовать как шаблон (этот же узел будет отвечать, если к серверу обратиться по IP-адресу, а не по имени):

 

sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/site.com

Теперь можно активировать сайт 

 

a2ensite site.com

Вышеуказанная команда помещает ссылку на наш файл etc/apache2/sites-available/site.com в каталог sites-enabled. Вместо нее можно было просто создать ссылку следующей: 

 

sudo ln –s /etc/apache2/sites-available/site.com /etc/apache2/sites-enabled/site.com

Во так должен выглядеть наш файл:

 

<VirtualHost *:80>
        ServerAdmin
webmaster@site.com

        DocumentRoot /var/www/site.com
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/site.com>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "
/var/www/site.com/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

В файл httpd.conf  добавим следующую строку:

 

ServerName localhost

Смотрим, с правами какого пользователя работает веб-сервер (в Ubuntu эти данные вынесены в отдельный файл):

 

cat /etc/apache2/envvars

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Создаем каталог, в котором будут находиться файлы сервера, устанавливаем его владельцем учетную запись www-data и включаем новый сайт:

 

sudo mkdir /var/www/site.com
sudo mkdir /var/www/site.com/cgi-bin
sudo chown www-data:www-data /var/www/site.com
sudo a2ensite site.com

В завершение заносим данные об имени компьютера в /etc/hosts, перезапускаем веб-сервер и пробуем зайти на site.com.

четверг, 6 января 2011 г.

Установка и настройка DNS сервера Bind9 в Ubuntu.


В интернете имеется достаточно мануалов на данную тему, но пытаясь настроить по ним DNS сервер я столкнулся с рядом проблем, поэтому была написана данная статья с собственными рабочими настройками.

Устанавливаем bind:

#apt-get install bind9

Основные файлы конфигурации находятся в папке /etc/bind.

Если нам нужно чтобы наш сервер был кеширующим то добавляем в файл /etc/bind/named.conf.options следующую запись:

forwarders

{

0.0.0.0;

0.0.0.0;

};

0.0.0.0  заменяете на адреса основного DNS сервера.

Параметр listen-on указывает какой адрес должен прослушивать сервер, по умолчанию стоит any, но при желании можно изменить:

listen-on { 127.0.0.1; 86.111.91.19; };

Если у нас будет своя доменная, например example.com, то приступим к ее настройке.

Создадим файл /etc/bind/myzones.conf

В конец файла /etc/bind/named.conf добавим строку:

include "/etc/bind/myzones.conf";

Отредактируем файл с нашими зонами /etc/bind/myzones.conf и добавим туда новую запись:

zone "example.com"

{

type master;

file "/etc/bind/db.example";

};

Файл /etc/bind/db.example хранит настройки отдельной зоны. Создадим его и добавим следующую запись:

$TTL 86400 ; (1 day)

@ IN SOA localhost. root.localhost.(

2011010601 ; Serial

10800 ; Refresh(3 hours)

900 ; Retry (15 minutes)

604800 ; Expire (1 week)

86400 ; Negative Cache TTL (1 day)

);

@ IN NS localhost.

@ IN A 86.111.91.19

www IN CNAME example.com.

Здесь важно точно расставить все знаки - после доменных имен обязательно должны стоять точки.

Перезапускаем сервер:

#rndc reload

И проверяем

# nslookup

> example.com

Server: 127.0.0.1

Address: 127.0.0.1#53

Name: example.com

Address: 86.111.91.19

Основная настройка завершена, все должно работать.

Но еще остается вопрос безопасности. Чтобы обезопасить себя, желательно изменить рабочие папки сервера.

Останавливаем процесс:

#/etc/init.d/bind9 stop

Отредактируем файл /etc/default/bind9. Строку

OPTIONS="-u bind"

Заменим на

OPTIONS="-u bind -t /var/lib/named"

Создадим новые директории:

#mkdir -p /var/lib/named/etc

#mkdir /var/lib/named/dev

#mkdir -p /var/lib/named/var/cache/bind

#mkdir -p /var/lib/named/var/run/bind/run

Переместим основной каталог с конфигурацией в новый:

#mv /etc/bind /var/lib/named/etc

Создадим символическую ссылку на новую директорию на случай обновления:

ln -s /var/lib/named/etc/bind /etc/bind

Создадим девайсы и выставим права на директории:

#mknod /var/lib/named/dev/null c 1 3

#mknod /var/lib/named/dev/random c 1 8

#chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random

#chown -R bind:bind /var/lib/named/var/*

#chown -R bind:bind /var/lib/named/etc/bind

Что бы не возникло проблем с доступом необходимо изменить файл /etc/apparmor.d/usr.sbin.named перед этим остановив сервис

/etc/init.d/apparmor stop

Старые пути к каталогам заменяем на новые. Вот так он выглядит после редактирования:

# vim:syntax=apparmor

# Last Modified: Fri Jun 1 16:43:22 2007

#include

/usr/sbin/named {

#include

#include

capability net_bind_service,

capability setgid,

capability setuid,

capability sys_chroot,

capability sys_resource,

# /etc/bind should be read-only for bind

# /var/lib/bind is for dynamically updated zone (and journal) files.

# /var/cache/bind is for slave/stub data, since we're not the origin of it.

# See /usr/share/doc/bind9/README.Debian.gz

#/etc/bind/** r, старый путь

/var/lib/named/etc/bind** r, #новый путь

/var/lib/bind/** rw,

/var/lib/bind/ rw,

/var/cache/bind/** rw,

/var/cache/bind/ rw,

# gssapi

/etc/krb5.keytab kr,

/var/lib/named/etc/bind/krb5.keytab kr,

# ssl

/etc/ssl/openssl.cnf r,

# dnscvsutil package

/var/lib/dnscvsutil/compiled/** rw,

/proc/net/if_inet6 r,

/proc/*/net/if_inet6 r,

/usr/sbin/named mr,

/var/lib/named/var/run/named/named.pid w,

/var/lib/named/var/run/named/session.key w,

# support for resolvconf

/var/run/named/named.options r,

# some people like to put logs in /var/log/named/ instead of having

# syslog do the heavy lifting.

/var/log/named/** rw,

/var/log/named/ rw,

}

Запускаем сервисы:

# /etc/init.d/apparmor start

# /etc/init.d/bind9 start

Все должно работать.