Cockpit — веб-панель, которая не пытается заменить консоль, а аккуратно её дополняет: она подключается к системным API через cockpit-bridge, использует обычные учётные записи Linux и PAM, а каждое действие выполняет с теми же правами, что и пользователь в SSH. Для домашнего сервера это удобный способ посмотреть логи, службы, диски и контейнеры с телефона или чужого ноутбука, не устанавливая клиент. Ниже — установка, HTTPS, ограничение доступа и разбор типичных проблем.

Установка и запуск

sudo apt install cockpit cockpit-podman cockpit-packagekit
sudo dnf install cockpit cockpit-podman cockpit-storaged
sudo systemctl enable --now cockpit.socket
systemctl status cockpit.socket

Пакет называется cockpit во всех основных дистрибутивах. Модули поставляются отдельно: cockpit-podman добавляет контейнеры, cockpit-packagekit — обновления, cockpit-storaged — диски и LVM, cockpit-networkmanager — сеть. Сокет слушает порт 9090 на всех интерфейсах. Проверка:

ss -tlnp | grep 9090
curl -kI https://127.0.0.1:9090

Если curl отвечает 200 или 302, веб-сервер жив. Открывайте https://адрес-сервера:9090 и входите под своей обычной учётной записью. Отдельного пользователя cockpit нет — это принципиальное отличие от многих панелей.

Права: почему панель показывает ограниченный доступ

После входа Cockpit показывает баннер, если у пользователя нет прав на административные действия. Панель не хранит собственную базу паролей и не умеет выдавать роли: всё определяется PAM и sudo. Добавьте пользователя в группу администраторов:

sudo usermod -aG sudo username
sudo usermod -aG wheel username
groups username

Первая команда — для Debian и Ubuntu, вторая — для RHEL и Fedora. После повторного входа появится переключатель Administrative access с запросом пароля sudo. Терминал и файловый менеджер по умолчанию работают от обычного пользователя.

HTTPS и свой сертификат

По умолчанию Cockpit генерирует самоподписанный сертификат. Браузер будет ругаться, а некоторые мобильные клиенты откажутся подключаться. Замените сертификат на свой — от локального центра сертификации или Let’s Encrypt, если сервер доступен из интернета (что само по себе плохая идея). Cockpit читает файлы из /etc/cockpit/ws-certs.d: один .cert с сертификатом и ключом внутри, приоритет у файлов с большим числовым префиксом.

sudo openssl req -x509 -newkey rsa:4096 -nodes -days 825 -keyout cockpit.key -out cockpit.cert -subj "/CN=server.home.arpa"
sudo bash -c 'cat cockpit.cert cockpit.key > /etc/cockpit/ws-certs.d/10-home.cert'
sudo chmod 600 /etc/cockpit/ws-certs.d/10-home.cert
sudo systemctl restart cockpit

В .cert должны лежать и сертификат, и незашифрованный ключ; без ключа Cockpit оставит прежний сертификат. Проверка:

openssl x509 -in /etc/cockpit/ws-certs.d/10-home.cert -noout -subject -dates
journalctl -u cockpit -n 30 --no-pager

Ограничение доступа и reverse proxy

Панель администратора не должна смотреть в интернет. Минимальная защита — разрешить порт только из локальной сети:

sudo ufw allow from 192.168.1.0/24 to any port 9090 proto tcp
sudo firewall-cmd --permanent --add-service=cockpit
sudo firewall-cmd --reload

Если нужен доступ через существующий nginx с нормальным сертификатом, выделите отдельный поддомен и пробросьте панель на localhost. Обязательно передайте заголовки Upgrade — интерфейс держит WebSocket-соединение:

location / {
    proxy_pass https://127.0.0.1:9090;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
}

В /etc/cockpit/cockpit.conf добавьте доверенный Origin:

[WebService]
Origins = https://server.home.arpa
AllowUnencrypted = false

Без записи Origins Cockpit отклонит запросы с незнакомого домена — это защита от подмены хоста, а не ошибка. AllowUnencrypted оставьте выключенным: включать его можно только для отладки на localhost.

Что реально делает панель

  • Терминал в браузере — полноценный shell, тот же, что по SSH, включая sudo.
  • Журнал systemd с фильтрами по службе, приоритету и времени; удобно, когда под рукой нет консоли.
  • Службы: запуск, остановка, включение в автозагрузку, просмотр юнитов.
  • Диски: разделы, файловые системы, LVM, NFS, iSCSI; монтирование без ручного fstab.
  • Сеть: интерфейсы, адреса, маршруты, DNS, Wi-Fi через NetworkManager.
  • Контейнеры Podman: список, логи, запуск и остановка — при установленном cockpit-podman.
  • Обновления через PackageKit и модуль SELinux в системах с SELinux.

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

Диагностика типичных проблем

Панель не открывается — сначала проверьте сокет и порт, потом сертификаты, и только затем логи:

systemctl status cockpit.socket
ss -tlnp | grep 9090
openssl s_client -connect 127.0.0.1:9090 -brief
journalctl -u cockpit -f

Частые причины: занят порт 9090, битый сертификат в ws-certs.d, SELinux блокирует нестандартный порт, прокси не передаёт WebSocket. Для смены порта используется сокет-юнит:

sudo systemctl edit cockpit.socket
# в секции [Socket] заменить порт:
ListenStream=
ListenStream=9443
sudo systemctl daemon-reload
sudo systemctl restart cockpit.socket

Если вход отклоняется при верном пароле, проверьте, не заблокирована ли учётная запись: Cockpit использует те же PAM-механизмы, поэтому успешный ssh с той же учёткой — хороший тест. Ошибки моста видны в журнале по сообщениям cockpit-bridge. После смены порта обновите правило firewall и адрес в обратном прокси.

Безопасность: короткий чек-лист

  1. Не публикуйте 9090 в интернет; доступ — через локальную сеть или проверенный reverse proxy.
  2. Используйте отдельную учётную запись с sudo, а не root напрямую.
  3. Ограничьте порт по адресам через ufw или firewalld.
  4. Держите Cockpit и модули в актуальном состоянии: панель работает с высокими привилегиями.
  5. Для чувствительных установок включите клиентские сертификаты (ClientCertAuthentication = true) или дополнительный слой аутентификации на прокси.
  6. Проверяйте журнал входов: неудачные попытки видны в journalctl -u cockpit.

Ограничения

Cockpit — не панель хостинга: в ней нет биллинга, тарифов, изоляции сайтов и тонких ролей. Модуль обновлений зависит от PackageKit и в минимальных образах может отсутствовать. Часть возможностей вроде управления SELinux доступна только в дистрибутивах семейства RHEL. Наконец, панель не заменяет конфигурацию как код: изменения, сделанные мышью, не попадают в git, поэтому для воспроизводимых серверов всё равно нужны Ansible или скрипты.

Итог

Cockpit стоит поставить на домашний сервер или небольшую рабочую машину, если вы цените быстрый доступ к журналам, службам и контейнерам без SSH-клиента. Он не добавляет отдельной модели прав и работает поверх обычных учётных записей Linux, поэтому не создаёт второго root. Связка получается простой: сокет на localhost, доступ из локальной сети, свой сертификат, при необходимости reverse proxy с WebSocket. Для больших инфраструктур смотрите в сторону Ansible и специализированных панелей, а Cockpit оставьте как удобный инструмент дежурного.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте