Пользователь может получить доступ только к одной директории с помощью scp.

Вопрос или проблема

Я хочу создать пользователя для моего сервера 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 менее требователен к конфигурации и также позволяет безопасно передавать файлы:

  1. В вашем файле конфигурации sshd_config добавьте следующее:

    Subsystem sftp internal-sftp
  2. Убедитесь, что вы указали 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 упростит эту задачу и обеспечит необходимую безопасность. Не забывайте следить за логами системы для выявления возможных проблем с доступом.

Оцените материал
Добавить комментарий

Капча загружается...