# 开启sftp日志并限制sftp访问目录
[TOC]
## 1. 开启sftp日志
### 1.1 修改sshd_config
```
vim /etc/ssh/sshd_config
```
注释掉Subsystem行,然后写入新Subsystem,信息如下
```
Subsystem sftp internal-sftp -l INFO -f local5
LogLevel INFO
```
效果如下:

### 1.2 修改syslogs
```
vim /etc/
```
在最后增加如下配置
```
auth,authpriv.*,local5.* /var/log/
```
###1.3 重启服务查看日志
```
/etc//rsyslog restart
/etc//sshd restart
tailf /var/log/
```
## 2 限制sftp用户操作目录
### 2.1 前提说明
如果要让sftp用户只能使用规定的目录,则需要再配置文件中开启**ChrootDirectory**,并限定目录作为sftp用户登录的根目录.
但这里规定的根目录,属主必须是root,文件夹权限只能是755,因此sftp用户对此根目录只有读取权限,需要再在根目录下创建一个属主为改sftp用户的文件夹,用于该用户上传数据
由此规则,可以产生两种sftp方案
### 2.2 home目录做根目录
创建用户时,不指定-M参数,默认会在home目录下生产该用户的家目录,用户对该目录具有完全操作权限,且不能访问其他用户的家目录,因此适合作为sftp目录
- ChrootDirectory写法
- ChrootDirectory /home/
### 2.3 单独创建目录做根目录
单独创建一个目录做根目录,然后再创建下级的操作目录,此方法需要按要求配置主目录及下级目录的权限和属主等信息
- 用户
- 创建用户 加-M参数
- 主目录
- 创建主目录 /data/sftp
- 授权 755
- 属主
- 下级目录
- 创建下级目录 /data/sftp/test_sftp
- 授权 755
- 属主 test_sftp.test_sftp
- ChrootDirectory写法
- ChrootDirectory /data/sftp/
## 3 实操
### 3.1方法1实操
- 创建用户
```
useradd test_sftp && echo "123456"|passwd --stdin test_sftp
```
- 修改sshd_conf
```
vim /etc/ssh/sshd_config
# 在最后增加以下关键字
Match User test_sftp
ChrootDirectory /home
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
```
**重要说明:配置在Match User字段中的用户,会被禁止使用ssh方式登录系统**
- 重启sshd服务
```
/etc//sshd restart
```
### 3.2 方法2实操
- 创建用户
```
useradd test_sftp && echo "123456"|passwd --stdin test_sftp
```
- 创建主目录并授权
```
mkdir -p /data/sftp/
#chown -R /data/sftp/
#chmod 755 /data/sftp/
```
**说明:注释掉的命令默认不用执行,写出来是为了避免乱做其他授权**
- 创建操作目录并操作
```
mkdir -p /data/sftp/test_sftp
chown -R test_sftp.test_sftp /data/sftp/test_sftp
#chmod 755 /data/sftp/test_sftp
```
**说明:注释掉的命令默认不用执行,写出来是为了避免乱做其他授权**
- 修改sshd_conf
```
vim /etc/ssh/sshd_config
# 在最后增加以下关键字
Match User test_sftp
ChrootDirectory /data/sftp
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
```
- 重启sshd服务
```
/etc//sshd restart
```