目标
- admin 用户(读写)
- guest 用户(只读)
目录
mkdir -p /opt/sftp/admin/share
# 设置目录权限
chmod -R 755 /opt/sftp
目录权限最高755否则会出现连接异常
sshd[4656]: fatal: bad ownership or modes for chroot directory
开启sftp日志
修改sftp配置
vim /etc/ssh/sshd_config
Subsystem sftp /usr/lib64/ssh/sftp-server -l INFO -f AUTH
# 或者
Subsystem sftp internal-sftp -l INFO -f AUTH
修改reyslog配置
vi /etc/rsyslog.conf
# 添加
auth,authpriv.* /var/log/sftp.log
重启rsyslog和sshd服务
service rsyslog restart
service sshd restart
查看日志
tail -n 10 /var/log/sftp.log
tail命令
tail [参数] [文件]
参数
- -f 循环读取
- -q 不显示处理信息
- -v 显示详细的处理信息
- -c<数目> 显示的字节数
- -n<行数> 显示文件的尾部 n 行内容
- --pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
- -q, --quiet, --silent 从不输出给出文件名的首部
- -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
用户组
groupadd sftp
用户及权限配置
useradd -g sftp -s /bin/false admin
passwd admin
# 添加用户并指定用户用户组、工作目录、不能登录服务器
useradd -g sftp -d /opt/sftp/admin -M -s /bin/false guest
passwd guest
# admin 目录授权
chown root:sftp /opt/sftp/admin
# 操作目录授权 拥有者为rwx,拥有组rwx,其他r-x
chmod -R 755 /opt/sftp/admin
useradd参数
-M 不要自动建立用户的登入目录
-d<登入目录> 指定用户登入时的起始目录
-s<shell> 指定用户登入后所使用的shell
/bin/false的意思是禁止某个用户登录
sftp配置
vim /etc/ssh/sshd_config
# 注释 Subsystem sftp /usr/libexec/openssh/sftp-server
# 增加
Subsystem sftp internal-sftp
# 用户配置
Match User guest
# 用户的根目录指定参数其权限及其所有的上级文件夹权限
ChrootDirectory /opt/sftp/admin
ForceCommand internal-sftp
# 组配置 多个组逗号隔开
Match Group sftp
# %h代表用户home目录,这样用户就只能在用户目录下活动。也可用%u,%u代表用户名。
ChrootDirectory /opt/sftp/%u
ForceCommand internal-sftp
- ChrootDirectory 用户的根目录指定参数其权限及其所有的上级文件夹权限,属主必须是 root且只有属主能拥有写权限,即权限最大设置只能是 755
- Match Group sftp 组配置之前,否则会因为参数 /opt/sftp/%u 优先匹配 /opt/sftp/guest 目录而实际中 guest目录是不存在,造成登录失败
- 创建的用户有以用户名命名的目录时,不需要单独配置 Match User guest这项,如果没有以用户名命名的目录时则必须配置 Match User guest这项。
验证
service sshd restart
sftp guest@127.0.0.1
sftp admin@127.0.0.1