Linux new user chroot sftp

Настройка домашнего каталога SFTP или SSH Chroot

По умолчанию, при подключении по SFTP пользователь имеет возможность спускаться по дереву каталогов и видеть структуру папок. А при наличии прав, редактировать и удалять файлы. Доступ можно ограничить, создав специальное окружение для определенной папки и всех ее подпапок.

1. Настройка SSH

Открываем конфигурационный файл openssh:

Комментируем следующую строку:

#Subsystem sftp /usr/lib/openssh/sftp-server

Добавляем следующее (обязательно в самый конец файла).

Для определенного пользователя:

Subsystem sftp internal-sftp -f AUTH -l VERBOSE
Match user sftpuser
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no

* где sftpuser — имя пользователя, для которого срабатывает набор правил; %h (home directory) — домашняя директория пользователя (здесь также можно указать конкретный каталог); ForceCommand internal-sftp — использовать только sftp, встроенный в ssh.
** если данные строки добавить не в конец файла, сервис ssh может не запуститься.

Для группы пользователей:

Subsystem sftp internal-sftp -f AUTH -l VERBOSE
Match group sftpgroup
ChrootDirectory /home/%u
ForceCommand internal-sftp
AllowTcpForwarding no

* как видим, в данном примере все то же самое — только меняем user на group. /home/%u — другой способ прописать путь к домашней директории (/home + имя пользователя).

После перезапускаем службу:

systemctl restart ssh || systemctl restart sshd || service ssh restart || service sshd restart

* команда рассчитана на запуск в разных версиях Linux (CentOS / Ubuntu / Red Hat / Debian и так далее, а также на базе systemd или ранних версий), так как служба может называться ssh или sshd.

2. Создание пользователя и группы

Если в системе еще нет группы или пользователя, для которого мы настроили SSH chroot, выполняем следующие команды.

Создание пользователя

useradd sftpuser -d /home/sftpuser -m

* где sftpuser — имя пользователя; /home/sftpuser — домашний каталог пользователя.

Задаем пароль для пользователя:

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

Для добавления пользователя в группу можно воспользоваться командой:

usermod sftpuser -G sftpgroup

или отредактировать файл:

* 1004 — идентификатор группы (может быть любым числом).

3. Выставление прав на каталог

При попытке подключиться по SFTP мы получим ошибку fatal: bad ownership or modes for chroot directory, так как необходимо выставить правильные права. Система требует, чтобы все каталоги пути имели права 755 и их владельцем был root.

В нашем примере мы выполняем следующие команды:

chown root: /home/sftpuser

chmod 755 /home/sftpuser

Права будут следующие:

drwxr-xr-x 2 root root 4096 окт. 30 09:00 /home/sftpuser/

Проверка и решение проблем

Проверить настройку можно с помощью любого sftp-клиента, например Filezilla или WinSCP.

При возникновении проблем, стоит просмотреть лог

tail -f -n20 /var/log/auth.log

tail -f -n20 /var/log/secure

* первая команда подходит для систем на базе RPM, вторая — Debian.

Lshell как альтернатива chroot ssh

По сути, это более простой способ настроить окружение chroot для пользователя UNIX систем.

Читайте также:  Разметка диска после установки windows

Его развертывание сводится к установке:

yum install lshell

apt-get install lshell

* первая команда для Red Hat / CentOS / Fedora . вторая — Debian / Ubuntu.

Источник

SFTP chroot

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

Contents

Installation

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

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

Configuration

Setup the filesystem

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 :

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

Create an unprivileged user

Create the sftponly user group:

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

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

Configure OpenSSH

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:

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:

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:

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

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:

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

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:

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

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:

See the Scponly Wiki for more details.

Adding a chroot jail

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

  • 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.

Источник

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

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

Читайте также:  Сервер автоматической установки windows

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

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

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

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

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

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

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

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

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

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

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

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

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

Настройка SSH

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Файлы ответов для windows 10 wds

Выводы

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

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

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

Источник

How to Configure Chroot SFTP Server in Linux

There are some scenario where system admin wants only few users should be allowed to transfer files to Linux boxes but no ssh. We can achieve this by setting up SFTP in chroot environment.

Background of SFTP & chroot :

SFTP stands for SSH File Transfer protocol or Secure File Transfer Protocol. SFTP provides file access, file transfer, and file management functionalities over any reliable data stream. When we configure SFTP in chroot environment , then only allowed users will be limited to their home directory , or we can say allowed users will be in jail like environment where they can’t even change their directory.

In article we will configure Chroot SFTP server on RHEL & CentOS system . We have one user ‘Jack’ , this user will be allowed to transfer files on Linux box but no ssh access.

Step :1) Create a group

Create sftp_users group using groupadd command,

Step: 2) Assign the secondary group(sftp_users) to the user

If the users doesn’t exist on system , use below command command to create it,

For already existing users , use below usermod command :

Note : If you want to change the default home directory of users , then use ‘-d’ option in useradd and usermod command and set the correct permissions.

Step :3) Now edit the config file “/etc/ssh/sshd_config”

Edit the sshd_config using your favorite editor,

Where :

Match Group sftp_users – This indicates that the following lines will be matched only for users who belong to group sftp_users
ChrootDirectory %h – This is the path(default user’s home directory) that will be used for chroot after the user is authenticated. So, for Jack, this will be /home/jack.
ForceCommand internal-sftp – This forces the execution of the internal-sftp and ignores any command that are mentioned in the

After making the above changes, restart the ssh service using following command,

Step :4) Set the required permissions on user’s home directory

As in our demonstration we are using jack user as sftp user, so run the following commands to set the required permissions on his home directory,

In case you want that jack user should be allowed to upload files, then create a upload folder with the below permissions ,

In case selinux is enabled on your system then execute the following command to set selinux rules ,

Step :5) Test Sftp server

First try to access the system using ssh via jack user,

As we can see in output above user jack is allowed to ssh.

Now let’s try to login using sftp,

As you can see above, jack user is logged in via SFTP and but can’t change the directory because of chroot environment.

Now do the uploading and downloading testing as shown below:

As we can see above , both uploading & downloading working fine for jack user. That’s conclude the article, you are most welcome to share your feedback and comments in the comments sections below.

Источник

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