Linux - 建设篇
第二章 Linux部署SFTP服务
系列文章回顾
下章内容
Linux虚拟机安装SSH服务
SFTP是基于默认的22端口,是ssh内含的协议,只要启动了sshd就可以使用。sftp采用的是ssh加密隧道,安装性方面较ftp强,而且依赖的是系统自带的ssh服务
本次使用liunx自带的internal-sftp
创建ftp所属组的用户,设置密码,创建用户家目录
### useradd添加用户
### -M 不创建用户家目录; -d 指定用户家目录; -g 指定用户的所属组; -c 给用户添加备注
useradd -M -d /data/backup001/ -g ftp -c Allow_SFTP_Users backup001
passwd backup001 # 设置用户的密码
mkdir -p /data/backup001/ # useradd 使用 -M 参数不会创建用户家目录,此例子将自建用户家目录并设置chown和chmod
使用ssh免密登录时,用户家目录的所属组权限如下
chown backup001:ftp /data/backup001/ # 将目录的所属组改为用户和用户所属组
# 查看用户信息
id backup001
uid=1001(backup001) gid=50(ftp) groups=50(ftp)
修改sshd服务的配置文件,配置ssh密钥登录实现免密
vim /etc/ssh/sshd_config
...
# override default of no subsystems
Subsystem sftp internal-sftp -l INFO -f local5
LogLevel INFO
# Example of overriding settings on a per-user basis
Match User backup001
ChrootDirectory /data/backup001/ # 设置用户根目录
PermitTunnel no # 禁止tunnel隧道转发
AllowAgentForwarding no # 取消ssh客户端转发
AllowTcpForwarding no # 取消tcp的端口转发
X11Forwarding no # 取消X11协议转发,X11通常是传输Linux的GUI界面
PermitTTY no # 禁止用户登录tty终端
ForceCommand internal-sftp # 指定sftp命令,强制执行内部sftp,并忽略任何 ~/.ssh/rc文件中的命令
### 重启sshd服务
systemctl restart sshd # 重启sshd服务
systemctl status sshd # 查看sshd服务运行状态
配置sshd的免密登录
mkdir -p /data/backup001/.ssh # 创建ssh服务连接的目录
ssh-keygen -t rsa -b 2048 -m pem -f /data/backup001/.ssh/rsa2048pem -N '' -C 'backup001@server'
touch authorized_keys
tail /data/backup001/.ssh/rsa2048pem >> authorized_keys # 存储ssh密钥的文件,自行添加sftp用户的pub公钥内容到该文件
chmod 705 /data/backup001/.ssh # 访问者不会携带Linux的任何用户权限,会被判定成other用户权限,所以要给other用户添加(读取和执行)权限。此例不给group属组任何权限,此sftp用户不允许属组其他用户套权限登录sftp,但允许属组用户访问此sftp目录
chmod 600 /data/backup001/.ssh/authorized_keys # ssh密钥文件只有所有者有读取写入权限
chown backup001:ftp /data/backup001/.ssh/authorized_keys # 修改ssh授权认证文件的属主
使用sftp服务及sftp免密登录时,用户家目录的所属组权限如下
chown root:root /data/backup001/ # 将目录的所属组改为root, 目录的所有者和属组必须是root
配置sftp用户可上传的目录及权限
### /data/backup001/ 目录的所有者和属组必须是root,而且权限只能是默认的755,否则导致sftp用户免密登录失败
mkdir -p /data/backup001/backup # 新建一个目录,用于存放sftp传输的文件
chown backup001:ftp /data/backup001/backup # 将目录的所有者和属组修改成sftp用户可访问,目录权限默认是755(若没有改过umask配置)
安全加固:修改ssh端口,ssh监听指定IP,ssh禁止密码登录仅允许密钥登录,root只能密钥登录
vim /etc/ssh/sshd_config
...
Port 2222 # ssh端口2222
ListenAddress 10.0.0.1 # ssh监听10.0.0.1
PermitRootLogin without-password # root禁用密码登录,配合 PubkeyAuthentication yes 就是仅允许密钥登录root
PubkeyAuthentication yes # 启用ssh密钥登录
AuthorizedKeysFile .ssh/authorized_keys # ssh密钥认证文件路径
PasswordAuthentication no # ssh禁用密码登录
ChallengeResponseAuthentication no # 取消挑战(询问)应答机制,即禁止给ssh用户交换公钥
RSAAuthentication yes # 启用RSA密钥认证
测试验证
# ssh免密登录
ssh -i backup001 backup001@x.x.x.x -p 22
# scp免密传输文件
scp -i backup001 -P 22 file01 backup001@x.x.x.x:/tmp/
# sftp免密登录
sftp -i backup001 -P 22 backup001@x.x.x.x
(截图略)