Установка sFTP в Unix/Linux

Установка 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» завершена.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.