ssh下載地址:
https://mina.apache.org/sshd-project/downloads.html
sftp基本介紹:
sftp是Secure File Transfer Protocol的縮寫,安全文件傳送協議。可以爲傳輸文件提供一種安全的加密方法。sftp 與 ftp有着幾乎一樣的語法和功能。SFTP 爲 SSH的一部份,和vsftpd一點關係沒有,是一種傳輸檔案至 Blogger 伺服器的安全方式。本身沒有守護進程,是包含在ssh中,默認端口也是22。
sftp服務器有兩種搭建方式:
1、直接在系統上新建一個用戶即可,此種方式最簡單,但最不安全,用戶sftp登陸之後可以隨意切換目錄,切用戶可以ssh登陸到系統,很不安全,生產環境中不會這麼幹,故不介紹;
2、標準sftp的搭建
sftp搭建 方式1
##系統已經有並且啓動了ssh服務的情況下;
1.添加sftp用戶
adduser user1
passwd user1
usermod -s /bin/false user1
usermod -d /data/wwwroot/user1/ user1
2.修改sftp配置
vi /etc/ssh/sshd_config
##找到 Subsystem sftp 這一行,修改成:
Subsystem sftp internal-sftp
UsePAM yes
Match user user1
ForceCommand internal-sftp
ChrootDirectory /data/wwwroot/user1/
##多個用戶請重複配置這三行:
Match user user2
ForceCommand internal-sftp
ChrootDirectory /data/wwwroot/user2/
3.設置sftp用戶目錄和權限
mkdir /data/wwwroot/user1/upload chown -R sftpuser1:root /data/wwwroot/user1/upload
chmod -R 755 /data
chmod -R 775 /data/wwwroot/user1/upload
4.啓動ssh服務
service sshd restart ##重啓ssh服務
或者
/etc/init.d/sshd restart
或者
kill -9 `ps -ef| grep "/usr/sbin/sshd -D" | awk '{print $2}'` >/dev/null 2>&1
/usr/sbin/sshd -D &
給sftp新用戶的家目錄的權限設定有幾個要點:
1、由 ChrootDirectory 指定的目錄開始一直往上到系統根目錄爲止的目錄擁有者都只能是 root
2、由 ChrootDirectory 指定的目錄開始一直往上到系統根目錄爲止都不可以具有羣組寫入權限(最大權限 755)
3.如果需要添加管理員用戶,可以設置ChrootDirectory目錄屬組爲sftp,然後把所有的用戶和管理員用戶屬組均改爲sftp.具體可參考Dockerfile實例部分。
或者通過軟鏈接實現:
ln -s /sftp/wwwroot /sftp/wwwroot/admin
password=`mkpasswd admin`;useradd -b /sftp/admin admin;echo "admin:$password" | chpasswd;echo $password
SFTP搭建 方式2
##在沒有ssh的鏡像或者系統中;以及通過用戶組方式控制sftp用戶登陸;
1.ssh安裝配置
yum install -y curl tar unzip which sudo initscripts openssh-server openssh-clients rsync
yum install -y libaio.so.1* ll* vim*
yum update -y libselinux
echo 'root'| passwd --stdin root
ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key
ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -q -N "" -t rsa -f /root/.ssh/id_rsa
ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_ed25519_key
cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
sed -i "/^[^#]*UsePAM/ s/.*/#&/" /etc/ssh/sshd_config
echo "Port=39535" >> /etc/ssh/sshd_config
###添加sftp用戶
groupadd sftp
cat /etc/group
mkdir -p /data/sftp
useradd -d /data/sftp/mysftp -s /bin/false -g sftp mysftp
rm -rf /data/sftp/mysftp/.bash*
echo mysftp |passwd --stdin mysftp
##編輯sftp配置
vi /etc/ssh/sshd_config
##先註釋下面一行,
# Subsystem sftp /usr/libexec/openssh/sftp-server
##然後添加以下配置:
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
備註:
# 註釋掉該行
# Subsystem sftp /usr/lib/openssh/sftp-server
# 使用系統默認的sftp服務
Subsystem sftp internal-sftp
# 匹配組名 sftp
Match Group sftp
# 指定活動目錄
ChrootDirectory /data/sftp/%u
# 由ChrootDirectory指定的目錄開始一直往上到系統根目錄的目錄屬主都是root.
# 由ChrootDirectory指定的目錄開始一直往上到系統根目錄都不可以具有羣組寫入權限.
# 禁用端口轉發
AllowTcpForwarding no
X11Forwarding no
# 強制執行內部SFTP,並忽略任何~/.ssh/rc中的命令
ForceCommand internal-sftp
##設置Chroot目錄權限
chown root:sftp /data
chown root:sftp /data/sftp
chown root:sftp /data/sftp/mysftp
chmod 755 /data/sftp/mysftp
##新建一個目錄供sftp用戶mysftp上傳文件
mkdir /data/sftp/mysftp/upload
chown mysftp:sftp /data/sftp/mysftp/upload
chmod 755 /data/sftp/mysftp/upload
##啓動sshd服務
service sshd start
或者
/usr/sbin/sshd -D &
##驗證sftp登陸使用:
sftp -P 39535 mysftp@localhost
##新建測試用戶:
useradd -d /data/sftp/119sftp -s /bin/false -g sftp 119sftp
rm -rf /data/sftp/119sftp/.bash*
echo 119sftp |passwd --stdin 119sftp
chown root:sftp /data/sftp/119sftp
mkdir /data/sftp/119sftp/upload
chown 119sftp:sftp /data/sftp/119sftp/upload
chmod 755 /data/sftp/119sftp
chmod 755 /data/sftp/119sftp/upload
##登陸測試
sftp -P 39535 119sftp@localhost