Seafile + Nginx + SSL

Nginx

# vi /etc/nginx/sites-available/seafile

server {
    listen 80;
    server_name seafile.tst-amo.net.ua;
    server_tokens off;
    
    location /seafile {
      rewrite ^ https://$http_host$request_uri? permanent; # force redirect http to https
    }
}

server {
    listen 443 ssl http2;
    server_name seafile.tst-amo.net.ua;
    server_tokens off;

    root /home/www/seafile;

# Let'sCript
include acme.conf;
include /etc/nginx/conf.d/hsts.conf;
include /etc/nginx/conf.d/ssl.conf;

     location / {
         proxy_pass http://127.0.0.1:8999;
         proxy_set_header Host $host;
         proxy_connect_timeout 36000s;
         proxy_read_timeout 36000s;
         proxy_send_timeout 36000s;
         send_timeout 36000s;

         # used for view/edit office file via Office Online Server
         client_max_body_size 0;
         
         access_log /var/log/nginx/seahub.access.log;
         error_log /var/log/nginx/seahub.error.log;
       }

     location /seafhttp {
         rewrite ^/seafhttp(.*)$ $1 break;
         proxy_pass http://127.0.0.1:8082;
         client_max_body_size 0;
         proxy_connect_timeout 36000s;
         proxy_read_timeout 36000s;
         proxy_send_timeout 36000s;
         send_timeout 36000s;
         proxy_request_buffering off;
         proxy_http_version 1.1;
      }

     location /seafmedia {
         rewrite ^/seafmedia(.*)$ /media$1 break;
         root /home/www/seafile/seafile-server-latest/seahub;
      }

     location /seafdav {
         proxy_pass http://127.0.0.1:8080;
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Forwarded-Host $server_name;
         proxy_set_header X-Forwarded-Proto https;
         proxy_http_version 1.1;
         proxy_connect_timeout 36000s;
         proxy_read_timeout 36000s;
         proxy_send_timeout 36000s;
         send_timeout 36000s;

         # This option is only available for Nginx >= 1.8.0.
         client_max_body_size 0;
         proxy_request_buffering off;

         access_log /var/log/nginx/seafdav.access.log;
         error_log /var/log/nginx/seafdav.error.log;
       }
}
# ln -s /etc/nginx/sites-available/seafile /etc/nginx/sites-enabled
# nginx -t
# nginx -s reload

Letsencrypt

Добавляем сертификат для субдомена, проверяем:

# certbot certonly --dry-run -d tst-amo.net.ua -d www.tst-amo.net.ua -d mail.tst-amo.net.ua -d cloud.tst-amo.net.ua -d seafile.tst-amo.net.ua

Если все нормально выполняем без –dry-run:

# certbot certonly -d tst-amo.net.ua -d www.tst-amo.net.ua -d mail.tst-amo.net.ua -d cloud.tst-amo.net.ua -d seafile.tst-amo.net.ua

Seafile

Внесем правки в наши конфиги. У меня владелец nginx:www-data, поэтому гружусь под ним (предварительно поправив vipw)

# su nginx
$ vi /home/www/seafile/conf/ccnet.conf
[General]
#SERVICE_URL = http://192.168.1.41/
SERVICE_URL = https://seafile.tst-amo.net.ua/
$ vi /home/www/seafile/conf/gunicorn.conf.py
...
# default localhost:8000
bind = "127.0.0.1:8999"
$ vi /home/www/seafile/conf/seahub_settings.py 
FILE_SERVER_ROOT = 'https://seafile.tst-amo.net.ua/seafhttp'
$ cd /home/www/seafile/seafile-server-latest
$ ./seafile.sh restart
$ ./seahub.sh restart 8999

Возможно понадобится очистить /tmp/seahub_cache.

Проверяем:

https://seafile.tst-amo.net.ua
image_pdfimage_print

Seafile – облачное хранилище

Доустановим нужные компоненты:

# yum install python3 python3-setuptools python3-pip python3-devel mysql-devel gcc
# pip3 install --timeout=3600 Pillow pylibmc captcha jinja2 sqlalchemy==1.4.3 django-pylibmc django-simple-captcha python3-ldap mysqlclient

Скачиваем нужную версию под свою систему. Я буду ставить последнюю свежую версию 8.0.7 64bit на CentOS 7.9

# mkdir /home/www/seafile
# chown nginx:www-data /home/svm/seafile
# wget https://s3.eu-central-1.amazonaws.com/download.seadrive.org/seafile-server_8.0.7_x86-64.tar.gz
# cd /home/www/seafile 
# tar xf seafile-server_8.0.7_x86-64.tar.gz
# tree -L 2 . 
├── seafile-server-8.0.7 
│   ├── check_init_admin.py 
│   ├── reset-admin.sh 
│   ├── runtime 
│   ├── seaf-fsck.sh 
│   ├── seaf-fuse.sh 
│   ├── seaf-gc.sh 
│   ├── seafile 
│   ├── seafile.sh 
│   ├── seahub 
│   ├── seahub.sh 
│   ├── setup-seafile-mysql.py 
│   ├── setup-seafile-mysql.sh 
│   ├── setup-seafile.sh 
│   ├── sql 
│   └── upgrade 

Создаем пользователя MySQL и три базы данных для требуемых компонентов облака Seafile:

  • ccnet server
  • seafile server
  • seahub
# cd /home/www/seafile/seafile-server-8.0.7
# sh setup-seafile-mysql.sh

Если все нормально установилось, запускаем:

# ./seafile.sh start
# ./seahub.sh start

Мне пришлось изменить порт по умолчанию с 8000 на 8999, так как на нем висел ice. Это можно сделать:

# vi /home/www/seafile/conf/gunicorn.conf.py
# default localhost:8000
#bind = "127.0.0.1:8000" 
bind = "0.0.0.0:8999"

И перезапускаем:

# ./seafile.sh restart
# ./seahub.sh restart 8999

Теперь можно логиниться в браузере по адресу, который мы прописывали при запуске скрипта установки:

http://192.168.1.41:8999

https://manual.seafile.com/deploy/using_mysql/

image_pdfimage_print

Roundcube – ident_switch plugin, плагин для мультивхода

Пользователи которые ведут несколько аккаунтов одновременно, попросили добавить в Roundcube возможность переключаться между ними в одной сессии. Так как им нужно для этого или разлогиниться или держать второй браузер.

Качаем и распаковываем:

wget https://bitbucket.org/BoresExpress/ident_switch/get/ca790d72deb2.zip

Смотрим пароль для базы, если не помним:

# cat /usr/local/www/roundcube/config/config.inc.php
$config['db_dsnw'] = 'mysql://_user_:_password_@localhost/_DB_';

Создаем таблицу в БД roundcubemail:

# mysql -u _user_ -p _DB_ < /usr/local/www/roundcubemail/plugins/ident_switch/SQL/mysql.initial.sql

В Roundcube добавляем ident_switch в активные плагины:

# ee /usr/local/www/roundcube/config/config.inc.php
// List of active plugins (in plugins/ directory)
$config['plugins'] = array(
   'archive',
   'additional_message_headers',
   'managesieve',
   'markasjunk',
   'thunderbird_labels',
   'password',
   'newmail_notifier',
   'userinfo',
   'zipdownload',
   'ident_switch'
);

Дальше идем в Настройки–>Профиль–>Добавить профиль.

Заполняем обязательные поля и не забываем включить плагин:

Поле “Авторизация” всегда выставляет “Как IMAP”, но при этом если выбрать значение “Нет” и сохранить, то в БД попадет значение “2” (IMAP – 1), т.е. оно работает, при этом показывая “Как IMAP”.

Все. Теперь удобно переключатся между профилями выбирая вверху нужный.

image_pdfimage_print

Samba – разные права доступа к субдиректориям

Возникла задача дать всем доступ к корневой папке и выборочный к субдиректориям. Схема такая:

dir – folder1, folder2

Дописываем в /etc/samba/smb.conf такие настройки:

[dir]
  comment = dir
  path = /home/dir
  read only = no
  valid users = @sambagroup
  force group = +sambagroup
  create mask = 0660
  force create mode = 0110
  directory mask = 0770
  writable = yes
  browseable = yes

[folder1]
  comment = folder1
  path = /home/dir/folder1
  read only = no
  valid users = @user_folder1
  force group = +user_folder1
  browseable = no

[folder2]
  comment = folder2
  path = /home/dir/folder2
  read only = no
  valid users = @user_folder2
  force group = +user_folder2
  browseable = no

У нас есть три группы пользователей: sambagroupusers_folder1 и users_folder2.
Пользователям, например, user1 и user2 разрешено пользоваться только директорией users_folder1, а пользователям user3, user4 — только users_folder2. Пути в эти субдиректории лежат через dir (/home/dir), поэтому все пользователи включены в отдельную группу sambagroup.

Создаем эти группы и пользователей:

useradd -M -s /sbin/nologin user1
groupadd users_folder1
usermod -aG users_folder1 user1
usermod -aG sambagroup user1

useradd -M -s /sbin/nologin user2
groupadd users_folder1
usermod -aG users_folder1 user2
usermod -aG sambagroup user2

useradd -M -s /sbin/nologin user3
groupadd users_folder2
usermod -aG users_folder2 user3
usermod -aG sambagroup user3

useradd -M -s /sbin/nologin user4
groupadd users_folder2
usermod -aG users_folder2 user4
usermod -aG sambagroup user4

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

# testparm
# systemctl restart smbd
# systemctl restart nmbd

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

# chown root:everybody /home/dir
# chmod 770 /home/dir
# chown root:users_folder1 /home/dir/folder1
# chmod 2770 /home/dir/folder1
# chown root:users_folder2 /home/dir/folder2
# chmod 2770 /home/dir/folder2

Права при создании файлов и субдиректорий во внутренних папках folder1 и folder2 наследуются из прав, прописанных в секции [dir] для родительской папки. Более того, их уже не обязательно явно указывать в подсекциях [folder1] и [folder2] — они просто игнорируются.

Права 2770, выставленные на папки folder1 и folder2 гарантируют, что все файлы и подпапки, находящиеся в них, будут всегда создаваться с соответствующими подгруппами этих родительских папок, что предоставляет пользователям подгрупп полный доступ к любым документам и подпапкам, даже если они созданы другими пользователями.

Директива force create mode = 0110 необходима для того, чтобы дополнительно выставить на вновь создаваемые файлы executable бит для владельца и группы, который не выставляется директивой create mask. Директива force create mode действует по принципу ИЛИ с основной маской доступа, и выставляет бит в том случае, если он не выставлен директивой create mask.

Директива force group = +подгруппа запрещает доступ к папкам всем, кто не входит в эту подгруппу.

Директива writable = yes в главной секции разрешает запись в основную папку dir, но в то же время жёстко задаёт права записи и в подпапки этой папки, которые невозможно переопределить во внутренних секциях. Это странное наследование правил записи разрешает запись в подпапках folder1 и folder2 только в том случае, если вы пришли к ним через родительскую папку dir. Если же попытаться обратиться к подпапкам напрямую, то они окажутся доступными только для чтения и даже уполномоченные пользователи подгрупп ничего не смогут сделать с содержимым этих подпапок.

image_pdfimage_print

PuTTY – перенос настроек

Ветка реестра с настройками Putty

[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY]

Для переноса настроек Putty действуем как обычно — находим ветку реестра, экспортируем, переносим reg-файл на нужный компьютер и импортируем.

Также понадобится перенести файл *.ppk

c:\Program Files\PuTTY\

Перенесутся все сессии, ключи и пароли.

image_pdfimage_print

Временные параметры файла для утилиты find – atime, mtime, ctime

atime — время последнего ДОСТУПА к файлу (например, чтение, исполнение). Можно увидеть командой ls -lu

mtime — время последнего изменения файла (его содержимого). Можно увидеть командой ls -l

ctime — время последнего изменения прав доступа или владельца. Можно увидеть командой ls -lc

Количество времени измеряется в днях.

 

image_pdfimage_print

Mikrotik – NAT, DHCP, Firewall, L2TP

Шаги c 5 по 8 касаются VPN:

  1. IP — Address List
  2. IP– Pool
  3. IP — DHCP Server — Network, DHCP
  4. IP — Firewall — NAT
  5. IP –Poll
  6. PPP — Profiles — Secrets, L2TP Server
  7. IP — Firewall
  8. Interfaces — Interface List — LAN (proxy-arp)

Address List

где – ether1 это WAN, ether2 – LAN.

Pool

DHCP Network

DHCP Server

Firewall NAT

VPN L2TP

Pool

PPP Profiles

Secrets

L2TP Server

Firewall

Interfaces

 

image_pdfimage_print

VPN L2TP

IP Pool

Выделим всех клиентов, подключаемых по VPN в отдельный пул адресов. Так проще будет настроить маршрутизацию и правила межсетевого экрана, при необходимости.

PPP профиль настройки

Перейдём на вкладку Profiles и добавим новый профиль. Зададим имя для удобства. Не мудрствуя лукаво, я просто оставил L2TP. А также указал локальный и удалённый адреса из нашего пула (по счастливой случайности он так же называется L2TP).

Я также отметил возможность изменять максимальный размер сегмента TCP (опция Change TCP MSS). Есть подозрение, что это поможет избежать фрагментацию сегментов.

Секреты

Под секретом в данном случае понимаются учётки VPN-юзеров. Заходим также в раздел PPP, на вкладку Secrets и под каждого пользователя создаём свой секрет. В качестве сервиса выбираем l2tp, а в качестве профиля – созданный на шаге № 2 профиль PPP.

Сервер L2TP

Здесь просто убедимся, что у нас запущены соответствующие сервисы.  Заходим в L2TP Server и убеждаемся в наличии соответствующих настроек:

Нужно указать ключ в поле IPsec Secret.

Файрволл

На сетевом экране IP – Firewall необходимо открыть следующие порты (цепочка input – входящий): протокол udp, порты 500, 4500, 1701.

Groups

Добавим свою групу в IP — IPSec — Groups:

 

image_pdfimage_print

VPN PPTP

Идем в меню PPP, заходим на вкладку Interface, вверху в перечне вкладок находим PPTP сервер и ставим галочку в пункте Enabled. Снимаем галочки с наименее безопасных алгоритмов идентификации – pap и chap.

Создаем логин и пароль, который будет использовать пользователь для подключения к туннелю. В поле Service выбираем тип нашего протокола – pptp, в поле Local Address пишем IP-адрес роутера MikroTik (192.168.1.231), который будет выступать в роли VPN-сервера, а в поле Remote Address – IP-адрес пользователя (10.10.88.111)

Нам нужно открыть 1723 порт для трафика по TCP-протоколу для работы VPN-туннеля MikroTik, а также разрешить протокол GRE. Для этого идем в раздел IP, потом – в Firewall, потом на вкладку Filter Rules, где с помощью кнопки “+” добавляем новое правило. В поле Chain указываем входящий трафик – input, в поле Protocol выбираем протокол tcp, а в поле Dst. Port – указываем порт для VPN туннеля 1723.

Точно также добавляем правило для GRE. На вкладке General аналогично предыдущему прописываем input, а в поле Protocol выбираем gre.

Если при подключении необходимо видеть локальную сеть за маршрутизатором, нужно включить proxy-arp в настройках локальной сети. Для этого идем в раздел интерфейсов (Interface), находим интерфейс, соответствующий локальной сети (ether2) и на вкладке General в поле ARP выбираем proxy-arp.

image_pdfimage_print

ARJ архиватор для Windows x64

После апгрейда парка ПК и соответственно Windows, BUXIN требующая arj.exe для обновления и формирования отчетов перестала работать вызывая ошибку, что приложение 16 битное и оно не может работать в этой операционке.

Зашел на сайт www.arjsoftware.com скачал последнюю версию программы. Но при запуске она говорила что нужна более новая версия программы и регистрация. При этом наблюдались дичайшие паузы в работе архиватора. Погуглив, обнаружил сайт, на котором автор объяснил, что это такая ее защита. Пользоваться конечно невозможно ибо секундные операции растягивались на несколько минут, причем с каждым разом они становились длиннее. Там же предлагалось лекарство. Чем и воспользовался.

Скачиваем архив и следуем инструкции в нем. После регистрации копируем ARJ32.EXE в директорию с BUXIN и переименовываем файл ARJ32.EXE в ARJ.EXE.

 

image_pdfimage_print