Linux-快速搭建sftp服务
一、添加用户组sftp
groupadd sftp
cat /etc/group
[root@test data]# pwd
/home/data
[root@test data]# cat /etc/group
sftp:x:1003:
二、创建用户mysftp
// 创建用户到用户组,并禁止登录
[root@test data]# useradd -g sftp -s /bin/false mysftp
// 查看用户
cat /etc/passwd
// 修改密码
[root@test data]# passwd mysftp
Changing password for user mysftp.
New password: mysftp!#2023
BAD PASSWORD: The password contains the user name in some form
Retype new password: mysftp!#2023
passwd: all authentication tokens updated successfully.
[root@test data]#
三、创建文件夹作为用户mysftp的根目录
// 创建用户的根目录文件夹
[root@test data]# mkdir -p /home/data/sftpdata
// 将文件夹设置为用户mysftp的根目录
[root@test data]# usermod -d /home/data/sftpdata mysftp
cat /etc/passwd
四、修改sshd_config配置
[root@test data]# cd /etc/ssh
[root@test ssh]# ll
total 624
-rw-r--r-- 1 root root 578094 Mar 8 2022 moduli
-rw-r--r-- 1 root root 1578 May 22 09:56 ssh_config
-rw-r----- 1 root root 1533 May 19 09:13 ssh_config_202305190915_zkm
-rw-r--r-- 1 root root 3693 May 22 09:40 sshd_config
-rw-r----- 1 root root 3540 May 12 21:38 sshd_config_202305122140_zkm
-rw-r----- 1 root root 3722 May 13 09:25 sshd_config_202305130927_zkm
-rw-r----- 1 root root 3725 May 22 09:39 sshd_config_202305220942_zkm
-rw------- 1 root root 1401 Mar 8 2022 ssh_host_dsa_key
-rw-r--r-- 1 root root 617 Mar 8 2022 ssh_host_dsa_key.pub
-rw------- 1 root root 525 Mar 8 2022 ssh_host_ecdsa_key
-rw-r--r-- 1 root root 189 Mar 8 2022 ssh_host_ecdsa_key.pub
-rw------- 1 root root 419 Mar 8 2022 ssh_host_ed25519_key
-rw-r--r-- 1 root root 109 Mar 8 2022 ssh_host_ed25519_key.pub
-rw------- 1 root root 2610 Mar 8 2022 ssh_host_rsa_key
-rw-r--r-- 1 root root 581 Mar 8 2022 ssh_host_rsa_key.pub
[root@test ssh]# cp sshd_config sshd_config_202305271857_zkm
vim /etc/ssh/sshd_config
1)注释Subsystem sftp /usr/libexec/openssh/sftp-server(若不注释,可以通过"cd / "看到系统所有文件)
2)添加配置
[root@test ssh]# vim /etc/ssh/sshd_config
[root@test ssh]# cat /etc/ssh/sshd_config | grep -v ^# |grep -v ^$
LoginGraceTime 0m
PermitRootLogin no
MaxSessions 1000
AuthorizedKeysFile .ssh/authorized_keys
UsePAM yes
MaxStartups 1000:30:1200
Banner /etc/sshbanner
PasswordAuthentication yes
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521
MACs hmac-sha1,hmac-sha1-96,hmac-md5,hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160
Subsystem sftp internal-sftp
Match User sftp
ChrootDirectory /home/data/sftpdata/mysftp
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
[root@test ssh]#
Match Group sftp:匹配sftp组的用户,如果有多个组,用逗号分隔。也可以使用"Match User mysftp"匹配用户,多个用户之间也是用逗号分隔。
ChrootDirectory /home/data/sftpdata/mysftp:将用户的根目录指定到/home/data/sftpdata/mysftp
ForceCommand internal-sftp:指定sftp命令。
X11Forwarding no:是否允许用户可以使用端口转发。
五、修改用户mysftp的根目录,让其属于root
[root@test ssh]# chown root:sftp /home/data/sftpdata
[root@test ssh]# chmod 755 /home/data/sftpdata
六、创建用户mysftp可写入的目录,并授权
// 由于sshd_config配置中指定了根目录,根目录无法写入,因此要创建一个用于上传文件的目录。
// 目录所有者为mysftp,有写入权限;所有组为sftp,无写入权限。
// 由于sshd_config配置中指定了根目录,根目录无法写入,因此要创建一个用于上传文件的目录。
// 目录所有者为mysftp,有写入权限;所有组为sftp,无写入权限。
[root@test ssh]# mkdir /home/data/sftpdata/commandInfo
[root@test ssh]# chown mysftp:sftp /home/data/sftpdata/commandInfo
[root@test ssh]# chmod 755 /home/data/sftpdata/commandInfo
七、关闭Selinux策略
vim /etc/selinux/config
修改SELINUX=disabled,否则重启sshd会提示权限不够。
八、重启ssh服务
[root@test home]# /bin/systemctl restart sshd.service
[root@test home]# systemctl restart sshd
九、连接验证
sftp mysftp@127.0.0.1
sftp安装已经完成。
groupadd sftp
cat /etc/group
[root@test data]# pwd
/home/data
[root@test data]# cat /etc/group
sftp:x:1003:
二、创建用户mysftp
// 创建用户到用户组,并禁止登录
[root@test data]# useradd -g sftp -s /bin/false mysftp
// 查看用户
cat /etc/passwd
// 修改密码
[root@test data]# passwd mysftp
Changing password for user mysftp.
New password: mysftp!#2023
BAD PASSWORD: The password contains the user name in some form
Retype new password: mysftp!#2023
passwd: all authentication tokens updated successfully.
[root@test data]#
三、创建文件夹作为用户mysftp的根目录
// 创建用户的根目录文件夹
[root@test data]# mkdir -p /home/data/sftpdata
// 将文件夹设置为用户mysftp的根目录
[root@test data]# usermod -d /home/data/sftpdata mysftp
cat /etc/passwd
四、修改sshd_config配置
[root@test data]# cd /etc/ssh
[root@test ssh]# ll
total 624
-rw-r--r-- 1 root root 578094 Mar 8 2022 moduli
-rw-r--r-- 1 root root 1578 May 22 09:56 ssh_config
-rw-r----- 1 root root 1533 May 19 09:13 ssh_config_202305190915_zkm
-rw-r--r-- 1 root root 3693 May 22 09:40 sshd_config
-rw-r----- 1 root root 3540 May 12 21:38 sshd_config_202305122140_zkm
-rw-r----- 1 root root 3722 May 13 09:25 sshd_config_202305130927_zkm
-rw-r----- 1 root root 3725 May 22 09:39 sshd_config_202305220942_zkm
-rw------- 1 root root 1401 Mar 8 2022 ssh_host_dsa_key
-rw-r--r-- 1 root root 617 Mar 8 2022 ssh_host_dsa_key.pub
-rw------- 1 root root 525 Mar 8 2022 ssh_host_ecdsa_key
-rw-r--r-- 1 root root 189 Mar 8 2022 ssh_host_ecdsa_key.pub
-rw------- 1 root root 419 Mar 8 2022 ssh_host_ed25519_key
-rw-r--r-- 1 root root 109 Mar 8 2022 ssh_host_ed25519_key.pub
-rw------- 1 root root 2610 Mar 8 2022 ssh_host_rsa_key
-rw-r--r-- 1 root root 581 Mar 8 2022 ssh_host_rsa_key.pub
[root@test ssh]# cp sshd_config sshd_config_202305271857_zkm
vim /etc/ssh/sshd_config
1)注释Subsystem sftp /usr/libexec/openssh/sftp-server(若不注释,可以通过"cd / "看到系统所有文件)
2)添加配置
[root@test ssh]# vim /etc/ssh/sshd_config
[root@test ssh]# cat /etc/ssh/sshd_config | grep -v ^# |grep -v ^$
LoginGraceTime 0m
PermitRootLogin no
MaxSessions 1000
AuthorizedKeysFile .ssh/authorized_keys
UsePAM yes
MaxStartups 1000:30:1200
Banner /etc/sshbanner
PasswordAuthentication yes
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521
MACs hmac-sha1,hmac-sha1-96,hmac-md5,hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160
Subsystem sftp internal-sftp
Match User sftp
ChrootDirectory /home/data/sftpdata/mysftp
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
[root@test ssh]#
Match Group sftp:匹配sftp组的用户,如果有多个组,用逗号分隔。也可以使用"Match User mysftp"匹配用户,多个用户之间也是用逗号分隔。
ChrootDirectory /home/data/sftpdata/mysftp:将用户的根目录指定到/home/data/sftpdata/mysftp
ForceCommand internal-sftp:指定sftp命令。
X11Forwarding no:是否允许用户可以使用端口转发。
五、修改用户mysftp的根目录,让其属于root
[root@test ssh]# chown root:sftp /home/data/sftpdata
[root@test ssh]# chmod 755 /home/data/sftpdata
六、创建用户mysftp可写入的目录,并授权
// 由于sshd_config配置中指定了根目录,根目录无法写入,因此要创建一个用于上传文件的目录。
// 目录所有者为mysftp,有写入权限;所有组为sftp,无写入权限。
// 由于sshd_config配置中指定了根目录,根目录无法写入,因此要创建一个用于上传文件的目录。
// 目录所有者为mysftp,有写入权限;所有组为sftp,无写入权限。
[root@test ssh]# mkdir /home/data/sftpdata/commandInfo
[root@test ssh]# chown mysftp:sftp /home/data/sftpdata/commandInfo
[root@test ssh]# chmod 755 /home/data/sftpdata/commandInfo
七、关闭Selinux策略
vim /etc/selinux/config
修改SELINUX=disabled,否则重启sshd会提示权限不够。
八、重启ssh服务
[root@test home]# /bin/systemctl restart sshd.service
[root@test home]# systemctl restart sshd
九、连接验证
sftp mysftp@127.0.0.1
sftp安装已经完成。