限制用户只能sftp不能ssh,一个用户可以上传,另一个用户只能下载

42 篇文章 0 订阅
11 篇文章 0 订阅

/bin/false 限制不使用ssh, Match匹配sftp属组使用ChrootDirectory限制sftp根目录(该目录必须为root用户root属组,权限最大是755,可以在该目录创建子目录并修改子目录属组来给其他用户操作)

  1. 操作
su -
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
vi /etc/ssh/sshd_config
#在末尾注册掉这一行
Subsystem      sftp    /usr/local/openssh-9.0p1/libexec/sftp-server
#然后增加
Subsystem sftp internal-sftp
#匹配到是sftp属组用户则使用ChrootDirectory切换到用户的属主目录,即限定了用户的根目录
Match group sftp
ChrootDirectory %h

#重启sshd 注意看是否成功启动了,错误了要根据异常信息修改处理后或回退后再重启sshd,否则sshd不重启下次无法再ssh
service sshd restart 

# 创建sftp属组
groupadd sftp
userdel writeuser
# 指定用户的属主目录/app/sftp/writeuser用户只能sftp操作这个目录, /bin/false禁用了ssh
useradd -d /app/sftp/writeuser  -m -s /bin/false -g sftp 
passwd writeuser
123456

#chroot目录及所有上级目录必须是root:root且权限755(只有root能写),才能在sftp之后成功ChrootDirectory,否则会抛异常
chown root:root /app/sftp/writeuser
chmod -R 755 /app/sftp/writeuser

mkdir -p /app/sftp/writeuser/Data  
chown -R writeuser:sftp /app/sftp/writeuser/Data
# Data目录属主是writeuser可以读写上传,其他用户只能读不能写,也就是其他用户只能下载
chmod -R 755 /app/sftp/writeuser/Data

userdel readuser
useradd -d /app/sftp/writeuser -m -s /bin/false -g sftp readuser
passwd readuser
123456



  1. sshd_config说明:
    Match
    引入多个条件块。块的结尾标志是另一个 Match 指令或者件结尾。
    如果 Match 上指定的条件都满足,那么随后的指令将覆盖全局配置中的指令。
    Match 的值是个或多个"条件-模式"对。可以的"条件"是:User, Group, Host, Address 。
    只有下列指令可以在 Match 块中使用:AllowTcpForwarding, Banner,ForceCommand, GatewayPorts, GSSApiAuthentication,KbdInteractiveAuthentication, KerberosAuthentication,PasswordAuthentication, PermitOpen, PermitRootLogin,RhostsRSAAuthentication, RSAAuthentication, X11DisplayOffset,X11Forwarding, X11UseLocalHost
[root@stress101 sftp]# diff /etc/ssh/sshd_config  /etc/ssh/sshd_config.bak 
132,136c132
< #Subsystem    sftp    /usr/libexec/openssh/sftp-server
< Subsystem sftp internal-sftp
< # sftp是组名,也可是多个组名,用空格隔开就可以
< Match group sftp
< ChrootDirectory %h
---
> Subsystem     sftp    /usr/libexec/openssh/sftp-server
140,141c136,137
<       X11Forwarding no
<       AllowTcpForwarding no
---
> #     X11Forwarding no
> #     AllowTcpForwarding no
144,145c140
< ForceCommand internal-sftp
< #StrictModes no
---
> StrictModes no
[root@stress101 sftp]# 
  1. 异常
    如果重启sshd失败了Directive xxx is not allowd within a Match block, 就是Match下的块中出现了不允许的指令,修改或者移动到match上方即可。

  2. 参考:
    https://www.freebuf.com/articles/system/183983.html
    https://blog.csdn.net/u014721096/article/details/78559506
    https://wenku.baidu.com/view/2f2f6a7e322b3169a45177232f60ddccdb38e64a.html
    https://blog.51cto.com/lookingdream/1769233

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值