четверг, 28 ноября 2013 г.

Недоступен веб сайт после обновления Ubuntu до версии 13.10


После обновления Ubuntu до версии 13.10 (посмотреть версию Ubuntu можно командой - lsb_release –a или cat /etc/lsb-release) мой локальный сайт atlant.test перестал открываться. Apache обновился до версии 2.4. Все виртуальные хосты Apache на обновленном Ubuntu стали не доступны. При входе на atlant.test показывает только страницу основного сервера.
Стал разбираться, что же произошло.
Cервер Apache запускается и работает.
$ ps aux |grep apache

Смотрю запущенную конфигурацию  Apache:
$ apache2ctl –S

- в конфигурации присутствует только default server

Смотрю наличие конфигурации моего сервера:
$ ls /etc/apache2/sites-available/


сравниваю его с резервной копией (пригодилась) - файл есть, содержимое не изменилось

Запускаю добавление сайта в конфигурацию Apache:
$ sudo a2ensite atlant.test
ERROR: Site atlant.test does not exist!

Ничего не понимаю. Что значит, нет сайта? Пошел искать на просторах интернета и нашел. Ситуация следующая:
В Apache 2.4 настройки из /etc/apache2/conf.d переместились в /etc/apache2/conf-available
Т.е. в Apache 2.4 нет каталога /etc/apache2/conf.d и если у вас, например был там httpd.conf, то надо все переместить этот файл в /etc/apache2/conf-available и потом применить конфигурацию командой
sudo a2enconf httpd

Теперь все файлы сайтов в /etc/apache2/sites-available/ должны иметь расширение .conf . С расширением, конечно, правильней смотрится, но почему нельзя было оставить и предыдущий синтаксис без .conf?
Переименовываю файл конфигурации моего сервера:
$ mv /etc/apache2/sites-available/atlant.test /etc/apache2/sites-available/atlant.test.conf

Добавляю сайт в конфигурацию Apache:
$ sudo a2ensite atlant.test

Получаю положительный ответ:
Enabling site atlant.test.
To activate the new configuration, you need to run:
  service apache2 reload

Перезапускаю apache:
$ sudo service apache2 reload
 * Reloading web server apache2
 

Если у вас много сайтов, которым нужно будет добавить расширение .conf, то вот вам команда:
sudo find /etc/apache2/sites-available/ ! -iname '*.conf' -type f -exec mv '{}' '{}'.conf \

После переименования захожу на сайт и опять сайт не доступен – не хватает прав
Forbidden
You don't have permission to access /accounts/login/ on this server.
________________________________________
Apache/2.4.6


Разбираюсь с правами на доступ к сайту. Изменилась конфигурация настройки доступа. Теперь вместо
<Directory /path/to/your/site/>
    order allow,deny
    allow from all
</Directory>

надо писать следующее:
<Directory /path/to/your/site/>
    Require all granted
</Directory>


У меня после внесенных изменений и перезапуска Apache все заработало. Если у вас все еще есть вопросы, то можете посмотреть документацию http://httpd.apache.org/docs/2.4/upgrading.html
 



среда, 27 ноября 2013 г.

Резервное копирование данных Linux



Имеется Linux Ubuntu компьютер, на котором расположен мой веб сайт на Django. Хочется иметь регулярные резервные копии на моем компьютере Windows, не зависимо от моего желания. Лучше один раз сделать автоматическое резервное копирование и спать спокойно.
В предыдущей статье я установил и настроил сервер ssh под Windows winSSHd и сделал авторизацию по ключу. Теперь остался финальный этап – резервное копирование (backup).
1.       Создал скрипт резервного копирования backup_web.sh в редакторе vim:
vi backup_web.sh
добавил содержимое
#!/bin/sh
NOW=$(date +"%Y-%m-%d ")
FILE=backup-www-$NOW.tar.gz
cd /home/django-projects/atlant/
# backup data from database
python manage.py dumpdata > db_atlant_back_server.json
WWW_BACKUP_DIR=/home/atlant/backup
cd $WWW_BACKUP_DIR
# copy apache and project directory
cp -r /etc/apache2 .
cp -r /home/django-projects .
tar zcf $FILE apache2 django-projects
# copy file to computer 192.168.10.222
scp -i /home/atlant/.ssh/sshkey-atlant $WWW_BACKUP_DIR/$FILE atlant@192.168.10.222:d:/arhiv/

сохранил и вышел из редактора vim
:wq

Что делает скрипт резервного копирования?
- выгружает базу данных в файл средствами django
python manage.py dumpdata > db_atlant_back_server.json
- копирует каталоги apache и моего проекта в архивный каталог
cp -r /etc/apache2 .
cp -r /home/django-projects .
- упаковывает в архив
tar zcf $FILE apache2 django-projects
- копирует архив на мой компьютер
scp -i /home/atlant/.ssh/sshkey-atlant $WWW_BACKUP_DIR/$FILE atlant@192.168.10.222:d:/arhiv/

2.       Сделал файл backup_web.sh исполняемым
chmod +x backup_web.sh

3.       Проверил работоспособность скрипта из командной строки
./backup_web.sh

4.       Установил запуск скрипта резервного копирования по расписанию.
За это в Linux отвечает crontab файл. Его я и буду редактировать. Ввожу команду, которая открывает файл в редакторе по умолчанию
crontab –e

Формат файла такой:
минуты     часы      день      месяц   день_недели    команда

Я добавил в конец файла следующую строку (запускает в 15.00 каждый день скрипт backup_web.sh):
0       15      *       *       *       /home/atlant/backup_web.sh

Сохраняю и выхожу в шел оболочку. Проверяю содержимое crontab командой
crontab l

Заметка. crontab доступен для любого пользователя, а не только для админов. Поэтому запускайте задачи резервного копирования по крону не стесняясь, пока к вам не придет письмо с угрозой приостановки вашего виртуального сервера за превышение лимита процессорного времени :)
Теперь жду выполнения скрипта резервного копирования в назначенное время и просматриваю логи командой:
grep CRON /var/log/syslog

Проверяю наличие резервной копии у себя на компьютере.
Все работает. Можно спать спокойно.
Осталось только периодически заходить и смотреть - как делаются резервные копии, ну и удалять старые.
Удалять старые резервные копии автоматом я не стал, потому что был опыт – старые резервные копии удалялись, а новые не создавались.

вторник, 26 ноября 2013 г.

Подключение с Linux на Windows по SSH используя winSSHd и ключ авторизации




Передо мной стояла задача – делать резервные копии накомпьютере с операционной системной Linux. Сделать то я сделал резервные копии, а что толку, если скопировать эту копию не могу, потому что у меня только один компьютер с Linux. Решил я делать копии на свой второй компьютер с операционной системой Windows7.  Можно конечно использовать ftp, но как то это несерьезно. Я буду использовать для копирования файлов с Linux на Windows - scp, который использует протокол SSH. Но вот беда, в ОС Windows нет встроенной поддержки ssh (пора бы уже пойти навстречу людям). Ну да ладно, есть сторонние производители разработчики ssh серверов.  В прошлой статье я установил ssh сервер – FreeSSHd (бесплатный). Для целей резервного копирования мне нужно использовать авторизацию по ключу, а на freeSSHd сервере, используя ключ авторизации, мне так и не удалось подключиться с Linux на Windows. Немного погуглив, я решил посмотреть на Bitvise SSH Server (он же winSSHd). В обзорах по ssh серверам для Windows я видел фразу напротив этого сервера – платный, поэтому и не использовал сразу. Так вот, я был приятно удивлен, когда решил посмотреть сколько стоит winSSHd. Оказывается, для некоммерческого использования – бесплатно. То что надо для моих целей.
Используя сервер winSSHd появляется возможность получить шифрованное подключение к Windows компьютеру, шифрованное копирование файлов и шифрованный туннель.

Установка и настройка сервера winSSHd
Скачать сервер winSSHd можно по этой ссылке http://dl.bitvise.com/BvSshServer-Inst.exe (размер файла 8,5Мб).
1.       Запускаю скачанный файл

В первом окне ставлю галочку в графе “I agree to accept all the terms of this License Agreement” (Лицензионное соглашение). Остальные пункты оставил не тронутыми. Продолжаю установку нажатием кнопки Install
2.       Следующее окно – выбор редакции:
- Standart Edition – полнофункциональная версия, ограниченная сроком работы в 30 дней, потом необходимо приобрести лицензию;
- Personal Edition – версия с ограниченными функциями, без ограничения срока работы, бесплатная, нельзя использовать в коммерческих целях
Ограничения по функциям в Personal Edition:
-          для авторизации используются только локальные пользователи Windows (не домен);
-          можно настраивать только одну Windows группу (Everyone);
-          можно настраивать только одну виртуальную группу;
-          ограничение в 10 учетных записей Windows;
-          ограничение в 10 виртуальных учетных записей;
-          GSSAPI (Kerberos и NTLM) аутентификация выключена

Меня устаивает Personal edition, там я и ставлю галочку и нажимаю ОК для продолжения.
В консольном окне выводится процесс установки


3.       Установка завершена


4.       После нажатия кнопки ОК появляется окно Bitvise SSH Server Easy Settings
На первой вкладке Server Settings я указал:
- использовать IP version for listening port Ipv4 (использовать протокол IP четвертой версии). Пока 6 версия у меня в локальной сети не используется.
- Open Windows Firewall – Open port(s) to local network

На второй вкладке Windows accounts:
-          убрал галочку Allow login to any Windows account (разрешить подключение по любой учетной записи Windows). У меня аутентификация будет по ключу.
-          если есть необходимость заходить под пользователем windows, то нажимаем кнопку Add

Нажимаем кнопку lookup чтобы выбрать учетную запись пользователя Windows, которому хотим предоставить удаленный доступ к компьютеру по протоколу ssh. Проставляем (оставляем) галочки на функциональные возможности доступа:
- login allowed (разрешить подключение)
- Public keys (можно сделать авторизацию по ключу). Если нужно нажимаем Public keys и импортируем публичный ключ для этой учетной записи
- Allow file transfer (разрешить передачу файлов)
- Allow terminal (разрешить терминал) – если просто, то разрешить доступ к командному окну (cmd.exe)
- Allow port forwarding (разрешить проброс портов)
- Virtual filesystem layout (права доступа к системе при подключении)

На третьей вкладке Virtual accounts:


-          я создаю учетную запись для подключения по ключу нажимаю кнопку Add
-          предварительно создаю ключ (процесс создания ключа описан здесь – Создание ключа ssh на Linux ) и копирую с помощью winscp созданный публичный ключ sshkey-atlant.pub на компьютер, где установлен winSSHd
-          В окне Adding new entry to Simplified virtual accounts создаю учетную запись для доступа


В поле Virtual account name вбиваю логин пользователя atlant и ставлю галочку напротив Allow terminal (дам возможность себе подключаться к консоли Windows компьютера по ssh)
Нажимаю кнопку Public keys, для добавления ранее созданного публичного ключа


далее нажимаю кнопку Import и указываю файл ключа (это тот файл с расширение .pub, который я загрузил)
- в окнах нажимаю кнопки Close -> OK -> Save changes -> Save settings and start server -> Start server
5.       При настройке winSSHd стояла галочка с разрешением внести изменения в брандмауэр (файервол), но все равно надо добавить правило для доступа к моему компьютеру по ssh, иначе не пустит
- Захожу в настройки брандмауэра и добавляю правило – нажимаю Создать правило


- выбираю Тип правила – Для порта


- Протокол TCP, порт 22


- Разрешить подключение


- далее выбираем профили брандмауэра, для которых будет применяться это правило (я оставил все)
- задаем имя правила (я назвал ssh)

6.       На линукс компьютере запускаю подключение к ssh серверу
ssh -v -i /home/atlant/.ssh/sshkey-atlant atlant@192.168.10.222
где
/home/atlant/.ssh/sshkey-atlant – ключ который я создал
atlant@192.168.10.222 – имя пользователя на сервере winSSHd и ip адрес сервера winSSHd
-v – запуск ssh в режиме отладки

В процессе подключения выдается сообщение, на которое надо ответить - yes
Are you sure you want to continue connecting (yes/no)? yes
Это согласие на то, что я доверяю этому серверу

7.       У меня все отработало корректно и я получил доступ к командному окну Windows

Подведу итог: Для частного (не коммерческого) использования можно использовать winSSHd сервер бесплатно. Удалось организовать подключение Linux Windows с использованием ключа и протокола ssh. Теперь возможно делать полноценные резервные копии с Linux на Windows использую scp.