Надежно ограничьте доступ к частному репозиторию Debian


9

Я искал способ ограничить доступ к частному репозиторию Debian и иметь возможность аутентификации в нем неинтерактивно (т.е. используя скрипт)

Самая полезная статья, которую я нашел, если на самом деле одна с сайта администрирования Debian, но безопасный метод использует ssh и открытые / закрытые ключи. Он прекрасно работает, но открытый ключ каждого хоста должен находиться внутри удаленного файла authorized_keys для успешной аутентификации. В нем ничего не сказано о предоставлении пароля для ssh: // но я полагаю, что это возможно.

Вы пробовали другие альтернативы (например, ftps)?

заранее спасибо


Проблема, с которой я столкнулся в этой статье, заключается в том, что она не только предоставляет доступ к хранилищу APT, но и дает доступ к оболочке моего компьютера с хранилищем APT. Это недопустимый риск.
BobDoolittle

Ответы:


5

Если вы всегда запускаете apt-getна своих серверах вручную (автоматические apt-getкоманды не запускаются crons), то вы можете рассмотреть возможность использования переадресации агента ssh . Это позволяет избежать необходимости управлять одной парой открытых / закрытых ключей для каждого сервера, которым вы управляете, и, вероятно, безопаснее, чем оставлять закрытые ключи на каждом сервере.

Начальная конфигурация - подключитесь к серверам, которыми вы хотите управлять, и добавьте что-то вроде этого /etc/apt/sources.list(в этом примере предполагается, что вы хотите, чтобы ваши серверы подключались к managerучетной записи):

    deb ssh://manager@my.repository.org/path other stuff
  • создайте пару личных / открытых ключей на вашем собственном компьютере, johndoeнапример , с вашим логином (при условии, что ваш компьютер работает на Debian: если нет, вы можете сделать это с сервера Debian, выделенного для управления):

    ssh-keygen
    
  • убедитесь, что он защищен сильной ключевой фразой
  • скопируйте ваш открытый ключ на сервер репозитория в /home/manager/.ssh/authorized_keys:

    ssh-copy-id manager@my.repository.org
    

Один раз за сеанс управления

  • запустите на своей машине агент ssh, набрав:

    eval `ssh-agent`
    
  • добавьте ваш ключ к агенту (для этого потребуется ваша фраза-пароль):

    ssh-add
    

Управление сервером

  • подключиться к серверу, которым вы хотите управлять ssh -A( -Aактивирует переадресацию агента):

    ssh -A some.server.org
    
  • переключитесь на root (если вы хотите использовать его, sudoвам нужно настроить его, /etc/sudoersиначе вы sudoперестанете переадресовывать агент, прочитайте это ):

    su
    
  • Теперь вы сможете подключиться к учетной записи менеджера репозитория с помощью ssh без повторного ввода пароля, благодаря переадресации агента. Поэтому apt-getдолжно работать просто отлично:

    apt-get udate
    

Завершение сеанса управления

  • Как только вы закончили управлять своими серверами, удалите ключи из агента:

    ssh-add -D
    

преимущества

  • Не требуется много начальной настройки
  • Требуется только один закрытый ключ
  • Закрытый ключ защищен надежной парольной фразой
  • Если кто-то получит root-доступ к одному из ваших серверов, он не получит немедленного доступа к вашему серверу хранилища.
    • Обратите внимание, что если хакер терпелив и квалифицирован, он может подождать, пока вы подключитесь к серверу, используя переадресацию агента, и он может перехватить механизм пересылки, чтобы получить доступ к вашему серверу репозитория.
    • Чтобы предотвратить это, вы можете использовать их ssh-askдля принятия / отказа от каждой попытки использования вашего ключа.
    • В любом случае, хакер не получит доступ к самому закрытому ключу: он сможет просто взломать механизм пересылки, чтобы использовать ключ, и только в течение времени, когда вы подключены к серверу.

Еще раз спасибо MiniQuark. На самом деле, обновления не выполняются, но это отличный метод, который я мог бы применить для тестирования.
Хамбер

С удовольствием! :) Рад, если это поможет.
MiniQuark

4

Один из способов сделать это - просто разрешить определенному набору IP-адресов доступ к хранилищу. Это очень хорошо работает для локальной сети и VPN.

Просто и эффективно.


1
Спасибо, Антуан :). На самом деле, хранилище, которое у меня сейчас есть, доступно с помощью этого метода (http через соединение OpenVPN). Я ограничиваю IP-адреса, которые принадлежат VPN. Недостатком здесь является то, что каждый хост должен быть подключен к VPN для доступа к репо, что немного раздражает (управление несколькими сертификатами / ключами). Извините, что не указали это в вопросе.
Хамбер

Правда, управлять OpenVPN утомительно, но это делает управление безопасностью вашего хранилища очень простым. Кроме того, пользователям не нужно беспокоиться об учетных данных в VPN.
Антуан Бенкемун

2

Решение SSH + государственные / частные ключи не что плохо:

  • войти в систему как root на клиентском компьютере
  • типа ssh-keygen, тоssh-copy-id your_login@your.repository.org
  • отредактировать /etc/apt/sources.listи добавить что-то вроде:

    deb ssh://your_login@your.repository.org/path other stuff
    

Конечно, это требует, чтобы вы поместили открытый ключ каждого сервера в ~/.ssh/authorized_keysфайл на сервере, но это не так сложно (см. Выше) и дает вам контроль над тем, какие серверы вы разрешаете или нет в любой момент времени (вы можете удалить ключ в любое время в authorized_keys).


Спасибо MiniQuark. Да, это решение не так уж и плохо, но ssh-copy-id не работает, если аутентификация по паролю отключена на сервере openssh. Я подумал о том, чтобы распространять один и тот же файл ключей на каждом клиенте, используя репозиторий, чтобы иметь возможность его использовать. Для большей безопасности будет использоваться пользователь с минимальными разрешениями. Это почти так же, как обмен учетными данными. В настоящее время я тестирую этот метод, чтобы проверить, как ведет себя / работает.
Хамбер

1

Вы можете настроить доступ https к вашему хранилищу, защищенный логином / паролем (обычная аутентификация). Проблема заключается в том, что вам необходимо ввести логин / пароль в виде открытого текста /etc/apt/sources.list(примечание: есть патч, позволяющий /root/.netrcвместо этого вводить логин / пароль ).


Это, вероятно, лучшее решение, и это не netrc, а /etc/apt/auth.conf. Документы здесь: manpages.debian.org/testing/apt/apt_auth.conf.5.en.html
Николас

0

Ссылка в вашем вопросе показывает несколько методов. Вы хотите номер 2, https + обычная аутентификация.


Спасибо, Джастин. Я думаю, что транспорт https с apt работает, только если установлен apt-transport-https. Это интересная альтернатива. Единственный недостаток - учетные данные в sources.list
Humber

chmod 600 /etc/apt/sources.list
Джастин
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.