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

Подготовка сервера состоит из двух этапов:

  1. Настройка доступа к панели управления.
  2. Настройка доступа к SSH.

В статье приведён рекомендуемый вариант установки на ОС Debian 8 Jessie. Для других ОС порядок установки и запуска будет отличаться. Вместо скриптов ISPsystem вы можете использовать собственные.

Рекомендуем настроить на сервере авторизации файрвол. В настройках файрвола разрешите входящие подключения только для сети поддержки.

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


  1. Создайте пользователя goserver для доступа к панели управления:

    adduser --disabled-password --gecos "" goserver
    CODE
  2. Скачайте скрипты из репозитория ISPsystem в директорию этого пользователя. Например, это можно сделать с помощью git:
    1. Установите git:

      apt-get update && apt-get -y install git
      CODE
    2. Скачайте репозиторий:

      git clone https://github.com/ispsystem/login-server /home/goserver/login-server
      CODE
  3. Установите пакеты для запуска скриптов:

    apt-get -y install python-yaml python-paramiko gunicorn python-virtualenv gcc python-dev
    CODE

    Обратите внимание!

    Пакеты gcc и python-dev нужны для установки модуля gevent через pip. Версия gevent из репозитория debian может вызвать проблемы с работой SSL.

  4. Чтобы установленные модули не мешали работе ОС, создайте виртуальное окружение:

    virtualenv /home/goserver/venv
    CODE
  5. Установите в созданном окружении нужные пакеты:

    /home/goserver/venv/bin/pip install gevent ipaddress
    CODE
  6. Сгенерируйте 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
    
    CODE
    chown goserver:goserver /home/goserver/server.key /home/goserver/server.crt
    CODE
  7. Создайте конфигурационный файл для 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
    CODE

    1.1.1.1 — IP-адрес сервера

  8. Сгенерируйте SSH-ключ без секретной фразы (passphrase):

    su -l goserver -c 'ssh-keygen -t dsa'
    CODE
  9. Передайте специалистам поддержки содержимое файла /home/goserver/.ssh/id_dsa.pub.

  10. Создайте конфигурационный файл сервера авторизации /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
    CODE
  11. Создайте лог-файл:

    touch /var/log/goserver.log
    
    CODE
    chown goserver /var/log/goserver.log
    CODE
  12. Добавьте gunicorn в автозагрузку и запустите. Если gunicorn уже был запущен, предварительно его надо остановить:

    systemctl stop gunicorn
    CODE
    systemctl enable gunicorn
    CODE
    systemctl start gunicorn
    CODE

Настройка доступа к SSH


  1. Создайте пользователя support для доступа к SSH:

    adduser --disabled-password --gecos "" support
    CODE
  2. Установите скрипт go пользователя goserver в качестве оболочки входа (login shell) для пользователя support:

    usermod -s /home/goserver/login-server/go support
    CODE
  3. Установите sudo:

    apt-get -y install sudo
    CODE
  4. Установите разрешение на запуск SSH для пользователя support. Для этого добавьте в файл /etc/sudoers строку:

    support ALL=(goserver) NOPASSWD: /usr/bin/ssh
    CODE

    Обратите внимание!

    Для редактирования файла /etc/sudoers рекомендуем использовать команду visudo.

  5. Настройте скрипт go:

    1. Создайте файл /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
      CODE
    2. Создайте файлы и директории для логов:

      touch /var/log/gossh.log
      CODE
      chown support /var/log/gossh.log
      CODE
      mkdir -p /var/log/gossh
      CODE
      chown support /var/log/gossh
      CODE
  6. Настройте ротацию логов:
    1. Установите logrotate:

      apt-get -y install logrotate
      CODE
    2. Создайте файл с настройками для 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
      CODE

Использование сервера авторизации


Настройка авторизации

Для подключения к панели управления:

  1. Зашифруйте пароли пользователей для подключения к серверу:

    mkpasswd -m md5 -S `pwgen -s 8 1` <pass>
    CODE

    <pass> — пароль в открытом виде

  2. Добавьте имена пользователей и зашифрованные пароли в раздел users файла /home/goserver/login-server/config.yml:

    Пример настройки

    users:
        user1: $1$J5hIelk6$JcTj78g3r7ddKW7ZX7j2x1
        user2: $1$gGJvd0dz$BoCItoXBq6EqdTg1m4G6D1
    CODE
  3. Обновите настройки веб-сервера:

    systemctl reload gunicorn
    CODE

Для подключения по SSH добавьте публичную часть SSH-ключа сотрудника поддержки в файл /home/support/.ssh/authorized_keys.

Примеры команд

Подключиться по SSH

ssh -t support@1.1.1.1 go 2.2.2.2
CODE

1.1.1.1 — IP-адрес сервера авторизации

2.2.2.2 — IP-адрес сервера с панелью управления

Подключиться по SSH и выполнить команду

ssh -t support@1.1.1.1 go 2.2.2.2 ps uxaw
CODE

1.1.1.1 — IP-адрес сервера авторизации

2.2.2.2 — IP-адрес сервера с панелью управления

ps uxaw — выполняемая команда

Скопировать файлы на сервер

rsync -aPv /tmp/srv/ -e "ssh -t support@1.1.1.1 go" 2.2.2.2:/tmp/
CODE

1.1.1.1 — IP-адрес сервера авторизации

2.2.2.2 — IP-адрес сервера с панелью управления

/tmp/srv/ — директория с файлами, которые надо скопировать

/tmp/ — директория на сервере, в которую надо записать файлы