Chroot sftp in linux

Как настроить SFTP Chroot Jail

Если вы системный администратор, управляющий сервером Linux, скорее всего, вам может потребоваться предоставить SFTP-доступ некоторым пользователям для загрузки файлов в их домашние каталоги. По умолчанию пользователи, которые могут войти в систему через SSH, SFTP и SCP, могут просматривать всю файловую систему, включая каталоги других пользователей. Это может не быть проблемой, если этим пользователям доверяют, но если вы не хотите, чтобы вошедшие в систему пользователи могли перемещаться по системе, вам необходимо ограничить доступ пользователей к их домашнему каталогу. Это добавляет дополнительный уровень безопасности, особенно в системах с несколькими пользователями.

В этом руководстве мы объясним, как настроить среду SFTP Chroot Jail, которая ограничит пользователей их домашними каталогами. Пользователи будут иметь доступ только по SFTP, доступ по SSH будет отключен. Эти инструкции должны работать для любого современного дистрибутива Linux, включая Ubuntu, CentOS, Debian и Fedora.

Создание группы SFTP

Вместо того, чтобы настраивать сервер OpenSSH для каждого пользователя индивидуально, мы создадим новую группу и добавим в эту группу всех наших chrooted-пользователей.

Выполните следующую команду groupadd чтобы создать sftponly пользователей sftponly :

Добавление пользователей в группу SFTP

Следующим шагом является добавление пользователей, которых вы хотите ограничить, в группу sftponly .

Если это новая настройка и пользователь не существует, вы можете создать новую учетную запись пользователя , набрав:

sudo useradd -g sftponly -s /bin/false -m -d /home/username username
  • Параметр -g sftponly добавит пользователя в группу sftponly.
  • Параметр -s /bin/false устанавливает оболочку входа пользователя. Установив для оболочки входа значение /bin/false пользователь не сможет войти на сервер через SSH.
  • Параметры -m -d /home/username говорят useradd создать домашний каталог пользователя.

Установите надежный пароль для вновь созданного пользователя:

В противном случае, если пользователь, которого вы хотите ограничить, уже существует, добавьте пользователя в группу sftponly и измените оболочку пользователя:

sudo usermod -G sftponly -s /bin/false username2

Домашний каталог пользователя должен принадлежать пользователю root и иметь 755 разрешений :

sudo chown root: /home/usernamesudo chmod 755 /home/username

Поскольку домашние каталоги пользователей принадлежат пользователю root, эти пользователи не смогут создавать файлы и каталоги в своих домашних каталогах. Если в доме пользователя нет каталогов, вам необходимо создать новые каталоги, к которым у пользователя будет полный доступ. Например, вы можете создать следующие каталоги:

sudo mkdir /home/username/ sudo chmod 755 /home/username/ sudo chown username:sftponly /home/username/

Если веб-приложение использует каталог пользователя public_html качестве корня документа, эти изменения могут привести к проблемам с разрешениями. Например, если вы используете WordPress, вам нужно будет создать пул PHP, который будет запускаться от имени пользователя, владеющего файлами, и добавить веб- sftponly группу sftponly .

Читайте также:  Rufus создать загрузочный диск linux

Настройка SSH

SFTP является подсистемой SSH и поддерживает все механизмы аутентификации SSH.

Откройте файл конфигурации SSH /etc/ssh/sshd_config текстовом редакторе :

sudo nano /etc/ssh/sshd_config

Найдите строку, начинающуюся с Subsystem sftp , обычно в конце файла. Если строка начинается с хеша # удалите хеш # и измените его, чтобы он выглядел следующим образом:

Subsystem sftp internal-sftp 

Ближе к концу файла следующий блок настроек:

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

Директива ChrootDirectory указывает путь к каталогу chroot. %h означает домашний каталог пользователя. Этот каталог должен принадлежать пользователю root и не иметь права записи для других пользователей или групп.

Будьте особенно осторожны при изменении файла конфигурации SSH. Неправильная конфигурация может привести к сбою запуска службы SSH.

Как только вы закончите, сохраните файл и перезапустите службу SSH, чтобы применить изменения:

sudo systemctl restart ssh

В CentOS и Fedora служба ssh называется sshd :

sudo systemctl restart sshd

Тестирование конфигурации

Теперь, когда вы настроили SFTP chroot, вы можете попытаться войти на удаленный компьютер через SFTP, используя учетные данные chrooted пользователя. В большинстве случаев вы будете использовать настольный SFTP-клиент, например FileZilla, но в этом примере мы будем использовать команду sftp .

Откройте SFTP-соединение с помощью команды sftp, за которой следует имя пользователя удаленного сервера и IP-адрес сервера или имя домена:

Вам будет предложено ввести пароль пользователя. После подключения удаленный сервер отобразит подтверждающее сообщение и приглашение sftp> :

Запустите команду pwd , как показано ниже, и если все работает, как ожидалось, команда должна вернуть / .

sftp> pwd Remote working directory: / 

Вы также можете перечислить удаленные файлы и каталоги с помощью команды ls и вы должны увидеть каталоги, которые мы создали ранее:

sftp> ls public_html uploads 

Выводы

В этом руководстве вы узнали, как настроить среду SFTP Chroot Jail на вашем сервере Linux и ограничить доступ пользователей к их домашнему каталогу.

По умолчанию SSH прослушивает порт 22. Изменение порта SSH по умолчанию добавляет дополнительный уровень безопасности на ваш сервер, снижая риск автоматических атак. Вы также можете настроить аутентификацию на основе ключа SSH и подключиться к серверу без ввода пароля.

Читайте также:  Astra linux первоначальная настройка

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Источник

SFTP chroot

OpenSSH 4.9+ includes a built-in chroot for SFTP, but requires a few tweaks to the normal install.

Installation

Install and configure OpenSSH. Once running, make sure sftp-server has been set correctly:

Subsystem sftp /usr/lib/ssh/sftp-server

Access files with sftp or SSHFS. Many standard FTP clients should work as well.

Configuration

Setup the filesystem

  • Readers may select a file access scheme on their own. For example, optionally create a subdirectory for an incoming (writable) space and/or a read-only space. This need not be done directly under /srv/ssh/jail — it can be accomplished on the live partition which will be mounted via a bind mount as well.
  • It is also possible chrooting into /home directory thus skipping the usage of bind, however the desired user home directory should be owned by root:

# chown root:root /home/ # chmod 0755 /home/

Bind mount the live filesystem to be shared to this directory. In this example, /mnt/data/share is to be used, owned by user root and has octal permissions of 755 :

# chown root:root /mnt/data/share # chmod 755 /mnt/data/share # mkdir -p /srv/ssh/jail # mount -o bind /mnt/data/share /srv/ssh/jail

Add entries to fstab to make the bind mount survive on a reboot:

/mnt/data/share /srv/ssh/jail none bind 0 0

Create an unprivileged user

Note: You do not need to create a group, it is possible to use Match User instead of Match Group .

Create a user that uses sftponly as main group and has shell login access denied:

# useradd -g sftponly -s /usr/bin/nologin -d /srv/ssh/jail username 

Set a (complex) password to prevent account is locked error (may appear even with key authentication):

Configure OpenSSH

Note: You may want to use Match User instead of Match Group as been given in the previous step.

Subsystem sftp /usr/lib/ssh/sftp-server Match Group sftponly ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no PasswordAuthentication no

Restart sshd.service to confirm the changes.

Fixing path for authorized_keys

With the standard path of AuthorizedKeysFile, the SSH keys authentication will fail for chrooted-users. To fix this, append a root-owned directory on AuthorizedKeysFile to /etc/openssh/sshd_config e.g. /etc/ssh/authorized_keys , as example:

AuthorizedKeysFile /etc/ssh/authorized_keys/%u .ssh/authorized_keys PermitRootLogin no PasswordAuthentication no PermitEmptyPasswords no Subsystem sftp /usr/lib/ssh/sftp-server

Create authorized_keys folder, generate a SSH-key on the client, copy the contents of the key to /etc/ssh/authorized_keys (or any other preferred method) of the server and set correct permissions:

# mkdir /etc/ssh/authorized_keys # chown root:root /etc/ssh/authorized_keys # chmod 755 /etc/ssh/authorized_keys # echo 'ssh-rsa ' >> /etc/ssh/authorized_keys/username # chmod 644 /etc/ssh/authorized_keys/username 

Tips and tricks

Write permissions

The bind path needs to be fully owned by root , however files and/or subdirectories do not have to be. In the following example the user www-demo uses /srv/ssh/www/demo as the jail-directory:

# mkdir /srv/ssh/www/demo/public_html # chown www-demo:sftponly /srv/ssh/www/demo/public_html # chmod 755 /srv/ssh/www/demo/public_html

The user should now be able to create files/subdirectories inside this directory. See File permissions and attributes for more information.

Читайте также:  Rust server linux install

Allow upload only

To allow only uploading files via sftp and deny downloading files, change the ForceCommand internal-sftp line:

Match Group sftponly ForceCommand internal-sftp -u 0666 -p realpath,open,write,close,lstat

Logging

The user will not be able to access /dev/log . This can be seen by running strace on the process once the user connects and attempts to download a file.

Create sub directory

Create the sub-directory dev in the ChrootDirectory , for example:

# mkdir /usr/local/chroot/user/dev # chmod 755 /usr/local/chroot/user/dev

Now you should create socket at /usr/local/chroot/user/dev/log which will be used by openssh. You may directly bind this socket to /dev/log (or /run/systemd/journal/dev-log in case you are using journald) or create using syslog-ng / rsyslog .

Bind to journald

# touch /usr/local/chroot/user/dev/log # mount --bind /run/systemd/journal/dev-log /usr/local/chroot/user/dev/log

Syslog-ng configuration

Add to /etc/syslog-ng/syslog-ng.conf a new source for the log and add the configuration, for example change the section:

#sftp configuration destination sftp < file("/var/log/sftp.log"); >; filter f_sftp < program("internal-sftp"); >; log < source(src); filter(f_sftp); destination(sftp); >;

(Optional) If you would like to similarly log SSH messages to its own file:

#sshd configuration destination ssh < file("/var/log/ssh.log"); >; filter f_ssh < program("sshd"); >; log < source(src); filter(f_ssh); destination(ssh); >;

OpenSSH configuration

Edit /etc/ssh/sshd_config to replace all instances of internal-sftp with internal-sftp -f AUTH -l VERBOSE .

Restart service

Restart service syslog-ng and sshd .

/usr/local/chroot/theuser/dev/log should now exist.

Alternatives to SFTP

Secure copy protocol (SCP)

Installing openssh provides the scp command to transfer files. SCP may be faster than using SFTP [1].

Install rssh AUR or scponly as alternative shell solutions.

Scponly

For existing users, simply set the user’s shell to scponly:

# usermod -s /usr/bin/scponly username 

Adding a chroot jail

The package comes with a script to create a chroot. To use it, run:

# /usr/share/doc/scponly/setup_chroot.sh
  • Provide answers.
  • Check that /path/to/chroot has root:root owner and r-x for others.
  • Change the shell for selected user to /usr/bin/scponlyc .
  • sftp-server may require some libnss modules such as libnss_files. Copy them to chroot’s /lib path.

See also

Источник

Оцените статью
Adblock
detector