1

Я пытаюсь предоставить доступ к локальной папке для кого-то через Интернет. Немного погуглив, я пришел к выводу, что SFTP - самая безопасная вещь, которую через брандмауэр можно раскрыть хаотическому и злому миру Интернета. Я планирую использовать openssh-сервер для этой цели. Несмотря на то, что я верю, что openssh остановит случайного злоумышленника, я не уверен в безопасности моего компьютера, когда кто-то подключится через ssh.

В частности, даже если я не даю учетной записи этого человека никаких привилегий, он может просто сказать "никто". И так как я никогда не беспокоился о таких вещах прежде, я мог бы дать некоторые умеренные привилегии никому в какой-то момент (конечно, не права sudo!).

Я бы, конечно, оценил ваши комментарии о предоставлении привилегий никому, во-первых, но на самом деле это не главное. Моя цель - предоставить SFTP-доступ кому-то в таком изолированном состоянии, чтобы мне не приходилось беспокоиться о таких вещах (по крайней мере, не больше, чем я должен был сделать раньше).

Это действительно возможно? Я говорю чепуху или беспокоюсь напрасно?

1 ответ1

2

Вы, вероятно, хотите немного укрепить сервер (посмотрите на fail2ban и измените порт с 22 как хорошее начало), но, предполагая, что я правильно прочитал ваш вопрос, вы пытаетесь закрепить за пользователем SFTP и ограничить его только возможностью использовать SFTP (в отличие от выполнения любых других команд)

Я реализовал это на одном из моих серверов с помощью следующего скрипта:

echo 'CREATING USER' $1

echo 'adding user ..'
sudo useradd -d /home/$1 -s /usr/lib/sftp-server -M -N -g sftponly $1
echo '..done'

echo '--------------'
echo 'set a password'
sudo passwd $1

echo 'creating dir structure ..'
sudo mkdir -p /home/$1/uploads /home/$1/.ssh
sudo chown $1:sftponly /home/$1/uploads /home/$1/.ssh
#
cd /home/$1
echo 'adding shares ..'
sudo mkdir -p {ebooks,misc,movies,music,tv}
echo 'ebooks' && sudo mount --rbind /home/media/ebooks /home/$1/ebooks -o ro
echo 'misc' && sudo mount --rbind /home/media/misc /home/$1/misc -o ro
echo 'movies' && sudo mount --rbind /home/media/movies /home/$1/movies -o ro
echo 'music' && sudo mount --rbind /home/media/music /home/$1/music -o ro
echo 'tv' && sudo mount --rbind /home/media/tv /home/$1/tv -o ro
#
echo '..done'

Что оно делает:

  1. Создает пользователя, добавляет его в группу sftponly и меняет его оболочку.
  2. Создает структуру каталогов для этого пользователя, чтобы закрепить их в
  3. Использует mount + rbind для монтирования существующего файлового дерева в эквивалентную папку новых пользователей (только для чтения)

Перед использованием вам необходимо подготовить систему, выполнив следующие действия:

Добавить группу

sudo addgroup sftponly

Изменить sshd_config

/etc/ssh/sshd_config и добавьте следующее:

Match group sftponly
    ChrootDirectory %h
    X11Forwarding no
    ForceCommand internal-sftp
    AllowTcpForwarding no

В этом же файле найдите строку, которая читает что-то вроде Subsystem sftp /usr/lib/openssh/sftp-server и измените на Subsystem sftp internal-sftp

Редактировать доступные оболочки

sudo nano /etc/shells

добавьте следующее внизу:

/usr/lib/sftp-server

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .