
Установка sFTP в Unix/Linux
Sftp (SSH или Secure file transfer protocol). Вместо того чтобы использовать VSFTPD можно использовать SFTP, Sftp является единственным безопасным способом для передачи/отправки по сравнению с VSFTPD. Sftp выполняет все операции по зашифрованному SSH соединению. Если пользователь разрешил доступ только к своим файлам без доступа SSH, то можно создать CHROOT для пользователя.
Я для примера, возьму готовый мой сервер на CentOS 7 и покажу как можно настроить sFTP на нем. По мере необходимости, я буду дополнять данную статью настройками для других Unix/Linux ОС.
Данные на котором будет тестироваться sFTP:
- Хостнейм (доменное имя): prod.linux-notes.org
- IP адрес : 66.66.66.66
Можно проверить следующими командами:
CentOS 7/ RedHat 7:
# hostnamectl # ip addr show | grep inet
CentOS/Fedora/RedHat (5-6):
# hostname # ifconfig
Создание группы (group) для SFTP
Для начала, обновим ОС:
# yum update -y
PS: Если не установлен SSH на сервере ( у меня он уже установлен), то нужно установить следующий пакет:
# yum -y install openssh-server
Во-первых, необходимо создать группу для SFTP:
# groupadd sftp
Создаем пользователя:
# useradd sftp_user_1
Устанавливаем ему пароль:
# passwd sftp_user_1
Затем, вносим созданного пользователя в созданную SFTP группу:
# usermod -G sftp sftp_user_1
Так делать не стоит! Потому что, данный пользователь получит SSH доступ на сервер, а нам нужно только дать данному юзеру sFTP доступ, по этому, делаем следующее:
# useradd -m sftp_user_1 -s /sbin/nologin -g sftp # passwd sftp_user_1 # chown root /home/sftp_user_1 # chmod 750 /home/sftp_user_1 # mkdir /home/sftp_user_1 # chown sftp_user_1:sftp /home/sftp_user_1
Если вы собираетесь использовать FTP и SFTP на том же самом сервере, вы должны следовать шагам что выше при создании пользователей. Для существующих пользователей, необходимо выполнить условия ниже:
# usermod sftp_user_1 -g sftp # chown root /home/sftp_user_1 # chmod 750 /home/sftp_user_1 # mkdir /home/sftp_user_1 # chown sftp_user_1:sftp /home/sftp_user_1
Проверяем:
# id sftp_user_1
Настройка Sftp
Отредактируем sshd_config для настройки SFTP:
# vim /etc/ssh/sshd_config
Ищем строку ( у меня это 147-148) и комментируем следующую строку:
[...] Subsystem sftp /usr/libexec/openssh/sftp-server [...]
И заменяем на следующую строку:
[...] Subsystem sftp internal-sftp [...]
Добавьте следующие строки в конец файла:
Match Group sftp X11Forwarding no AllowTcpForwarding no ChrootDirectory /home/%u ForceCommand internal-sftp
Перезапускаем службу ssh демона:
# systemctl restart sshd
или
# service sshd restart
Проверяем SFTP соединение:
# sftp sftp_user_1@66.66.66.66
И проверяем не разрешено ssh соединение для пользователя:
# ssh sftp_user_1@66.66.66.66
Выше мы можете видеть что пользователь sftp_user_1 определен только SFTP, он не может получить доступ к SSH.
Вот готовый скрипт:
#!/bin/bash -x # CREATED: # vitaliy.natarov@yahoo.com # # Unix/Linux blog: # http://linux-notes.org # Vitaliy Natarov # read -p "Username of SFTP user:" USERNAME if id -u "$USERNAME" >/dev/null 2>&1; then echo "Username $USERNAME is exist. Try to add different username." exit 1; fi #check if sftp group exist egrep -i "^sftp:" /etc/group >/dev/null 2>&1; if [ $? -ne 0 ]; then groupadd sftp SFTPGROUP=sftp; else SFTPGROUP=sftp; fi #add user USERPASS=`date | md5sum | base64 | head -c 10; echo` adduser $USERNAME >/dev/null 2>&1; echo $USERPASS | passwd $USERNAME --stdin >/dev/null 2>&1; #add to sftp group usermod -G $SFTPGROUP $USERNAME #set chroot chmod 755 /home/$USERNAME; chown root.root /home/$USERNAME; rm -f /home/$USERNAME/.bash*; chsh -s /sbin/nologin $USERNAME >/dev/null 2>&1; #check if sftp subsystem is configured in /etc/ssh/sshd_config cat /etc/ssh/sshd_config | grep -i "^Subsystem" | grep -i internal-sftp >/dev/null 2>&1; if [ $? -ne 0 ]; then echo sftp susbsyetm is not configured echo Configuring... sleep 2; sed -i "/^Subsystem.*sftp.*sftp-server$/s/^/#/" /etc/ssh/sshd_config; cat >> /etc/ssh/sshd_config << "EOF" Subsystem sftp internal-sftp Match group sftp ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no EOF fi #check sshd config sshd -t if [ $? -ne 0 ]; then echo Syntax error in sshd config. Please check manualy exit 1; else /etc/init.d/sshd restart >/dev/null 2>&1; fi echo "" echo "" echo "If you would like to mount some dir. You still need to edit /etc/fstab..." echo "|---------------------------------------------------|"; echo "|--------------------FINISHED-----------------------|"; echo "|---------------------------------------------------|";
Вот и все, тема «Установка sFTP в Unix/Linux» завершена.