首页 > 代码库 > sftp

sftp

一、首先查看系统自带openssh软件组的版本,版本过低则不支持此功能

1.  ssh -V 
wKiom1N66imD1ZVAAAA45b3PxXI988.jpg

      #系统自带为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    

wKiom1N66jywqaQHAAAynFFl8Gs353.jpg  #已经升级为5.8版本

三、示例及配置

示例:

在此列举两个用户:uer1,user2分别属于group1,group2两个组,两个目录groupone,grouptwo在目录lg中目的:
1
user1(即属于group1的用户)只有在groupone这个目录中具有读写权限,在grouptwo目录中没有任何权限

2user2(即属于group2的用户)只有在grouptwo这个目录中具有读写权限,在groupone目录中没有任何权限

3user1user2只能在自己的目录下活动

配置过程:

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、给user1user2设置密码

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 

接下来就是使用user1user2登录sftp服务器进行验证吧!

2、修改配置文件/etc/ssh/sshd_config

sshd通常是打开了sftp的,不过我们应该使用internal-sftpsshd_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
说明: OpenSSH下的SFTP的配置
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这个目录中具有读写权限,

2qq只能在自己的目录下活动

配置过程:

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这个目录中具有读写权限,

2qq只能在自己的目录下活动

配置过程:

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