Доступ к серверу для коллег и внешних разработчиков
Как дать доступ к серверу коллеге или фрилансеру, не передавая аккаунт, пароль root и токены: SSH-ключи, отдельные пользователи, доступ только по SFTP и отзыв доступа.
На этой странице
В этом руководстве — как дать доступ к серверу коллеге или внешнему разработчику, не передавая аккаунт blackbox.md, пароль root и API-токены. Ключ коллеги для root добавляется в панели app.blackbox.md, в карточке сервера на странице «Мои серверы» (app.blackbox.md/my-servers, левое меню «Инфраструктура» → «Мои серверы»). Отдельные пользователи и доступ только по SFTP настраиваются на самом сервере по SSH под root.
Доступно: владельцу аккаунта blackbox.md, который заказал сервер, или аккаунту, которому BLACKBOX выдал права на управление сервером (действия в панели), а также всем, у кого есть доступ root к серверу по SSH (действия на сервере). В карточках с отметкой «Обслуживается» кнопок «Добавить SSH-ключ» и «Сбросить пароль» нет — по таким серверам напишите нам.
Что есть в аккаунте и панели
- В аккаунте blackbox.md и в панели нет участников команды, подпользователей, ролей и приглашений, которые мог бы отправить клиент. Каждый человек пользуется собственным аккаунтом blackbox.md.
- Коллега со своим аккаунтом не видит ваших заказов, счетов, тикетов и серверов и не может войти в панель вместо вас. Для доступа по SSH или SFTP аккаунт ему не нужен.
- Общий доступ к серверам компании, которые обслуживает BLACKBOX (карточки «Обслуживается»), открывается только по запросу через поддержку: Страница «Обзор» (Overview).
- Список «Установленные ключи» и кнопка «Добавить SSH-ключ» работают только с файлом
/root/.ssh/authorized_keys. Ключами других пользователей Linux управляйте прямо на сервере.
Что нельзя передавать никогда
| Не передавайте | Почему |
|---|---|
| Пароль аккаунта blackbox.md | С ним оформляют и оплачивают заказы, открывают панель и создают API-токены. |
| Пароль root | Даёт полный контроль над сервером, а при общем пароле не видно, кто именно работал. |
API-токены (bbx_pat_…) |
Действуют от имени владельца аккаунта: с разрешением servers:exec выполняют любые команды от root, с orders:write оформляют заказы и платят с баланса (Разрешения токенов (scopes)). |
| Коды восстановления 2FA | Заменяют код из приложения-аутентификатора при входе в панель. |
| Приватные SSH-ключи | Приватный ключ не покидает компьютер владельца: не отправляйте свой и не принимайте чужой. |
Согласно Условиям использования (§3), вы несёте полную ответственность за действия всех, кому открываете доступ к услугам (сотрудников, подрядчиков), и за защиту паролей, SSH-ключей и API-токенов.
Коллега сам создаёт пару ключей (Создание SSH-ключа (Windows, macOS, Linux)) и присылает вам только публичный ключ — одну строку из файла .pub. Попросите его указать в комментарии ключа своё имя, чтобы вы узнали ключ в списке «Установленные ключи»:
ssh-keygen -t ed25519 -C "ИМЯ_КОЛЛЕГИ"Попросите и отпечаток ключа, чтобы сверить его с тем, что окажется на сервере. В macOS и Linux:
ssh-keygen -lf ~/.ssh/id_ed25519.pubВ Windows (PowerShell):
ssh-keygen -lf $env:USERPROFILE\.ssh\id_ed25519.pubКакой доступ выбрать
| Что нужно коллеге | Решение | Где |
|---|---|---|
| Полное администрирование сервера | Его публичный ключ для root, добавленный через «Добавить SSH-ключ» → «Вставить новый ключ»; удаляется в списке «Установленные ключи» |
панель |
| Администрирование под собственным логином, чтобы было видно, кто что сделал | Отдельный пользователь Linux в группе sudo (Ubuntu, Debian) или wheel (AlmaLinux, CentOS Stream) |
сервер |
| Только файлы сайта | Пользователь только для SFTP, ограниченный каталогом сайта | сервер |
| Только база данных | Отдельный пользователь без sudo и SSH-туннель (Базы данных: MariaDB/MySQL и PostgreSQL) |
сервер |
Ключ коллеги для root через панель
В карточке сервера на странице «Мои серверы» нажмите «Добавить SSH-ключ».
Выберите «Вставить новый ключ» и вставьте строку, полученную от коллеги (
ssh-ed25519 AAAA… ИМЯ_КОЛЛЕГИ).Нажмите «Добавить ключ». Появится «Ключ добавлен.», а ключ с его комментарием — в списке «Установленные ключи».
Сравните начало отпечатка в списке с отпечатком, который прислал коллега.
Коллега подключается так:
ssh root@IP_СЕРВЕРА
Вставленный ключ устанавливается только на этот сервер и в вашем аккаунте не сохраняется. Подробнее о списке и сообщениях: Добавление и удаление SSH-ключей на сервере.
Важно Ключ для
root— это полный контроль: коллега сможет читать любые данные, добавлять другие ключи и пользователей и менять любые настройки. Попросите его не удалять «Ключ управления (blackbox.md)» и не ставитьPermitRootLogin no: и то и другое отключает в панели сброс пароля, управление ключами и кнопки входа по паролю (Ключи BLACKBOX на вашем сервере).
Отдельный пользователь Linux для коллеги
У отдельного пользователя собственный логин: в журналах видны его имя и команды, выполненные через sudo. Шаги похожи на шаг 5 из статьи Защита нового сервера: чек-лист, только на сервер попадает ключ коллеги, а не ключи root. Выполняйте команды под root.
Ubuntu и Debian
adduser --disabled-password ИМЯ_ПОЛЬЗОВАТЕЛЯКоманда создаёт и каталог /home/ИМЯ_ПОЛЬЗОВАТЕЛЯ. Запрашиваемые поля (полное имя, телефон и т. д.) можно оставить пустыми. Пароля у пользователя нет — он входит только по ключу.
AlmaLinux и CentOS Stream
useradd -m ИМЯ_ПОЛЬЗОВАТЕЛЯЗдесь пароль тоже не задаётся — пользователь входит только по ключу.
Публичный ключ коллеги
Создайте каталог и откройте файл ключей:
mkdir -p /home/ИМЯ_ПОЛЬЗОВАТЕЛЯ/.ssh nano /home/ИМЯ_ПОЛЬЗОВАТЕЛЯ/.ssh/authorized_keysЕсли
nanoнет (так бывает в AlmaLinux и CentOS Stream), установите его:dnf install -y nanoВставьте одной строкой публичный ключ коллеги, сохраните (Ctrl + O, затем Enter) и выйдите (Ctrl + X).
Назначьте владельца и права доступа:
chown -R ИМЯ_ПОЛЬЗОВАТЕЛЯ:ИМЯ_ПОЛЬЗОВАТЕЛЯ /home/ИМЯ_ПОЛЬЗОВАТЕЛЯ/.ssh chmod 700 /home/ИМЯ_ПОЛЬЗОВАТЕЛЯ/.ssh chmod 600 /home/ИМЯ_ПОЛЬЗОВАТЕЛЯ/.ssh/authorized_keysВ AlmaLinux и CentOS Stream также восстановите метку SELinux:
restorecon -R /home/ИМЯ_ПОЛЬЗОВАТЕЛЯ/.sshСверьте выведенный отпечаток с тем, что прислал коллега:
ssh-keygen -lf /home/ИМЯ_ПОЛЬЗОВАТЕЛЯ/.ssh/authorized_keys
Не копируйте новому пользователю файл /root/.ssh/authorized_keys: в нём ваши ключи и ключи BLACKBOX.
Права администратора (только если они нужны)
Участники группы sudo (Ubuntu, Debian) или wheel (AlmaLinux, CentOS Stream) могут выполнять любые команды от имени root. sudo запрашивает пароль пользователя, поэтому задайте его.
Ubuntu и Debian:
passwd ИМЯ_ПОЛЬЗОВАТЕЛЯ
usermod -aG sudo ИМЯ_ПОЛЬЗОВАТЕЛЯЕсли в Debian нет команды sudo, установите её:
apt install -y sudoAlmaLinux и CentOS Stream:
passwd ИМЯ_ПОЛЬЗОВАТЕЛЯ
usermod -aG wheel ИМЯ_ПОЛЬЗОВАТЕЛЯПередайте пароль отдельно от остальных данных для доступа и попросите коллегу сменить его командой passwd при первом входе. На сервере с отметкой «Пароль + ключ» с этим паролем коллега сможет войти и по SSH; как перевести сервер в режим «Только ключ»: Включение и отключение входа по паролю по SSH. Команды, выполненные через sudo, видны в журнале:
journalctl _COMM=sudoПервое подключение
Проверьте вход вместе с коллегой до того, как передать ему доступ, не закрывая свою сессию root. В ней следите за журналом SSH. В Ubuntu и Debian:
journalctl -u ssh -fВ AlmaLinux и CentOS Stream:
journalctl -u sshd -fКоллега подключается:
ssh ИМЯ_ПОЛЬЗОВАТЕЛЯ@IP_СЕРВЕРАВ журнале появится строка Accepted publickey for ИМЯ_ПОЛЬЗОВАТЕЛЯ с отпечатком ключа; остановите просмотр клавишами Ctrl + C. Если вы дали права администратора, коллега выполняет команду ниже — она должна вывести root:
sudo whoamiНа сервере «Только ключ» коллега входит только по ключу. Не включайте ради него вход по паролю: кнопка «Включить вход по паролю» включает его для всех пользователей, в том числе для root.
Только база данных
Создайте пользователя, как описано выше, без прав администратора. Чтобы он мог открыть только туннель, но не терминал:
usermod -s /usr/sbin/nologin ИМЯ_ПОЛЬЗОВАТЕЛЯКоллега запускает туннель под своим именем пользователя (для PostgreSQL замените 3306 на 5432):
ssh -N -L 3306:127.0.0.1:3306 ИМЯ_ПОЛЬЗОВАТЕЛЯ@IP_СЕРВЕРАТуннель идёт через порт SSH (22), поэтому открывать порт базы данных не нужно. В самой базе данных создайте для него отдельного пользователя только с нужными правами: Базы данных: MariaDB/MySQL и PostgreSQL.
Доступ только по SFTP к файлам сайта (необязательно)
Коллега сможет только загружать и скачивать файлы в каталоге сайта: терминала у него нет, туннели открыть нельзя. В примере сайт находится в /var/www/ДОМЕН. SSH ограничивает коллегу каталогом /srv/sftp/ИМЯ_ПОЛЬЗОВАТЕЛЯ: он принадлежит root, и коллега не может его изменить. Внутри него подкаталог site показывает каталог сайта — туда коллега может записывать файлы.
На тарифах «VPS hosting» сначала спросите поддержку: у панели управления на сервере могут быть свои учётные записи и настройки SFTP (Тарифы «VPS hosting» с панелью управления).
Внимание Шаги 4 и 5 меняют настройки SSH. Не закрывайте текущую сессию
root, пока снова не войдёте какrootиз нового терминала. Веб- и VNC-консоли у клиентов нет: если доступ по SSH потерян, помочь может только поддержка.
Создайте группу (один раз для всех пользователей SFTP) и пользователя.
Ubuntu и Debian:
groupadd sftponly adduser --disabled-password --shell /usr/sbin/nologin ИМЯ_ПОЛЬЗОВАТЕЛЯ usermod -aG sftponly ИМЯ_ПОЛЬЗОВАТЕЛЯAlmaLinux и CentOS Stream:
groupadd sftponly useradd -m -s /usr/sbin/nologin -G sftponly ИМЯ_ПОЛЬЗОВАТЕЛЯЗатем добавьте ключ коллеги, как в разделе «Публичный ключ коллеги» выше.
Создайте каталог коллеги и сделайте копию файла
/etc/fstab:mkdir -p /srv/sftp/ИМЯ_ПОЛЬЗОВАТЕЛЯ/site chown root:root /srv/sftp /srv/sftp/ИМЯ_ПОЛЬЗОВАТЕЛЯ chmod 755 /srv/sftp /srv/sftp/ИМЯ_ПОЛЬЗОВАТЕЛЯ cp /etc/fstab /etc/fstab.bak nano /etc/fstabВ конец файла
/etc/fstabдобавьте строку ниже и сохраните:/var/www/ДОМЕН /srv/sftp/ИМЯ_ПОЛЬЗОВАТЕЛЯ/site none bind,nofail 0 0Смонтируйте каталог сайта и проверьте, что видны его файлы:
systemctl daemon-reload mount /srv/sftp/ИМЯ_ПОЛЬЗОВАТЕЛЯ/site ls /srv/sftp/ИМЯ_ПОЛЬЗОВАТЕЛЯ/siteСтрока в
/etc/fstabвосстанавливает монтирование после каждой перезагрузки. Благодаряnofailошибка в ней не помешает серверу загрузиться.Разрешите запись в каталог сайта. Файлы сайта должны принадлежать пользователю веб-сервера: Передача файлов на сервер (scp, rsync, SFTP), раздел «После загрузки сайта: владелец и права доступа». Узнайте их группу:
stat -c '%U:%G' /var/www/ДОМЕНОбычно результат —
www-data:www-dataв Ubuntu и Debian иapache:apacheилиnginx:nginxв AlmaLinux и CentOS Stream. Если вы видитеroot:root, сначала смените владельца, как описано в указанном разделе. Затем выполните команды ниже, подставив вместоВЕБ_ГРУППАгруппу, указанную после::usermod -aG ВЕБ_ГРУППА ИМЯ_ПОЛЬЗОВАТЕЛЯ chmod -R g+w /var/www/ДОМЕН find /var/www/ДОМЕН -type d -exec chmod g+s {} +Файлы, загруженные коллегой, принадлежат ему и группе веб-сервера, и веб-сервер может их читать. Если приложению нужно их ещё и изменять, восстановите владельца, как в руководстве по передаче файлов, а затем снова выполните две последние команды.
Сделайте копию настроек SSH и откройте основной файл:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak nano /etc/ssh/sshd_configДобавьте в конец файла блок ниже и сохраните:
Match Group sftponly ChrootDirectory /srv/sftp/%u ForceCommand internal-sftp -d /site AllowTcpForwarding no X11Forwarding noБлок должен оставаться последним в файле: всё, что идёт после
Match, действует только для группыsftponly. Вместо%uподставляется имя пользователя, а-d /siteсразу открывает коллеге каталог сайта.- Не добавляйте в блок
PasswordAuthentication: входом по паролю вы управляете из панели. - Не ставьте
PermitRootLogin noи не меняйте файл, который панель записывает в/etc/ssh/sshd_config.d/.
- Не добавляйте в блок
Проверьте настройки:
sshd -tЕсли команда ничего не вывела, настройки в порядке. Только после этого перезагрузите конфигурацию SSH:
systemctl reload ssh || systemctl reload sshdЕсли
sshd -tвыводит ошибку, не перезагружайте SSH: исправьте файл или восстановите копию, затем снова проверьте его командойsshd -t.cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_configИз нового терминала проверьте, что по-прежнему входите как
root. Затем попросите коллегу подключиться SFTP-клиентом, например FileZilla или WinSCP, с пользователемИМЯ_ПОЛЬЗОВАТЕЛЯи своим ключом, или из терминала:sftp ИМЯ_ПОЛЬЗОВАТЕЛЯ@IP_СЕРВЕРАКоллега попадёт в
/siteи не увидит ничего за пределами каталога/srv/sftp/ИМЯ_ПОЛЬЗОВАТЕЛЯ. Если он попробует войти черезssh, то получит «This service allows sftp connections only.», и соединение закроется.
Если что-то не работает, посмотрите последние сообщения службы SSH. В Ubuntu и Debian:
journalctl -u ssh -n 50В AlmaLinux и CentOS Stream:
journalctl -u sshd -n 50| Проблема | Причина | Что делать |
|---|---|---|
Соединение сразу закрывается, в журнале bad ownership or modes for chroot directory |
/srv/sftp или /srv/sftp/ИМЯ_ПОЛЬЗОВАТЕЛЯ не принадлежит root либо доступен для записи другим |
Повторите команды chown и chmod из шага 2 |
Permission denied при загрузке файла |
Коллега не входит в группу веб-сервера или каталог не разрешает запись группе | Повторите шаг 3; коллега переподключается, чтобы новая группа вступила в силу |
Каталог /site пуст |
Каталог сайта не смонтирован | Снова выполните команду mount из шага 2 |
| AlmaLinux или CentOS Stream: вход не удаётся, сообщений выше нет | Возможно, доступ блокирует SELinux | Ищите причину в журнале службы sshd (команда выше); если не найдёте, напишите нам |
Отзыв доступа
Когда работа закончена или человек уходит, сразу закройте ему доступ.
Ключ для root
- В карточке сервера нажмите «Добавить SSH-ключ».
- В списке «Установленные ключи» найдите ключ коллеги по комментарию и отпечатку и нажмите «Удалить».
- Подтвердите «Удалить ключ SHA256:… с этого сервера?» кнопкой «OK». Появится «Ключ удалён.»
- Нажмите «Сбросить пароль» и подтвердите «Сбросить пароль для ИМЯ_СЕРВЕРА? Текущий пароль перестанет работать немедленно.»: пока у коллеги был доступ, он мог сменить пароль root (Сброс пароля root).
Отдельный пользователь
Завершите его открытые сессии:
pkill -KILL -u ИМЯ_ПОЛЬЗОВАТЕЛЯЗатем удалите пользователя вместе с его каталогом. Ubuntu и Debian:
deluser --remove-home ИМЯ_ПОЛЬЗОВАТЕЛЯAlmaLinux и CentOS Stream (а также Ubuntu или Debian, если deluser требует пакет perl):
userdel -r ИМЯ_ПОЛЬЗОВАТЕЛЯПользователь только для SFTP
Сначала завершите его сессии командой pkill, как описано выше. Прежде чем удалять пользователя, размонтируйте каталог сайта, удалите его строку из /etc/fstab и уберите опустевшие каталоги:
umount /srv/sftp/ИМЯ_ПОЛЬЗОВАТЕЛЯ/site
nano /etc/fstab
rmdir /srv/sftp/ИМЯ_ПОЛЬЗОВАТЕЛЯ/site /srv/sftp/ИМЯ_ПОЛЬЗОВАТЕЛЯОпасно Не используйте
rm -rв/srv/sftp. Пока каталог сайта там смонтирован, команда удалит сами файлы сайта.rmdirудаляет только пустые каталоги, поэтому откажется работать, если монтирование ещё активно.
Проверки после ухода
Поищите ключи, пользователей и права администратора, которых вы не узнаёте. В списке «Установленные ключи» видны только ключи
root.cat /root/.ssh/authorized_keys ls -la /home/*/.ssh/authorized_keys ls -la /etc/sudoers.d/ getent group sudo wheelСмените секреты, которые знал этот человек: пароли баз данных (и удалите созданного для него пользователя базы), ключи приложений — например, в
.envилиwp-config.php, пароли SMTP и ключи внешних сервисов.Проверьте недавние входы:
last -n 20В Ubuntu и Debian:
journalctl -u ssh --since "30 days ago" | grep AcceptedВ AlmaLinux и CentOS Stream:
journalctl -u sshd --since "30 days ago" | grep AcceptedВ строках
Acceptedуказаны пользователь, IP-адрес и способ входа. Если командыlastнет, используйте толькоjournalctl.
Если вы подозреваете, что доступом злоупотребили, следуйте статье Сервер взломан или атакован: что делать.
Частые вопросы
Может ли коллега видеть сервер в своей панели? Нет. Сервер, заказанный на blackbox.md, виден только в аккаунте, из которого его заказали, и поделиться им в панели нельзя. Общий доступ возможен только к серверам компании, которые обслуживает BLACKBOX, — по запросу через поддержку (Как связаться с поддержкой BLACKBOX).
Фрилансер просит пароль root или данные аккаунта. Что делать?
Не передавайте их. Добавьте его публичный ключ для root или создайте ему отдельного пользователя. Если вы уже передали эти данные, нажмите «Сбросить пароль» в карточке сервера и смените пароль аккаунта — это заодно отключит API-токены, созданные раньше (Рекомендации по безопасности аккаунта). Затем выполните проверки из раздела «Проверки после ухода».
Как узнать, чей ключ в списке «Установленные ключи»? В списке видны начало отпечатка, тип и комментарий ключа. Попросите коллегу указать своё имя в комментарии при создании ключа и сверьте отпечаток с тем, что он прислал: комментарий может написать кто угодно, а отпечаток подделать нельзя.
Можно ли дать коллеге API-токен для AI-ассистента?
Не делайте этого. Токен действует от вашего имени как владельца аккаунта: с servers:exec он выполняет команды от root на всех ваших серверах, с orders:write оформляет заказы и платит с баланса. Коллега работает через собственный доступ по SSH.
Нужен ли коллеге аккаунт на blackbox.md? Нет. Для SSH или SFTP достаточно его ключа и доступа, который вы открыли на сервере. Собственный аккаунт не покажет ему ваши серверы.