- 1.原理
- 1.1 daemon和service
- 1.2 sftp
- 2.分离SSH和SFTP服务
- 2.1 复制SSH相关文件,作为sftp的配置文件
- 2.1.1 /usr/lib/systemd/system/sshd.service
- 2.1.2 /etc/pam.d/sshd
- 2.1.3 /etc/ssh/sshd_config
- 2.1.4 /usr/sbin/service
- 2.1.5 /usr/sbin/sshd
- 2.1.6 /etc/sysconfig/sshd
- 2.1.7 /var/run/sshd.pid
- 2.2 修改SFTP配置文件
- 2.2.1 /etc/systemd/system/sftpd.service
- 2.2.2 /etc/ssh/sftpd_config
- 2.2.2.1 Port
- 2.2.2.2 PermitRootLogin
- 2.2.2.3 PidFile
- 2.2.2.4 Subsystem
- 2.2.2.5 添加sftpusers用户组并创建用户目录
- 3.启动sftp服务
- 3.1 禁用SELINUX
- 3.1 启动服务
- 3.2 登录验证
- 4. 22端口禁止sftpusers用户登录(非必须)
- 4.1
Linux操作系统提供的服务称为Service,而提供服务的程序称为Daemon。举例来说,达成循环型例行性工作排程服务(service)的程序为crond这个daemon。我理解通过servie启动特定配置的daemon。
1.2 sftpSFTP是SSH的一部分,SFTP没有单独的守护进程,它必须使用SSHD守护进程(端口号默认是22)来完成相应的连接操作。
通过新建另一个‘sshd’进程,作为sftp服务的deamon,完成服务分离。
系统内开启ssh服务和sftp服务都是通过/usr/sbin/sshd这个后台程序监听22端口,而sftp服务作为一个子服务,是通过/etc/ssh/sshd_config配置文件中的Subsystem实现的,如果没有配置Subsystem参数,则系统是不能进行sftp访问的。
2.1 复制SSH相关文件,作为sftp的配置文件 2.1.1 /usr/lib/systemd/system/sshd.service拷贝/usr/lib/systemd/system/目录下的sshd.service文件,放到/etc/systemd/system/目录下,命名为:sftpd.service
cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/sftpd.service2.1.2 /etc/pam.d/sshd
cp /etc/pam.d/sshd /etc/pam.d/sftpd2.1.3 /etc/ssh/sshd_config
cp /etc/ssh/sshd_config /etc/ssh/sftpd_config2.1.4 /usr/sbin/service
对sshd和sftpd进行软连接
ln -sf /usr/sbin/service /usr/sbin/rcsftpd2.1.5 /usr/sbin/sshd
对sshd和sftpd进行软连接
ln -sf /usr/sbin/sshd /usr/sbin/sftpd2.1.6 /etc/sysconfig/sshd
cp /etc/sysconfig/sshd /etc/sysconfig/sftp2.1.7 /var/run/sshd.pid
复制并清空
cp /var/run/sshd.pid /var/run/sftpd.pid > /var/run/sftpd.pid2.2 修改SFTP配置文件 2.2.1 /etc/systemd/system/sftpd.service
vim /etc/systemd/system/sftpd.service
修改红框中的部分
如下红色字体部分
[Unit]
Description=sftpd server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sftp
ExecStart=/usr/sbin/sftpd -f /etc/ssh/sftpd_config
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
2.2.2 /etc/ssh/sftpd_config
vim /etc/ssh/sftpd_config
输入:set nu
2.2.2.1 Port找到第17行,将
Port 22
改成
Port 22222.2.2.2 PermitRootLogin
找到第38行,将
#PermitRootLogin yes
改成
PermitRootLogin no
就是取消该行的注释,并将yes改成no,这行参数的目的是拒绝root用户登录
2.2.2.3 PidFile③找到116行,将
#PidFile /var/run/sshd.pid
改成
PidFile /var/run/sftpd.pid
就是取消该行的注释,并将sshd.pid改成sftpd.pid
2.2.2.4 Subsystem找到第132行,将
Subsystem sftp /usr/libexec/openssh/sftp-server
注释
#Subsystem sftp /usr/libexec/openssh/sftp-server并添以下6行
Subsystem sftp internal-sftp # 指定使用sftp服务使用系统自带的internal-sftp Match Group sftpusers # 匹配sftp组的用户,若要匹配多个组,可用逗号分开 X11Forwarding no # 禁止用户使用端口转发 AllowTcpForwarding no # 禁止用户使用端口转发 ForceCommand internal-sftp # 只能用于sftp登录 ChrootDirectory /home/sftp # 限制用户的根目录2.2.2.5 添加sftpusers用户组并创建用户目录
groupadd sftpusers mkdir -p /home/sftp chown root:root /home/sftp chmod 755 /home/sftp mkdir -p /u01/scripts vim /u01/sftpuseradd.sh
输入以下内容
#! /bin/bash useradd -g sftpusers -d /home/sftp/$1 $1 chown $1:sftpusers /home/sftp/$1 # 文件所属用户读写执行,属组用户、其他用户无权限 chmod 700 /home/sftp/$1 echo $2 | passwd --stdin $1
增加执行权限,并添加用户
chmod 755 /u01/sftpuseradd.sh # 第一个参数账号,第二个参数密码 sh /u01/sftpuseradd.sh sftpu xxxxxxxx sh /u01/sftpuseradd.sh sftpu2 xxxxxxxx3.启动sftp服务 3.1 禁用SELINUX
setenforce 0 sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config 若不设置,启动sftp时将报错,无法使用上面绑定的2222端口3.1 启动服务
systemctl daemon-reload #使修改的sshd配置生效 systemctl start sftpd #启动sftp3.2 登录验证
不能访问sftpu2用户文件夹
上传文件成功
编辑配置文件
vim /etc/ssh/sshd_config
个性化配置
#禁止指定用户登录,多个用户时用空格分隔 DenyUsers sftpu sftpu2 #禁止指定用户组登录,多个组时用空格分隔 DenyGroups sftpusers #只允许这两个用户从192.168.0.101登录 AllowUsers sftpu sftpu2@192.168.0.101
重启sshd服务
systemctl restart sshd
参考博文: link
参考博文: link
参考博文: link



