Вопрос или проблема
Я хочу создать пользователя для моего сервера Ubuntu. Я буду использовать этого пользователя для копирования некоторых файлов с сервера на мой локальный компьютер. Поэтому права доступа должны быть действительно ограничены. Этот пользователь может только получить доступ к /some/path в сервере и читать файлы. Ничего больше.
Для достижения этой цели я создал пользователя:
sudo useradd scp_user -M -d /some/path
sudo groupadd scp_group
sudo usermod scp_user -g scp_group
sudo usermod scp_user -s /bin/false # отключить ssh вход
sudo chown -R scp_user:scp_group /some/path
И в моем конфиге ssh:
Match Group scp_group
ChrootDirectory %h
#ForceCommand scp
AllowTcpForwarding no
Но возникает ошибка:
scp scp_user@IP:/some/path/test.zip test.zip
scp_user@IP's password:
Не удалось изменить директорию на домашнюю директорию /some/path: Нет такого файла или директории
/bin/false: Нет такого файла или директории
Не могли бы вы сказать, какой шаг я пропустил?
В вашем вопросе есть различные недостатки, как уже указали другие:
ChrootDirectory
запирает вашего пользователя в его домашней директории- В этой директории нет исполняемого файла
/bin/false
(ни/bin/scp
, который необходим для самогоscp
).
Вы можете либо:
- Скопировать бинарный файл
scp
и необходимые динамически загружаемые библиотеки в chroot (домашняя директория пользователя) - Изменить оболочку пользователя обратно на
/bin/bash
или/bin/sh
- Скопировать бинарный файл
bash
илиsh
и необходимые динамически загружаемые библиотеки в chroot (домашняя директория пользователя) - (это ужасно…)
Или просто используйте sftp
:
- Укажите
Subsystem sftp internal-sftp
(и, возможно,ForceCommand internal-sftp
) вsshd_config
- Перезапустите сервер
sshd
Вы также можете столкнуться с некоторыми проблемами с правами доступа (читайте ошибки в журнале сервера!).
Ответ или решение
Чтобы ограничить доступ пользователя только к определенной директории на сервере Ubuntu с использованием SCP, вам нужно учесть несколько важных моментов и внести корректировки в вашу конфигурацию. Давайте разберем процесс шаг за шагом.
Шаг 1: Создание пользователя и группы
Вы уже создали пользователя и группу, что является правильным началом. Убедитесь, что директория, к которой будет осуществляться доступ, правильно настроена:
sudo useradd scp_user -M -d /some/path
sudo groupadd scp_group
sudo usermod -aG scp_group scp_user
sudo usermod -s /bin/false scp_user # отключаем ssh-доступ
sudo chown -R scp_user:scp_group /some/path
Шаг 2: Конфигурация Chroot
Ваша конфигурация SSHD требует некоторых дополнений. Вы указали параметр ChrootDirectory
, который ограничивает пользователя в его домашнем каталоге. Однако, чтобы это работало корректно, ChrootDirectory должен быть директорией, которую может читать и изменять только root. Это означает, что структура ваших каталогов должна быть следующей:
/some/path/
└── scp_user/
└── files # Это будет место, где размещаются файлы для доступа
Ваша конфигурация SSH будет выглядеть так:
Match Group scp_group
ChrootDirectory /some/path
ForceCommand internal-sftp
AllowTcpForwarding no
Шаг 3: Использование внутреннего SFTP
Поскольку SCP требует полноценного доступа к shell (что делает использование ChrootDirectory
с scp
довольно сложным), рекомендую использовать SFTP
вместо SCP
. SFTP
менее требователен к конфигурации и также позволяет безопасно передавать файлы:
-
В вашем файле конфигурации
sshd_config
добавьте следующее:Subsystem sftp internal-sftp
-
Убедитесь, что вы указали
ForceCommand internal-sftp
, чтобы принудить пользователя использовать только SFTP для взаимодействия с сервером.
Шаг 4: Перезагрузка SSHD
После внесения изменений не забудьте перезапустить службу SSH, чтобы изменения вступили в силу:
sudo systemctl restart sshd
Шаг 5: Проверка прав доступа
Проверьте права доступа к директории, чтобы убедиться, что они установлены правильно:
sudo chmod 755 /some
sudo chmod 755 /some/path
sudo chmod 700 /some/path/scp_user
Шаг 6: Тестирование доступа
После выполнения всех шагов вы можете протестировать доступ, используя следующий команду из вашего локального компьютера:
sftp scp_user@IP
После подключения вы сможете использовать команды get
и put
для перемещения файлов в пределах ограниченного доступа к директории.
Заключение
Используя вышеуказанные шаги, вы сможете создать пользователя с ограниченным доступом к определенной директории на вашем Ubuntu сервере. Замена SCP на SFTP упростит эту задачу и обеспечит необходимую безопасность. Не забывайте следить за логами системы для выявления возможных проблем с доступом.