java创建只能sftp连接的用户组

本文介绍如何通过Java代码创建SFTP用户,并限制用户仅能在指定目录操作,同时禁用SSH登录及端口转发功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目中运用java代码调用ssh连接文件服务器,创建一些用户,这些用户要求只能使用sftp访问文件服务器,不能用ssh访问,且sftp登陆后只能在自己的home目录下活动

1.创建sftpusers组

groupadd sftpusers

2.java中创建用户的代码:

SSH.update("useradd -g sftpusers -s /bin/false  " + "-d " + TakeHome.getHome() + "/systems/%s %s", sysname,sysname);
SSH.update("echo '%s'|passwd --stdin %s", password, sysname);
SSH.update("chown root:sftpusers " + TakeHome.getHome() + "/systems/%s",sysname);
SSH.update("chmod 755 " + TakeHome.getHome() + "/systems/%s", sysname);

3.修改服务器上的/etc/ssh/sshd_config

注释掉:

Subsystem      sftp    /usr/libexec/openssh/sftp-server
添加下面代码:
Subsystem       sftp    internal-sftp  
Match Group sftp  
ChrootDirectory /home/BDEP/systems/%u
ForceCommand    internal-sftp  
AllowTcpForwarding no  
X11Forwarding no
解释一下添加的几行的意思

Subsystem       sftp    internal-sftp  
这行指定使用sftp服务使用系统自带的internal-sftp

Match Group sftp  
这行用来匹配sftp组的用户,如果要匹配多个组,多个组之间用逗号分割

当然,也可以匹配用户
Match User mysftp
这样就可以匹配用户了,多个用户名之间也是用逗号分割,但我们这里按组匹配更灵活和方便

ChrootDirectory /home/BDEP/systems/%u  
用chroot将用户的根目录指定到/home/BDEP/systems/%u,%u代表用户名,这样用户就只能在/home/BDEP/systems/%u下活动,chroot的含义,可以参考这里:http://www.ibm.com/developerworks/cn/linux/l-cn-chroot/

ForceCommand    internal-sftp  
指定sftp命令

AllowTcpForwarding no  
X11Forwarding no  
这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉

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

所以遵循以上两个原则
1)我们将/data/sftp/mysftp的所有者设置为了root,所有组设置为sftp
2)我们将/data/sftp/mysftp的权限设置为755,所有者root有写入权限,而所有组sftp无写入权限

4.重启ssh服务

service sshd restart

并在/etc/selinux/config文件中,将SELINUX=""或者其他值,改为disabled,然后重启服务器,或者

setenforce 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值