禁用用户SSH登陆,SFTP锁定指定目录配置详解

SFTP,即 SSH 文件传输协议,或者说是安全文件传输协议, 通过SSH端口加密传输。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多。SFTP的优势在于SSH软件包中包含SFTP(无需额外安装),iptables无需添加额外端口,配置方便

0x00 添加用户

在默认情况下, SFTP 使用 SSH 协议进行身份验证并建立安全连接,所以直接使用命令添加账户。

添加组

1
groupadd sftp

再添加账户

1
2
3
useradd -g sftp -M -N -s /sbin/nologin user
#添加username用户并且禁止此用户login系统

查询用户是否添加到组

1
2
3
[[email protected] data]# groups user
user : sftp

设置密码

1
2
3
4
5
[[email protected] data]# passwd user
更改用户 user 的密码 。
新的 密码:
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。

0x01 修改sshd_config配置文件

编辑配置文件:/etc/ssh/sshd_config

修改Subsystem sftp /usr/libexec/openssh/sftp-serverSubsystem sftp internal-sftp

以下是对sftp组权限配置

1
2
3
4
5
6
7
8
9
#匹配 sftp 组的用户
Match Group sftp
#锁定的目录
ChrootDirectory /data/test
#指定使用sftp服务使用系统自带的internal-sftp
ForceCommand internal-sftp
#如果不希望该用户能使用端口转发就加上,否则删掉
AllowTcpForwarding no
X11Forwarding no

或者对user用户权限配置

1
2
3
4
5
6
7
8
#匹配 user 用户
Match User user
#ChrootDirectory %u (%u代表变量用户名)
ChrootDirectory /data/test
ForceCommand internal-sftp
AllowTcpForwarding no
PermitTunnel no
X11Forwarding no

修改锁定用户目录的权限

1
2
3
4
#所有者设置为了root,所有组设置为sftp
chown root:sftp /data/test
#权限设置为755,所有者root有写入权限,而所有组sftp无写入权限
chmod -R 755 /data/test

目录的权限设定有两个要点:
1、由ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root
2、由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限(最大权限为755)

添加可上传删除目录

1
2
3
4
mkdir /data/test/upload
chown user:sftp /data/test/upload
#允许user用户有读写权限,群组外用户无写入权限
chmod 755 /data/test/upload
此时目录权限结构
drwxr-xr-x 19 root sftp 4096 9月 4 17:52 /data/test
test目录下,user用户可读不可写
drwxr-xr-x 4 user sftp 4096 9月 28 12:02 /data/test/upload
upload目录下,user用户可进行读写操作
1
2
#重启SSHD使配置生效
service sshd restart

0x02 使用xftp测试连接

alt