天天看点

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

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的作用)。

注释:

我们需要创建相应的用户了:

#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只能在自己的目录下活动

6.  Match group sftpuser   #定义属于这组的用户才能登录

7.        ChrootDirectory /home/sftpuser  #定义这组的用户只能在/home/sftpuser这个目录下活动,要保证用户的家目录的父目录必须有XX5权限,且属主为root;

8.        X11Forwarding no

9.        AllowTcpForwarding no

10.      ForceCommand internal-sftp #保存退出     

3.  mkdir -p /home/sftpuser

3.  groupadd sftpuser

3.  useradd -g sftpuser -d /home/sftpuser/qq  -s /bin/false qq  #添加家目录为/home/sftpuser/qq属组为sftpuser且不能登录系统的用户qq

5、给frank设置密码

3.  passwd qq

3.  chown root:sftpuser /home/sftpuser

4.  chmod 750 /home/sftpuser/qq

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

不显示其他用户目录

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 #保存退出     

4.  mkdir -p /home/sftpuser

4.  groupadd sftpuser

4.  useradd -g sftpuser -d /home/sftpuser/qq  -s /bin/false qq  #添加家目录为/home/sftpuser/frank属组为sftpuser且不能登录系统的用户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

3.  service sshd reload 

五 另如果要添加另外的SFTP用户只需要运行4.1和6.2的命令即可,如添加用户cdq

3.  passwd cdq

#添加以下步骤

4.  chown root/home/sftpuser/cdq

5.  mkdir/home/sftpuser/cdq/cdq

6.  chown cdq.sftpuser/home/sftpuser/cdq/cdq

本文出自 “” 博客,请务必保留此出处