centos6和ubuntu14搭建sftp

参考 http://blog.csdn.net/xinxin19881112/article/details/46831311

 

 

一. 在Centos 6.6环境使用系统自带的internal-sftp搭建SFTP服务器。

 

打开命令终端窗口,按以下步骤操作。

0、查看openssh的版本

ssh -V   #使用ssh -V 命令来查看openssh的版本,版本必须大于4.8p1,低于的这个版本需要升级

 

1、创建sftp组

groupadd sftp  

2、创建一个sftp用户,用户名为mysftp,密码为mysftp

useradd -g sftp -s /bin/false mysftp  //用户名
passwd mysftp  //密码,修改用户密码和修改Linux用户密码是一样的。

3、sftp组的用户的home目录统一指定到/data/sftp下,按用户名区分,这里先新建一个mysftp目录,然后指定mysftp的home为/data/sftp/mysftp

mkdir -p /data/sftp/mysftp  

usermod -d /data/sftp/mysftp mysftp  #这一步不做也可以,ssh配置文件中设置根目录后会覆盖这里的设置

4、配置sshd_config

 vim /etc/ssh/sshd_config

找到并注释掉下面一行,大致在文件末尾处。
# Subsystem      sftp    /usr/libexec/openssh/sftp-server  

在文件最后面添加如下几行内容,然后保存。

Subsystem       sftp    internal-sftp    
Match Group sftp    
ChrootDirectory /data/sftp/%u    # %u代表用户名,等价/data/sftp/mysftp
ForceCommand    internal-sftp    #指定sftp命令
AllowTcpForwarding no    #下面两行,如果不希望该用户能使用端口转发的话就加上,否则删掉
X11Forwarding no  

5、设定Chroot目录权限

chown root:sftp /data/sftp/mysftp  

chmod 755 /data/sftp/mysftp 

6、建立SFTP用户登入后可写入的目录

照上面设置后,在重启sshd服务后,用户mysftp已经可以登录。

但使用chroot指定根目录后,根应该是无法上传文件的,但是可以下载。

所以要新建一个目录供mysftp上传文件,这个目录所有者为mysftp,所有组为sftp,所有者有写入权限,而所有组无写入权限。命令如下:

mkdir /data/sftp/mysftp/upload  

chown mysftp:sftp /data/sftp/mysftp/upload  

chmod 755 /data/sftp/mysftp/upload  

7、修改/etc/selinux/config

vim /etc/selinux/config  

将文件中的SELINUX=enforcing 修改为 SELINUX=disabled ,然后保存。

输入命令setenforce 0   #即时生效

8、重启sshd服务

service sshd restart

9、验证sftp环境
用mysftp用户名登录,yes确定,回车输入密码。

 

sftp mysftp@127.0.0.1  

显示 sftp> 则sftp搭建成功。

 

10、使用FileZilla FTP Client连接SFTP服务器

输入主机IP地址、用户名、密码、端口连接SFTP服务器,端口默认为22。

 

FileZilla FTP Client下载

http://download.csdn.net/detail/xinxin19881112/8887755

 

 此方法也可用在ubuntu系统上,在下面的ubuntu中介绍了另外一种方法。

 

 

 

二.  在ubuntu上搭建sftp

需求说明:
在服务器上开通SFTP文件服务,允许某些用户上传及下载文件。但是这些用户只能使用SFTP传输文件,不能使用SSH终端访问服务器,并且SFTP不能访问系统文件(即所谓的“Jail(监狱)”)。
系统管理员则既能使用SFTP传输文件,也能使用SSH远程管理服务器。
 
为了便于讨论,我将允许sftp-users用户组内的用户使用SFTP,但不允许使用SSH Shell,且该组用户将被"监狱"(修改系统根目录),并且在sftp-users组内创建一个用户“alice”。
而我将允许ssh-users使用SFTP以及SSH。
系统管理员的账户名为admin。
 
1,如果还没有安装OpenSSH服务器,先安装它
sudo apt-get install openssh-server

2. 为SFTP访问创建用户组,便于管理权限
sudo addgroup sftp-users
 
3,创建SFTP用户,并配置相应权限
sudo adduser alice
sudo usermod -G sftp-users -s /bin/false alice #将alice从所有其他用户组中移除并加入到sftp-users组,并且关闭其Shell访问
4,创建SSH用户组,并把管理员加入到该组(注意usermod中的-a参数的意思是不从其他用户组用移除)
sudo addgroup ssh-users
sudo usermod -a -G ssh-users admin
5,准备“监狱”的根目录及共享目录
“监狱”的根目录必须满足以下要求:该目录的用户属主必须是root,并且该目录的上级的每一级目录的属主也必须是root,其他任何用户都不能拥有写入权限。
因此,为了让SFTP用户能够上传文件,还必须在“监狱”根目录下再创建一个普通用户能够写入的共享文件目录。
为了便于管理员通过SFTP管理上传的文件,我把这个共享文件目录配置为:由admin所有,允许sftp-users读写。这样,管理员和SFTP用户组成员就都能读写这个目录了。
sudo mkdir /home/sftp_root  #这里用sudo,相当于 /home/sftp_root所属为root:root,权限默认为755
sudo mkdir /home/sftp_root/shared
sudo chown admin:sftp-users /home/sftp_root/shared
sudo chmod 770 /home/sftp_root/shared

注意:第4,5步的admin用户可以改为任意其他用户,包括root用户
 
6,修改SSH配置文件
sudo vim /etc/ssh/sshd_config
在sshd_config文件的最后,添加以下内容:
AllowGroups ssh-users sftp-users
Match Group sftp-users
ChrootDirectory /home/sftp_root
AllowTcpForwarding no
X11Forwarding no
ForceCommand internal-sftp
这些内容的意思是:
只允许ssh-uers及sftp-users通过SSH访问系统;
针对sftp-users用户,额外增加一些设置:
将“/home/sftp_root”设置为该组用户的系统根目录(因此它们将不能访问该目录之外的其他系统文件);
禁止TCP Forwarding和X11 Forwarding;
强制该组用户仅仅使用SFTP。
 
如果需要进一步了解细节,可以使用“man sshd_config”命令。这样设置之后,SSH用户组可以访问SSH,并且不受其他限制;而SFTP用户组仅能使用SFTP进行访问,而且被关进监狱目录。
 
7,重启系统以便使新配置生效
sudo reboot now

 

 

注意:

1)组sftp-users是允许使用sftp的用户组; ssh-users是允许进行ssh连接的用户组,

2)因为我们设置了usermod -a -G ssh-users admin,因此现在只能admin用户远程ssh连接,

3)如果想让之前的普通用户远程连接ssh,比如axinfu用户,需要把它加入ssh-users组中,usermod -aG ssh-users axinfu

4)从一个组中删除成员,命令是gpasswd wheel -d test,表示从wheel组成删除成员test

 

 

原文地址:https://www.cnblogs.com/regit/p/8118046.html