Настройка sftp сервера linux

Как установить и использовать SFTP на серверах Linux

SFTP или SSH File Transfer Protocol — это метод безопасной передачи данных между двумя и более компьютерами. Его FTP работает поверх протокола SSH, использует его безопасность и полностью поддерживает аутентификацию.

В настоящее время рекомендуется использовать SFTP вместо устаревшего старого протокола FTP или FTP/S. SFTP по умолчанию безопасен, потому что так работает SSH. С точки зрения безопасности SFTP также защищает вас от перехвата пароля и атаки «человек посередине» (MiTM).

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

Предпосылки

В этом руководстве вы узнаете, как настроить SFTP-сервер в системе Linux. Кроме того, вы узнаете основные команды клиента sftp.

Ниже приведена текущая среда для реализации:

  • Сервер Linux — вы можете использовать Debian, Ubuntu, CentOS, Fedora, Rocky или любой другой дистрибутив Linux.
  • Убедитесь, что пакеты OpenSSH доступны в вашей системе Linux.
  • Клиент SFTP — командная строка sftp или любой клиент с графическим интерфейсом по вашему выбору.

Проверка пакетов OpenSSH

Чтобы настроить SFTP-сервер, в вашей системе Linux должны быть установлены пакеты OpenSSH. Почти на всех серверах дистрибутивов Linux по умолчанию установлены пакеты OpenSSH. Но если в вашей системе нет пакета OpenSSH, вы можете установить его из официального репозитория.

1. Чтобы убедиться, что пакеты OpenSSH установлены в вашей системе Linux, используйте следующую команду.

Для серверов Debian или Ubuntu вы можете использовать приведенную ниже команду dpkg.

Ниже приведен вывод нашей системы Debian.

ii libssh2-1:amd64 1.9.0-2 amd64 SSH2 client-side library
ii openssh-client 1:8.4p1-5 amd64 secure shell (SSH) client, for secure access to remote machines
ii openssh-server 1:8.4p1-5 amd64 secure shell (SSH) server, for secure access from remote machines
ii openssh-sftp-server 1:8.4p1-5 amd64 secure shell (SSH) sftp server module, for SFTP access from remote machines

Первый столбец ii означает, что пакет установлен. Пакет openssh-sftp-server установлен в системе Debian/Ubuntu.

Читайте также:  Linux ubuntu все пропало

Для пользователей RHEL/CentOS/Fedora/Rocky Linux/AlmaLinux вы можете использовать команду rpm, как показано ниже.

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

На этом этапе вы создадите новую группу и пользователя для SFTP-сервера. Пользователям в этой группе будет разрешен доступ к SFTP-серверу. А по соображениям безопасности пользователи SFTP не могут получить доступ к службе SSH. Пользователи SFTP получают доступ только к серверу SFTP.

1. Выполните следующую команду, чтобы создать новую группу sftpgroup.

2. Создайте нового пользователя sftpuser с помощью следующей команды.

sudo useradd -G sftpgroup -d /srv/sftpuser -s /sbin/nologin sftpuser
  • -G : автоматически добавить пользователя в sftpgroup.
  • -d : указать домашний каталог для нового пользователя.
  • -s : установить для нового пользователя значение по умолчанию /sbin/nologin, что означает, что пользователь не может получить доступ к SSH-серверу.

3. Затем создайте пароль для пользователя sftpuser с помощью приведенной ниже команды.

Введите надежный пароль и повторите его, затем нажмите Enter для подтверждения.

Чтобы добавить других пользователей, повторите этапы 2 и 3 и, что наиболее важно, все пользователи SFTP должны входить в группу sftpgroup без доступа к оболочке через SSH.

Настройка каталога Chroot Jail

После создания новой группы и пользователя необходимо создать и настроить каталог chroot для пользователей SFTP.

1. Для пользователя sftpuser новый домашний каталог будет находиться в /srv/sftpuser. Выполните команду ниже, чтобы создать его.

2. Чтобы настроить chroot для пользователя sftpuser, вы должны сменить владельца каталога на пользователя root, но остаться группой для чтения и выполнения без права записи.

Измените владельца каталога на пользователя root, используя следующую команду.

sudo chown root /srv/sftpuser

Дайте группе разрешение на чтение и выполнение, но не на запись.

sudo chmod g+rx /srv/sftpuser

3. Затем создайте новый каталог данных внутри каталога /srv/sftpuser и измените владельца этого каталога data на пользователя sftpuser.

mkdir -p /srv/sftpuser/data
chown sftpuser:sftpuser /srv/sftpuser/data

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

  • Каталог /srv/sftuser является домашним каталогом по умолчанию.
  • Пользователь sftpuserне может писать в каталог /srv/sftpuser, но может читать внутри этого каталога.
  • Пользователь sftpuser может загружать файлы на сервер SFTP в каталоге /srv/sftpuser/data.

Включить SFTP на SSH-сервере

Чтобы включить SFTP-сервер на OpenSSH, вы должны отредактировать конфигурацию SSH /etc/ssh/sshd_config.

1. Отредактируйте конфигурацию ssh /etc/ssh/sshd_config с помощью nano или vim.

sudo nano /etc/ssh/sshd_config

2. Прокомментируйте следующую конфигурацию, чтобы отключить функцию автономного sftp-сервера.

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

3. Вставьте следующую конфигурацию в конец строки.

Subsystem sftp internal-sftp

Match Group sftpgroup
ChrootDirectory %h
X11Forwarding no
AllowTCPForwarding no
ForceCommand internal-sftp

Сохраните конфигурацию и выйдите.

  • Вместо подпроцесса sftp-server использовался internal-sftp.
  • Сервер SFTP включен для группы sftpgroup.

4. Чтобы применить новую конфигурацию, перезапустите службу ssh с помощью приведенной ниже команды.

sudo systemctl restart sshd

Сервер SFTP готов и доступен и работает на том же порту, что и служба SSH.

Доступ к SFTP-серверу

На стороне клиента мы будем использовать командную строку sftp, которая установлена по умолчанию в большинстве дистрибутивов Linux. Но вы также можете использовать другой клиент командной строки или FTP-клиент с графическим интерфейсом, например FileZilla, Cyberduck и т. д.

Читайте также:  Самые сложные дистрибутивы linux

1. Чтобы подключиться к SFTP-серверу, выполните команду sftp, как показано ниже.

Если ваш сервер SFTP и/или SSH работает на пользовательском порту, вы можете использовать команду sftp, как показано ниже.

Введите пароль для sftpuser.

2. После подключения к SFTP-серверу выполните следующую команду.

Показать рабочий каталог текущего пути и список всех доступных файлов и каталогов.

3. Загрузите локальный файл на SFTP-сервер в каталог /, что приведет к отказу в доступе, поскольку это chroot-каталог.

4. Загрузите локальный файл в каталог /data/ на SFTP-сервере. Если ваша конфигурация верна, ваш файл будет загружен в каталог /data/.

put /path/to/file1/on/local1 /data/
put /path/to/file2/on/local /data/

5. Теперь проверьте доступные файлы в каталоге /data с помощью следующей команды.

И вы увидите, что ваш файл загружен на SFTP-сервер.

Заключение

Поздравляем! Вы успешно настроили SFTP-сервер в системе Linux. Этот тип конфигурации можно применять в большинстве систем Linux с установленным поверх него OpenSSH. Кроме того, вы узнали, как настроить каталог chroot для пользователей SFTP, и изучили базовую команду клиента sftp.

Источник

A step-by-step guide to set up an SFTP file transfer server in Linux

Let’s first set up a user account typing the following commands in a terminal of the remote machine.

1. Create a user group

2. Create user

3. Assign a password to the user

4. Add user to our sftpgroup

sudo usermod -a -G sftpgroup vyndour 

6. Make user the owner of it’s own directory

sudo chown vyndour /home/vyndour 

5. Give read(r),write(w) and execute(x) access of user’s directory to only user

sudo chmod 700 /home/vyndour 

In case we need to add more users, we can repeat steps 2-6.

Now, let’s install the openssh server and set up SFTP settings.

7. First, let’s update the existing packages

sudo apt update sudo apt upgrade 

8. Install openssh-sever

sudo apt install openssh-server 

9. Open SSHD_config file

sudo nano /etc/ssh/sshd_config 

10. Copy the following lines at the end of the _sshd_config_file

# FOR SSH key authentication PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys # FOR password authentication PasswordAuthentication yes # SFTP configuration Match group sftpgroup ChrootDirectory /home X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp 
ctrl+s : save the sshd_config file and ctr+x: exit from sshd_config file

If we want SSH key authentication for SFTP file transfer, we need to set PubkeyAuthentication yes and also we need to specify the file name holding SSH public key AuthorizedKeysFile .ssh/authorized_keys . We will create SSH key in step — 12 below.

Similarly, if we want password authentication for SFTP file transfer, we need to set PasswordAuthentication yes . The password is the user’s password that we have set earlier in step-3.

11. For SSH public key authetication , follow the following steps to create and install SSH keys

Open a terminal in our local machine, and create a pair of SSH private and public keys by running the following command.

ssh-keygen -f sftp_rsa -t rsa 

Once we run the above command, two files will be generated — one private key sftp_rsa and the public key sftp_rsa.pub . Let’s Keep the private key securely with read(r) access to only the user in the user’s local system.

We can always change the type of key. Let’s stick to the default RSA type key in this tutorial.

# On user's local machine sudo chmod 400

Then, in our remote PC create a file in /home/vyndour/.ssh and name it as authorized_keys . Copy the content of public key sftp_rsa.pub from local machine to authorized_keys file in a remote machine.

Читайте также:  Nvidia driver linux install run

create a .ssh directory in the user’s directory in the remote machine.

sudo mkdir /home/vyndour/.ssh 

Open a new file with the name authorized_keys in the remote machine

 sudo nano /home/vyndour/.ssh/authorized_keys 

Manual task: copy and paste the content manually from sftp_rsa.pub (local machine) key to the authorized_keys (remote machine)

Deny write(w) and execute(x) of authorized_keys by the user with the following command in the remote machine.

sudo chmod 644 /home/vyndour/.ssh/authorized_keys 

As an alternative to the above method, you can transfer the public-key file sftp_rsa to the remote server using SCP. In our local machine, use SCP to transfer sftp_rsa.pub file to root directory of remote machine with the following command.

create a .ssh directory in the user’s directory in the remote machine.

sudo mkdir /home/vyndour/.ssh 

In the remote machine, create a file in /home/vyndour/.ssh and name it as authorized_keys , and append the key from sftp_rsa.pub file located in root directory / .

sudo touch /home/vyndour/authorized_keys sudo cat /sftp_rsa.pub >> /home/vyndour/.ssh/authorized_keys 

Deny delete of authorized_keys by the user with the following command in the remote machine.

sudo chmod 644 /home/vyndour/.ssh/authorized_keys 

Don’t forget to remove the public key from the root directory.

12. Restart SSH

Let’s now restart the ssh server with the following command:

sudo systemctl restart sshd 

13. Monitor the logs (Optional for debugging)

In case we need to debug the login through SSH, we can open the /var/log/auth.log file to live monitor the logs.

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

14. Browse User’s directory from the local machine

We can now use software like FileZilla, Cyberduck, or similar to browse the user directory in the remote machine over SFTP with the following typical entries in our local machine:

  • Host: sftp://vyndour@
  • Port : 22 # Default SSH port
  • Password: User’s password # if PasswordAuthentication yes in sshd_config file
  • Private key path: # if PubkeyAuthentication yes in sshd_config file

We are done! 🙂
I hope you enjoyed this post. I would appreciate your feedback/suggestions/comments in the comment section below.

Follow Me :

#SFTP #Linux #Ubuntu #SSH #File Transfer

Источник

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