Вопрос или проблема
У меня есть вопрос к вам. Мне нужно решить эту проблему.
У меня есть папка /keys с chmod 755
на папке /keys
и правами ACL, такими как setfacl -d -m u:myadmin:rwx /keys
В папке /keys
есть другие папки, такие как user1, user2, user3
В каждой папке user1, user2, user3 есть специфические public.key для доступа по SSH
А теперь моя проблема:
Если у меня включен StrictModes
в sshd_config
, user1 при подключении по ssh получает сообщение об ошибке “Плохая собственность или режимы для директории”, потому что у папки user1 у root есть права rwx, а у myadmin также есть права rwx. Когда я убираю права myadmin, все работает. Но мне нужен myadmin для управления публичными ключами в этих папках. Я попытался отключить StrictModes в sshd_config, и все заработало. Но я думаю, что отключение StrictModes – это не лучшая идея с точки зрения безопасности. У всех пользователей, администраторов есть chroot в определенные папки в системе.
Что вы об этом думаете? Есть ли какое-либо другое решение этой проблемы? Или его можно отключить для решения этой проблемы?
RE: Все пользователи находятся в chroot в директории и не могут войти через putty, консоль…
Они могут подключаться только через ssh. После входа они видят свои папки с определенными правами, не могут выходить за пределы chroot-детектории.
Тем не менее, мне нужно, чтобы каждый пользователь имел доступ к специфической папке, которая находится в другом месте, вне chroot-папки каждого пользователя. Пользователь не знает о внешней папке, она нужна только для доступа к серверу, чтобы записывать некоторые файлы. Вот и все.
С помощью setfacl -m u:user:rwx
и включенным StrictModes пользователь не может войти через ssh. Если я отключу StrictModes, пользователь может подключиться через ssh.
Я знаю, что StrictModes определяет, должен ли sshd проверять режимы файлов и владение пользовательскими файлами и домашней директорией перед тем, как разрешить вход.
Или есть какое-то другое решение? Спасибо
Вместо того чтобы использовать facls для предоставления myadmin прав на запись в эту папку, вы можете создать несколько скриптов, которые будут манипулировать ключами по мере необходимости, и дать myadmin права sudo на них.
Ответ или решение
Ваша проблема связана с тем, что параметр StrictModes
в конфигурации sshd (обычно /etc/ssh/sshd_config
) проверяет права доступа и владельца файлов, чтобы обеспечить безопасность SSH. Когда StrictModes
включен, SSH-сервер отказывает в доступе, если есть потенциальные проблемы с правами доступа, что в вашем случае связано с тем, что у myadmin
и root
есть права на папку пользователя, что и вызывает ошибку "Bad Ownership or Modes for Directory".
Вот несколько решений, которые помогут вам сохранить уровень безопасности, не отключая StrictModes
:
-
Обеспечение корректных прав доступа:
Убедитесь, что права доступа на директорию каждого пользователя настроены так, чтобы только владелец (пользователь) имел доступ к своей директории. Например:# Замените user1 на имя пользователя chown user1:user1 /keys/user1 chmod 700 /keys/user1
Данный подход позволяет пользователю
user1
иметь полный доступ к своей директории, при этом другие пользователи, включаяmyadmin
, не имеют доступа. -
Управление ключами через скрипты:
Как вы уже упомянули, можно использовать скрипты для управления ключами. Напишите bash-скрипты, которые будут выполнять следующие действия:- Добавление/удаление публичных ключей в файл
authorized_keys
. - Выполнение проверки прав доступа и их исправление при необходимости.
Например, действие по добавлению ключа может выглядеть так:
#!/bin/bash if [ "$#" -ne 2 ]; then echo "Использование: $0 <пользователь> <путь_к_ключу>" exit 1 fi USER=$1 KEY_PATH=$2 # Проверяем наличие файла ключа if [ ! -f "$KEY_PATH" ]; then echo "Файл ключа не найден!" exit 1 fi # Копируем ключ в папку пользователя cat "$KEY_PATH" >> /keys/$USER/.ssh/authorized_keys
Настройте доступ к этому скрипту, добавив соответствующие права через
sudo
, так чтоmyadmin
сможет выполнять его, не имея доступа к директориям пользователей. Например:# Редактируем файл /etc/sudoers myadmin ALL=(ALL) NOPASSWD: /path/to/script.sh
- Добавление/удаление публичных ключей в файл
-
Частично автоматизированная система управления доступом:
Если необходимо датьmyadmin
возможность изменять ключи без изменения прав доступа к директориям пользователей, рассмотрите возможность реализации специализированной системы управления доступом. Например, можно создать отдельную директорию для хранения ключей и настроить автоматическую синхронизацию между этой директорией и домашними директориями пользователей. Это можно сделать с помощьюrsync
или аналогичных инструментов. -
Использование ACL без нарушения
StrictModes
:
Если вы настаиваете на использовании ACL, стоит аккуратно настроить их. Убедитесь, что права доступа к ключам позволяют только пользователю их использовать. Однако помните, что это может вести к ухудшению безопасности, так как еще один пользователь получает доступ к ключам.
Обязательно протестируйте все изменения в тестовой среде перед тем, как развернуть их в рабочей системе. Включение StrictModes
является хорошей практикой безопасности, и если вы сможете найти способ управления доступом для myadmin
, сохраняя StrictModes
включенным, это будет наилучшим решением.