Linux Centos 6.6搭建SFTP服务器

众所周知SFTP账号是基于SSH账号的,所以在默认情况下访问服务器的权限是非常大的。下面为SFTP用户权限设置方法。必要条件: 你的openssh-server版本至少得失4.8p1, 因为配置权限需要版本添加的新配置项ChrootDirectory来完成。 如何查看自己服务器上的ssh版本?大家可以尝试以下命令: $ ssh -V 具体实施步骤: 1. 我们需要创建一个用户组,专门用于sftp用户 $ groupadd sftpusers 2. 我们创建一个用户test $ useradd -s /bin/false -G sftpuser test 注意这里我们将test用户的shell设置为/bin/false使他没有登陆shell的权限 3. 编辑 /etc/ssh/sshd_config 找到Subsystem这个配置项,将其修改为 Subsystem sftp internal-sftp 然后再到文件最尾处增加配置设定属于用户组sftpusers的用户都只能访问他们自己的home文件夹 Match Group sftpusers ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no 保存并关闭文件 4. 修改test用户home文件夹的权限,让其属于root用户 chown root ~test 5. 重启sshd服务 $ service sshd restart 6. 测试用户账号 $ ssh test@localhost 连接会被拒绝或者无法登陆 $ sftp tesst@localhost 登陆后你会发现你的账号无法切换到除自己home目录之外的地方的 常见问题: 如果你链接服务器的时候出现下面的提示: Write failed: Broken pipe Couldn't read packet: Connection reset by peer 这个问题的原因是ChrootDirectory的权限问题,你设定的目录必须是root用户所有,否则就会出现问题。所以请确保sftp用户根目录的所有人是root, 权限是 750 或者 755。

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

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

0、查看openssh的版本

ssh -V

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

1、创建sftp组

groupadd sftp

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

修改用户密码和修改Linux用户密码是一样的。

useradd -g sftp -s /bin/false mysftp  //用户名
passwd mysftp  //密码

useradd -g sftp -s /bin/false mysftppasswd mysftp

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

mkdir -p /data/sftp/mysftpusermod -d /data/sftp/mysftp mysftp

4、配置sshd_config
文本编辑器打开 /etc/ssh/sshd_config
  vi /etc/ssh/sshd_config

找到如下这行,用#符号注释掉,大致在文件末尾处。
# Subsystem      sftp    /usr/libexec/openssh/sftp-server

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

Subsystem       sftp    internal-sftp  Match Group sftp  ChrootDirectory /data/sftp/%u  ForceCommand    internal-sftp  AllowTcpForwarding no  X11Forwarding no

5、设定Chroot目录权限

chown root:sftp /data/sftp/mysftpchmod 755 /data/sftp/mysftp

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

照上面设置后,在重启sshd服务后,用户mysftp已经可以登录。但使用chroot指定根目录后,根应该是无法写入的,所以要新建一个目录供mysftp上传文件。这个目录所有者为mysftp,所有组为sftp,所有者有写入权限,而所有组无写入权限。命令如下:

mkdir /data/sftp/mysftp/uploadchown mysftp:sftp /data/sftp/mysftp/uploadchmod 755 /data/sftp/mysftp/upload

7、修改/etc/selinux/config

文本编辑器打开/etc/selinux/config

vi /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

新新:http://blog.csdn.net/xinxin19881112/article/details/46831311

由于SFTP是SSH的一部分(与传统的FTP没有任何关系),因此,配置SFTP不需要传统的FTP服务器软件。仅需要OpenSSH服务器即可。

$ yum install openssh-server openssl

$ cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

$ vim +132 /etc/ssh/sshd_config

注释掉下面这行

Subsystem      sftp    /usr/libexec/openssh/sftp-server

添加如下几行

Subsystem       sftp    internal-sftp

Match Group sftp

ChrootDirectory /data/sftp/%u

ForceCommand    internal-sftp

AllowTcpForwarding no

X11Forwarding no

解释一下每一行的意思

Subsystem       sftp    internal-sftp

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

Match Group sftp

匹配sftp组的用户,如果有多个组用逗号分割

也可以使用“Match User mysftp”匹配用户,多个用户之间也是用逗号分割

ChrootDirectory /data/ftp/%u

用chroot将用户的根目录指定到/data/ftp/%u,%u代表用户名,%h表示用户根目录

另一种写法: ChrootDirectory %h

chroot可以参考:http://www.ibm.com/developerworks/cn/linux/l-cn-chroot/

ForceCommand    internal-sftp

指定sftp命令

AllowTcpForwarding no

X11Forwarding no

禁止用户使用端口转发

建立用户和组

$ mkdir -p /data/sftp/

$ groupadd sftp

$ useradd -m -d /data/sftp/user1 -g sftp -s /sbin/nologin user1

#通过上面这条命令建立的用户,其家目录权限是700,需要改成755才可以正常登陆

$ chmod -R 755 /data/sftp/

$ chown root:sftp /data/sftp/

$ chown root:sftp /data/sftp/user1    #重要

错误的目录权限设定会导致在log中出现”fatal: bad ownership or modesfor chroot directoryXXXXXX”的内容

目录的权限设定有两个要点:

1、由ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root

2、由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限(最大权限755)

因为用了chroot,所以/data/sftp/user1属主一定要是root,并且所属组不能有写入权限,如果上传需要写入在/data/sftp/user1下建立可写属主的文件夹供上传使用。

$ mkdir /data/sftp/user1/upload

$ chown -R user1:sftp /data/sftp/user1/upload

===========================================

2015.01.12补充

在Ubuntu 12.04 64bit系统部按如上方法部署好了SFTP,发现无法登陆,后来在/var/log/auth.log中发现了日志:fatal: bad ownership or modes for chroot directory component “/ftpdata/ftp/”;

于是查看了一下/ftpdata/ftp/的权限,发现该目录的属主是ftp。于是立即将属主修改为root,再次登陆就没问题了

请注意,在Ubuntu系统下,“Match Group sftp”及以后的配置项要写在“UsePAM yes”之后,否则同样无法登陆

===========================================

2015.02.03补充

在Ubuntu 12.04 64bit系统部按如上方法部署好了SFTP,发现无法登陆,FileZilla提示:Received unexpected end-of-file from SFTP server;执行/etc/init.d/ssh restart也不行;

经过百度,发现执行一下initctl restart ssh就OK了

1、创建sftp组 :  groupadd sftp

2、创建一个sftp用户,用户名为andy :   useradd -g sftp -s /bin/false andy

3、修改密码:  passwd andy

4、sftp组的用户的home目录统一指定到/data/sftp下:mkdir -p /data/sftp/andy

5、指定andy的home为/data/sftp/andy:usermod -d /data/sftp/andy andy

6、配置sshd_config:  vi /etc/ssh/sshd_config

7、输入/Subsystem搜索到下列内容,然后注释:    # Subsystem sftp /usr/libexec/openssh/sftp-server

8、在文件结尾处添加下面后保存:

Subsystem sftp internal-sftp

Match Group sftp

ChrootDirectory /data/sftp/%u

ForceCommand internal-sftp

AllowTcpForwarding no

X11Forwarding no

9、设定Chroot目录权限:

chown root:sftp /data/sftp/andy chmod 755 /data/sftp/andy

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

mkdir /data/sftp/andy/uploadchown andy:sftp /data/sftp/andy/upload  chmod 755 /data/sftp/andy/upload

11、修改:

vi /etc/selinux/config#SELINUX=enforcing#改为#SELINUX=disabled

12、输入命令:   setenforce 0

13、重启sshd服务:  service sshd restart

14、ifcong查询ip,进行登录:

sftp andy@192.168.1.200
(0)

相关推荐

  • Linux给普通用户增加ssh权限

    Linux系统安装好,建立普通用户后,普通用户不一定能通过ssh连接到服务器 可以在/etc/ssh/sshd_config中增加AllowUsers:username(可以多个,空格分开)给普通用户 ...

  • SSHD

    SSH基本概述 SSH服务协议说明 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Group )制定 在进行数据传输之前, ...

  • Linux禁用root用户

    在创建各种云主机的时候,云服务商给的都是root用户,这很方便,但是有某些时候会造成一些困扰,日后在服务器上启动各种服务后,仅仅拥有root权限的用户才能访问更改这些服务,这样会造成一些不必要的困扰, ...

  • 阿里云CentOS Linux服务器上用postfix搭建邮件服务器

    注:本文的邮件服务器只用于发送邮件,也就是STMP服务器. 一.准备工作 1. 为邮件服务器添加DNS解析 虽然不加DNS解析也能把邮件发出去,但会被大多数邮件服务器当作垃圾邮件.根据我们的实际经验, ...

  • (11条消息) Linux系统之DNS域名解析服务理论加实操(DNS正向、反向解析、搭建主从服务器、分离解析实验)

    DNS 一.DNS概述 1.1 DNS简介 1.2 DNS的分布式数据结构 1.3 域名结构 1.4 DNS域名解析方式 1.5 DNS服务器类型 二.构建DNS域名解析服务器步骤 2.1 配置正向解 ...

  • CentOS 7下简答搭建DNS服务器

    一.DNS相关介绍 DNS(Domain Name System)域名系统协议,作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用挨个记住IP地址.通过主机名,最终得到 ...

  • Linux搭建KMS服务器激活你的Windows

    可用于激活 windows 10 8.1 8 7 2008 2012等众多版本,这简单几个步骤带你完成 一.自建KMS服务器步骤 wget --no-check-certificate https:/ ...

  • Linux下搭建NFS服务器

    NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操作系统能够彼此分享个 ...

  • 干货|Linux平台搭建网关服务器

    概述 集群中一共10台服务器组成了局域网环境,但其中只有一台有外网网卡可以访问互联网.现要求另外9台服务器通过这台主机进行互联网访问.  实验环境介绍 利用iptables搭建网关服务器,即通过SNA ...

  • linux centos修改root密码

    linux centos修改root密码 步骤一:使用putty或其他远程终端工具登录root用户到服务器,在命令行输入passwd命令,回车. 步骤二:这里提示让输入新的密码,输入新的密码,注意这里 ...

  • [linux]通过ssh远程设定各服务器时间,从而实现集群时间同步

    #!/usr/bin/env bash #all hosts should to sync time, all hosts should no password login echo othersyn ...

  • Linux(CentOS 7)修改max open files的值

    阅读目录 系统全局参数file-max 如果是系统服务 临时修改,重启后失效,不对运行中程序生效 永久修改,需要重启系统 动态修改运行中程序的值 新安装的linux系统允许每个程序的最大打开文件数默认 ...