Вы можете настроить сервер авторизации, чтобы организовать доступ технической поддержке к панелям управления. Для обеспечения безопасности рекомендуем использовать для этих целей отдельный сервер.
Подготовка сервера состоит из двух этапов:
- Настройка доступа к панели управления.
- Настройка доступа к SSH.
В статье приведён рекомендуемый вариант установки на ОС Debian 8 Jessie. Для других ОС порядок установки и запуска будет отличаться. Вместо скриптов ISPsystem вы можете использовать собственные.
Рекомендуем настроить на сервере авторизации файрвол. В настройках файрвола разрешите входящие подключения только для сети поддержки.
Настройка доступа к панели управления
-
Создайте пользователя goserver для доступа к панели управления:
adduser --disabled-password --gecos "" goserver
- Скачайте скрипты из репозитория ISPsystem в директорию этого пользователя. Например, это можно сделать с помощью git:
-
Установите git:
apt-get update && apt-get -y install git
-
Скачайте репозиторий:
git clone https://github.com/ispsystem/login-server /home/goserver/login-server
-
-
Установите пакеты для запуска скриптов:
apt-get -y install python-yaml python-paramiko gunicorn python-virtualenv gcc python-dev
Обратите внимание!Пакеты gcc и python-dev нужны для установки модуля gevent через pip. Версия gevent из репозитория debian может вызвать проблемы с работой SSL. -
Чтобы установленные модули не мешали работе ОС, создайте виртуальное окружение:
virtualenv /home/goserver/venv
-
Установите в созданном окружении нужные пакеты:
/home/goserver/venv/bin/pip install gevent ipaddress
-
Сгенерируйте SSL-сертификаты для веб-сервера:
openssl req -newkey rsa:1024 -nodes -keyout /home/goserver/server.key -out /home/goserver/server.crt -x509 -days 3650 -subj \ "/C=XX/ST=XX/L=XX/O=XX/OU=XX/CN=example.com/emailAddress="root@example.com
chown goserver:goserver /home/goserver/server.key /home/goserver/server.crt
-
Создайте конфигурационный файл для gunicorn:
cat > /etc/gunicorn.d/goserver << EOF CONFIG = { 'working_dir': '/home/goserver/login-server', 'user': 'goserver', 'group': 'goserver', 'environment': { 'PYTHONPATH': '/home/goserver/venv/lib/python2.7/site-packages', }, 'args': ( '--bind', '1.1.1.1:8443', '--workers', '1', '--timeout', '60', '--reload', '--certfile', '/home/goserver/server.crt', '--keyfile', '/home/goserver/server.key', '--do-handshake-on-connect', '--ssl-version', '5', '--ciphers', 'TLSv1.2,TLSv1', '-k', 'gevent', 'goserver:myapp', ), } EOF
Пояснения -
Сгенерируйте SSH-ключ без секретной фразы (passphrase):
su -l goserver -c 'ssh-keygen -t dsa'
- Передайте специалистам поддержки содержимое файла /home/goserver/.ssh/id_dsa.pub.
-
Создайте конфигурационный файл сервера авторизации /home/goserver/login-server/config.yml:
Пример конфигурационного файла# путь до приватного SSH-ключа. Если путь стандартный, можно не указывать. keyfile: /home/goserver/.ssh/id_dsa # Сети, с которых разрешён доступ. Используйте формат: сеть/маска networks: - 192.168.0.0/24 # Пользователи в формате логин: пароль, зашифрованный функцией crypt # Пароль можно зашифровать так: # mkpasswd -m md5 -S `pwgen -s 8 1` __ПАРОЛЬ__ users: user1: $1$J5hIelk6$JcTj78g3r7ddKW7ZX7j2x1 user2: $1$gGJvd0dz$BoCItoXBq6EqdTg1m4G6D1 # Лог, в который будут записываться переходы. Пользователь goserver должен иметь права на запись в эту директорию либо файл должен быть создан заранее. logfile: /var/log/goserver.log
-
Создайте лог-файл:
touch /var/log/goserver.log
chown goserver /var/log/goserver.log
-
Добавьте gunicorn в автозагрузку и запустите. Если gunicorn уже был запущен, предварительно его надо остановить:
systemctl stop gunicorn
systemctl enable gunicorn
systemctl start gunicorn
Настройка доступа к SSH
-
Создайте пользователя support для доступа к SSH:
adduser --disabled-password --gecos "" support
-
Установите скрипт go пользователя goserver в качестве оболочки входа (login shell) для пользователя support:
usermod -s /home/goserver/login-server/go support
-
Установите sudo:
apt-get -y install sudo
-
Установите разрешение на запуск SSH для пользователя support. Для этого добавьте в файл /etc/sudoers строку:
support ALL=(goserver) NOPASSWD: /usr/bin/ssh
Обратите внимание!Для редактирования файла /etc/sudoers рекомендуем использовать команду visudo. -
Настройте скрипт go:
-
Создайте файл /home/goserver/login-server/config.sh:
cat > /home/goserver/login-server/config.sh << EOF log=/var/log/gossh.log # путь до лог-файла входов. Пользователь support должен иметь права на запись в эту директорию либо файл должен быть создан заранее. logdir=/var/log/gossh # путь до директории с лог-файлами stdout-соединений. Пользователь support должен иметь права на запись в эту директорию. #keyfile=path_to_file # путь до приватного SSH-ключа. Если путь стандартный, можно не указывать sudouser=goserver # пользователь, от которого запускать sudo EOF
-
Создайте файлы и директории для логов:
touch /var/log/gossh.log
chown support /var/log/gossh.log
mkdir -p /var/log/gossh
chown support /var/log/gossh
-
- Настройте ротацию логов:
-
Установите logrotate:
apt-get -y install logrotate
-
Создайте файл с настройками для logrotate:
cat > /etc/logrotate.d/goserver << EOF /var/log/gossh/*.log { size 1M copytruncate delaycompress compress } /var/log/gossh.log { size 1M copytruncate delaycompress compress } /var/log/goserver.log { size 1M delaycompress compress postrotate systemctl reload gunicorn endscript EOF
-
Использование сервера авторизации
Настройка авторизации
Для подключения к панели управления:
-
Зашифруйте пароли пользователей для подключения к серверу:
mkpasswd -m md5 -S `pwgen -s 8 1` <pass>
Пояснения к команде -
Добавьте имена пользователей и зашифрованные пароли в раздел users файла /home/goserver/login-server/config.yml:
Пример настройкиusers: user1: $1$J5hIelk6$JcTj78g3r7ddKW7ZX7j2x1 user2: $1$gGJvd0dz$BoCItoXBq6EqdTg1m4G6D1
-
Обновите настройки веб-сервера:
systemctl reload gunicorn
Для подключения по SSH добавьте публичную часть SSH-ключа сотрудника поддержки в файл /home/support/.ssh/authorized_keys.
Примеры команд
ssh -t support@1.1.1.1 go 2.2.2.2
ssh -t support@1.1.1.1 go 2.2.2.2 ps uxaw
rsync -aPv /tmp/srv/ -e "ssh -t support@1.1.1.1 go" 2.2.2.2:/tmp/