首页 > 代码库 > sftp
sftp
一、首先查看系统自带openssh软件组的版本,版本过低则不支持此功能
1. ssh -V
#系统自带为4.3版本,版本过低,不支持此功能,升级openssh的版本
二、升级Openssh组件版本,在此将其升级为5.8版本:
1、下载所需要的软件:
libedit0-3.0-1.20090722cvs.el5.x86_64
wget http://dl.atrpms.net/el5-x86_64/atrpms/stable/libedit0-3.0-1.20090722cvs.el5.x86_64.rpm
openssh-5.8p2-16.el5.1.x86_64
wget http://centos.alt.ru/repository/centos/5/x86_64/openssh-5.8p2-16.el5.1.x86_64.rpm
openssh-askpass-5.8p2-16.el5.1.x86_64
wget http://centos.alt.ru/repository/centos/5/x86_64/openssh-askpass-5.8p2-16.el5.1.x86_64.rpm
openssh-clients-5.8p2-16.el5.1.x86_64
wget http://centos.alt.ru/repository/centos/5/x86_64/openssh-clients-5.8p2-16.el5.1.x86_64.rpm
openssh-server-5.8p2-16.el5.1.x86_64
wget http://centos.alt.ru/repository/centos/5/x86_64/openssh-askpass-5.8p2-16.el5.1.x86_64.rpm
2、安装新版本所需的库文件:
1. rpm -ivhlibedit0-3.0-1.20090722cvs.el5.x86_64
3、升级sftp所需的软件组,将四个软件放到任何一个干净的目录下www.linuxidc.com:
1. rpm -Uvh *
更新过程如果没有报错,查看版本是否已经更新为5.8
1. ssh -V
#已经升级为5.8版本
三、示例及配置
示例:
在此列举两个用户:uer1,user2分别属于group1,group2两个组,两个目录groupone,grouptwo在目录lg中目的:
1、user1(即属于group1的用户)只有在groupone这个目录中具有读写权限,在grouptwo目录中没有任何权限
2、user2(即属于group2的用户)只有在grouptwo这个目录中具有读写权限,在groupone目录中没有任何权限
3、user1和user2只能在自己的目录下活动
配置过程:
1、按照如下方法修改配置文件
1. Match groupgroup1,group2 #定义属于这两个组的用户才能登录
2. ChrootDirectory /lg #定义这两个组的用户只能在lg这个目录下活动,要保证用户的家目录的父目录必须有XX5权限,且属主为root;
3. X11Forwarding no
4. AllowTcpForwarding no
5. ForceCommand internal-sftp #保存退出
2、添加所需的目录(在目录不存在的情况下)
1. mkdir -p /lg/groupone
2. mkdir -p /lg/grouptwo
3、添加用户组
1. groupadd group1
2. groupadd group2
4、添加用户
1. useradd -g group1 -d/lg/groupone -s /bin/false user1 #添加家目录为/lg/groupone属组为group1且不能登录系统的用户user1
2. useradd -g group2 -d/lg/grouptwo -s /bin/false user2
5、给user1和user2设置密码
1. passwd user1
2. passwd user2
6、修改groupone的属组和权限
1. chown root:group1/lg/groupone
2. chmod 770 /lg/groupone
7、修改grouptwo的属组和权限
1. chown root:group2/lg/grouptwo
2. chmod 770 /lg/grouptwo
四、重新启动sshd服务
1. service sshd restart
接下来就是使用user1和user2登录sftp服务器进行验证吧!
2、修改配置文件/etc/ssh/sshd_config
sshd通常是打开了sftp的,不过我们应该使用internal-sftp在sshd_conf中作如下配置:
1 # Subsystem sftp/usr/lib/openssh/sftp-server # 注释掉
2 Subsystem sftp internal-sftp
3
4 ##
5 Match group sftponly
6 ChrootDirectory /sftphome/%u
7 X11Forwarding no
8 AllowTcpForwarding no
9 ForceCommand internal-sftp
10
解释一下:当sshd匹配到sftponly组中的用户,就会强制使用sftp(ForceCommand的作用),并将用户限定在/sftphome/下相应用户的目录下(ChrootDirectory的作用)。
注释:
Match引入一个条件块。块的结尾标志是另一个Match指令或者文件结尾。如果Match行上指定的条件都满足,那么随后的指令将覆盖全局配置中的指令。Match的值是一个或多个"条件-模式"对。可用的"条件"是:User, Group, Host, Address 。只有下列指令可以在Match块中使用:AllowTcpForwarding, Banner, ForceCommand, GatewayPorts, GSSApiAuthentication,KbdInteractiveAuthentication, KerberosAuthentication, PasswordAuthentication,PermitOpen, PermitRootLogin, RhostsRSAAuthentication, RSAAuthentication,X11DisplayOffset, X11Forwarding, X11UseLocalHost
创建用户
我们需要创建相应的用户了:
#groupadd sftponly
#useradd -G sftponly -d /sftphome/sftpuser -s /bin/false sftpuser
#tail /etc/password
sftpuser:x:1000:1000::/sftphome/sftpuser:/bin/false
#passwd sftpuser
#mkdir -p /sftphome/sftpuser
你可以在其他机器上用sftp登录试试了。你的连接将会被reset!去看看sshd的日志,你会发现pam.d的认证是通过了的,但是chroot失败了。按网络上的说法
#chownroot /sftphome/sftpuser
#chmod 755 /sftphome/sftpuser
再试,可以登录。新的问题是不能在此目录下写入。对的嘛,755对于组用户是不能写啊。再试试775,刚才的问题就来又了,chroot失败。
#mkdir /sftphome/sftpuser/space
#chown sftpuser.sftpuser /sftphome/sftpuser/space
由系统管理员为sftp用户提供一个目录,并设置其用户属性,用户在这个目录下用户是可写的。当然可以创建很多个。
重启ssh服务
#service sshd restart
机房
显示用户其他SFTP用户目录
示例:
在此列举一个用户:qq属于sftpuser组,目录/sftpuser/qq在目录home中目的:
1、qq(即属于sftpuser的用户)只有在/home/sftpuser/qq这个目录中具有读写权限,
2、qq只能在自己的目录下活动
配置过程:
1、按照如下方法修改配置文件
6. Match group sftpuser #定义属于这组的用户才能登录
7. ChrootDirectory /home/sftpuser #定义这组的用户只能在/home/sftpuser这个目录下活动,要保证用户的家目录的父目录必须有XX5权限,且属主为root;
8. X11Forwarding no
9. AllowTcpForwarding no
10. ForceCommand internal-sftp #保存退出
2、添加所需的目录(在目录不存在的情况下)
3. mkdir -p /home/sftpuser
3、添加用户组
3. groupadd sftpuser
4、添加用户
3. useradd -g sftpuser -d /home/sftpuser/qq -s /bin/false qq #添加家目录为/home/sftpuser/qq属组为sftpuser且不能登录系统的用户qq
5、给frank设置密码
3. passwd qq
6、修改groupone的属组和权限
3. chown root:sftpuser /home/sftpuser
4. chmod 750 /home/sftpuser/qq
四、重新启动sshd服务
2. service sshd restart
接下来就是使用frank登录sftp服务器进行验证吧!
五 另如果要添加另外的SFTP用户只需要运行4.1和6.2的命令即可,如添加用户jackpaue
1. useradd useradd -g sftpuser -d/home/sftpuser/cdq -s /bin/false cdq
#添加家目录为/home/sftpuser/cdq属组为sftpuser且不能登录系统的用户cdq
2. chmod 750 /home/sftpuser/cdq
不显示其他用户目录
示例:
在此列举一个用户:qq属于sftpuser组,目录/sftpuser/qq在目录home中目的:
1、qq(即属于sftpuser的用户)只有在/home/sftpuser/qq这个目录中具有读写权限,
2、qq只能在自己的目录下活动
配置过程:
1、按照如下方法修改配置文件
11.Match group sftpuser #定义属于这组的用户才能登录
12. ChrootDirectory /home/sftpuser/%u #定义这组的用户只能在/home/sftpuser这个目录下活动,要保证用户的家目录的父目录必须有XX5权限,且属主为root,修改为/home/sftpuser/%u;
13. X11Forwarding no
14. AllowTcpForwarding no
15. ForceCommand internal-sftp #保存退出
2、添加所需的目录(在目录不存在的情况下)
4. mkdir -p /home/sftpuser
3、添加用户组
4. groupadd sftpuser
4、添加用户
4. useradd -g sftpuser -d /home/sftpuser/qq -s /bin/false qq #添加家目录为/home/sftpuser/frank属组为sftpuser且不能登录系统的用户frank
5、给frank设置密码
4. passwd qq
6、修改sftpuser的属组和权限
5. chown root:sftpuser /home/sftpuser
6. chmod 750 /home/sftpuser/qq
#修改添加以下步骤
7. chown root:sftpuser /home/sftpuser/qq
8. mkdir/home/sftpuser/qq/qq
9. chown qq.sftpuser /home/sftpuser/qq/qq
四、重新启动sshd服务
3. service sshd reload
接下来就是使用frank登录sftp服务器进行验证吧!
五 另如果要添加另外的SFTP用户只需要运行4.1和6.2的命令即可,如添加用户cdq
1. useradd useradd -g sftpuser -d/home/sftpuser/cdq -s /bin/false cdq
2. chmod 750 /home/sftpuser/cdq
3. passwd cdq
#添加以下步骤
4. chown root/home/sftpuser/cdq
5. mkdir/home/sftpuser/cdq/cdq
6. chown cdq.sftpuser/home/sftpuser/cdq/cdq
本文出自 “cdq502” 博客,请务必保留此出处http://1439024.blog.51cto.com/1429024/1414097