четверг, 6 декабря 2012 г.

Nginx SSL (https, авторизация клиентов)


Используем https на сайте:
listen 80;
listen 443 ssl;

ssl on;
ssl_certificate      /etc/pki/mail/server_legal.crt;
ssl_certificate_key  /etc/pki/mail/server_legal.key;

ssl_session_timeout 10m;
ssl_protocols   SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers   on;
Используем авторизацию на сайте по выданным клиентским сертификатам:
ssl                  on;                                                               
ssl_certificate      /etc/nginx/conf.d/ssl/server_legal.crt;
ssl_certificate_key  /etc/nginx/conf.d/ssl/server_legal.key;
ssl_client_certificate  /etc/nginx/conf.d/ssl/ca.crt;

ssl_session_timeout 10m;

ssl_protocols   SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers   on;

ssl_verify_depth 3;
ssl_verify_client   on;

Перенос roundcube на другой сервер (пустая адресная книга)

Делаем дамп базы:
mysqldump -qp roundcubemail > dump.sql

Создаем базу на другом сервере, добавляем пользователя и даем ему права
# mysql
> CREATE DATABASE roundcubemail /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost
IDENTIFIED BY 'password';
Старый пароль смотрим config/db.inc.php

Заливаем дамп:
# mysql -p roundcubemail < dump.sql

Копируем директорию roundcube на новый сервер.
Меняем адрес imap сервера в roundcubemail/config/main.inc.php
$rcmail_config['default_host'] = 'new server ip';

Чтобы не пропала адресная книга и подписи у пользователей, в mysql базе roundcubemail, меняем у пользователей mail_host на новый адрес imap сервера:
> USE roundcubemail;
> UPDATE users SET mail_host = 'new server ip' WHERE mail_host = 'old server ip';

проверяем что все ok:
> select user_id,username,mail_host from users order by user_id;

Обязательно необходим пакет php-xml, без него некоторые письма не открываются.
yum install php-xml

среда, 5 декабря 2012 г.

Sudo exec из php

Для выполнения кода на сервере, например такого:

Выполнение git pull из php скрипта:
<? php
exec('sudo -s username /usr/bin/git pull);
?>

Требуется, создать пользователя username, настроить для него git, добавить www-data в sudo:
$ vimsudo
www-data ALL = (username) NOPASSWD: /usr/bin/git pull, /bin/date, /usr/bin/tail, /usr/bin/rsync

htpasswd без apache (для nginx)


Иногда требуется создать .htpasswd для nginx, устанавливать apache для этого не требуется, достаточно выполнить в консоли:

printf "roman:$(openssl passwd -crypt 112233)\n"

Далее добавляем в nginx:

auth_basic "Mail Admin";
auth_basic_user_file /var/www/nginx.passwd;