Вопрос или проблема
Я могу ограничить ключ, установленный в ~/.ssh/authorized_keys
, чтобы разрешить только файловые передачи, заставив работать встроенный SFTP-сервер:
command="internal-sftp" ssh-rsa AAAAB3NzaC1...(ключ следует далее)
Тем не менее, используя SFTP-соединение, можно передать новую версию authorized_keys
на сервер, с удалением ограничений, добавлением новых ключей и так далее. После этого можно подключиться интерактивно.
Передачи файлов исключительно опасны из-за этой возможности. Есть ли способ предотвратить это, например, запретить доступ ко всему в ~/.ssh/
при использовании internal-sftp
?
Не уверен, что нет другого способа обойти это. По крайней мере, я не нашел его с контейнером LXC, который я использую для тестирования.
Как root
chattr +i .ssh/authorized_keys
Тогда пользователь не сможет изменить файл.
Другой возможный способ – изменить расположение authorized_keys или даже настроить поиск с помощью скрипта. Тогда пользователь никогда не сможет изменить ключи.
Даже третьим вариантом можно использовать SSH-сертификаты с ограничением на команды в сертификате только для пользователей SFTP и второй сертификат, у которого нет этого ограничения.
Если вам не нужен доступ на запись, вы можете использовать следующее.
command="internal-sftp -P write" ssh-rsa AAAAB3NzaC1...(ключ следует далее)
-P blacklisted_requests
Укажите список запросов протокола SFTP, запрещенных сервером, разделенных запятыми. sftp-server ответит на любой запрещённый
запрос с ошибкой. Флаг -Q может быть использован для определения поддерживаемых типов запросов. Если указаны как черный, так и белый списки, черный список применяется перед белым списком.
Вот список «запросов».
open
close
read
write
lstat
fstat
setstat
fsetstat
opendir
readdir
remove
mkdir
rmdir
realpath
stat
rename
readlink
symlink
posix-rename
statvfs
fstatvfs
hardlink
fsync
lsetstat
Ответ или решение
Чтобы безопасно ограничить аутентификацию по ключам только для доступа к SFTP, необходимо учесть несколько важных аспектов, касающихся конфигурации SSH-сервера и управления доступом. В этой статье мы рассмотрим методы, которые помогут предотвратить возможность изменения файла authorized_keys
, а также управление разрешениями на доступ к критически важным файлам.
1. Использование встроенного SFTP сервера с ограничениями
Как вы правильно заметили, можно ограничить доступ к SFTP, используя следующую строку в ~/.ssh/authorized_keys
:
command="internal-sftp" ssh-rsa AAAAB3NzaC1...(ключ следует)
Это ограничит пользователя на выполнение только SFTP команд, но не предотвратит возможность изменения файла authorized_keys
.
2. Защита файла authorized_keys
с помощью атрибута immutable
Для защиты файла authorized_keys
от изменений можно установить атрибут immutable
:
chattr +i ~/.ssh/authorized_keys
Этот атрибут делает файл не изменяемым, что предотвращает его модификацию даже пользователем, которому был выдан доступ. Однако следует быть внимательным, так как для временного изменения этого атрибута вам потребуется выполнять соответствующие команды от имени суперпользователя.
3. Изменение расположения authorized_keys
Другой метод заключается в перенастройке SSH для поиска ключей аутентификации в нестандартном месте. Вы можете интегрировать пользовательский скрипт для управления файлами ключей. Это потребует дополнительных усилий для настройки, но помимо передачи управления ключами, также увеличит уровень безопасности:
- Создайте специальный скрипт для определения ключей.
- Настройте SSH для его использования через параметры
AuthorizedKeysCommand
в файле конфигурации/etc/ssh/sshd_config
.
4. Использование SSH-материалов (SSH certificates)
Также возможно использование SSH-сертификатов с ограничениями для команд. При сертификатах вы можете создавать разные уровни доступа:
- Один сертификат для пользователя с правами только на SFTP.
- Второй сертификат для пользователей с обычными правами.
Это обеспечит гибкость в управлении доступом без необходимости манипуляций с файлом authorized_keys
.
5. Установка ограничений на операции SFTP
Если у вас нет необходимости предоставлять пользователю возможность записи, то вы можете использовать опцию при вызове internal-sftp
:
command="internal-sftp -P write" ssh-rsa AAAAB3NzaC1...(ключ следует)
Эта настройка запрещает определенные типы запросов на сервере, например, удаление, создание и изменение файлов. В списке черных списков можно указать, какие команды SFTP будут запрещены, включая:
write
remove
mkdir
- и другие.
Это позволит вам существенно ограничить возможности пользователя при работе через SFTP.
Заключение
Безопасное ограничение аутентификации по ключам для SFTP является задачей, требующей комплексного подхода к управлению доступом и безопасности. Комбинируя разные методы, такие как использование атрибутов, изменение расположения ключей и использование сертификатов, вы можете значительно повысить уровень защиты вашей системы.
Для достижения наилучших результатов рекомендуется регулярно проверять настройки безопасности и следить за обновлениями в best practices управления доступом. Удачи в обеспечении безопасности вашей SFTP-инфраструктуры!