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