在 Linux 中配置 SFTP 环境

做运维的朋友,应该经常会碰到这样的问题,研发需要新上一个web项目,需要上传文件到服务器上,并且仅仅是上传项目,解决方法一边有两种,sftp和ftp,今天讲如何使用sftp让系统用户用户上传项目的权限,并且实现chroot和无法使用ssh登录到系统:

SFTP是指SSH文件传输协议(SSH File Transfer protocol)或安全文件传输协议(Secure File Transfer Protocol),它提供了可信数据流下的文件访问、文件传输以及文件管理功能。当我们为SFTP配置chroot环境后,只有被许可的用户可以访问,并被限制到他们的家目录中,换言之:被许可的用户将处于牢笼环境中,在此环境中它们甚至不能切换它们的目录。

我的环境:

[[email protected] ~]# cat /etc/issue
CentOS release 6.6 (Final)
Kernel \r on an \m
[[email protected] ~]# rpm -qa | grep openssh-server
openssh-server-5.3p1-104.el6.i686
  1. 增加一个sftp用户组
[[email protected] ~]# groupadd sftpusers

2.创建一个用户分配给sftp用户

[[email protected] ~]# useradd -g sftpusers user01

3.修改用户家目录及指定不能登录shell

[[email protected] ~]# mkdir /sftp/
[[email protected] ~]# usermod -s /sbin/nologin -d /sftp/user01 -m user01

4.给用户创建密码(注意密码不明文显示)

[[email protected] ~]# passwd user01 
Changing password for user user01.
New password: 
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password: 
passwd: all authentication tokens updated successfully.
[[email protected] ~]#

5.修改ssh的配置文件

[[email protected] ~]# ll /etc/ssh/sshd_config 
-rw-------. 1 root root 3879 Oct 15  2014 /etc/ssh/sshd_config
[[email protected] ~]# vim /etc/ssh/sshd_config

# line 132
#Subsystem      sftp    /usr/libexec/openssh/sftp-server    #注释
Subsystem       sftp    internal-sftp        #修改为internal-sftp

# add this lines at the end of file
Match Group sftpusers        #指定一下参数仅适用的用户组sftpusers
    X11Forwarding no
    AllowTcpForwarding no
    ChrootDirectory %h       #设置chroot将用户锁在家目录,%h=家目录               
    ForceCommand internal-sftp    #该参数强制执行内部sftp

6.重启ssh服务

[[email protected] ~]# /etc/init.d/sshd restart 
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]

7.设置用户家目录权限

[[email protected] ~]# chmod 0755 /sftp/user01/    #注意权限不能大于0755
[[email protected] ~]# chown root /sftp/user01/    
[[email protected] ~]# chgrp -R sftpusers /sftp/user01/

8.如果要上传的话...(bug我没什么解决的好办法)

#因为用户家目录属主是root,并且权限最大0755,所以没法写,我的解决方法是在在家目录建立一个#文件夹,作为上传目录,并把属主给user01即可。
[[email protected] ~]# mkdir /sftp/user01/upload
[[email protected] ~]# chown user01:sftpusers /sftp/user01/upload/

9.linux登录测试

[[email protected] ~]# su - user01 
This account is currently not available.    #su - 切换失败
[[email protected] ~]# cat /etc/passwd | tail -1
user01:x:500:500::/sftp/user01:/sbin/nologin
[[email protected] ~]# ssh [email protected]
The authenticity of host ‘localhost (::1)‘ can‘t be established.
RSA key fingerprint is f3:fc:31:dc:7d:16:d5:ad:8c:bc:eb:69:8f:b2:0b:c9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘localhost‘ (RSA) to the list of known hosts.
[email protected]‘s password: 
This service allows sftp connections only.    #ssh登录也失败,ssh设置成功
Connection to localhost closed.

10.sftp登录测试(我这里windows7用xshell,工具大同小异)

成功登录:

根目录下无法创建:

upload下可以创建:

好了,这篇博文就到这里了,完成今天的任务,对于根目录无法创建的原因,是因为linux的安全机制限制,另外如果有童鞋在操作过程中发现有不对的地方欢迎来和我讨论,我的邮箱:[email protected]

时间: 2024-10-10 16:24:06

在 Linux 中配置 SFTP 环境的相关文章

linux中配置JAVA环境

一.背景: 系统环境:centos-6.5 操作内容:安装sun版jdk.卸载openjdk jdk下载地址:jdk官方下载地址 二.过程: 1.检验系统原版本 [root@localhost ~]# java -version java version "1.7.0_24" OpenJDK Runtime Environment (build 1.7.0_24-b18) OpenJDK HotSpot(TM) Client VM (build 24.45-b08, mixed mod

如何在linux中配置PHP环境

yum -y install httpd php mysql mysql-server php-mysql//安装mysql扩展yum -y install mysql-connector-odbc(添加数据源) mysql-devel(中文乱码) libdbi-dbd-mysqlyum -y install mysql-connector-odbc mysql-devel libdbi-dbd-mysql//安装php的扩展yum -y install php-gd php-xml php-m

Linux中配置jdk环境变量出错:bad ELF interpreter: No such file or directory解决方法

yum install glibc.i686 重新安装,javac成功 如果还有如下类系错误 再继续安装包 error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory yum install libstdc++.so.6 引用链接:https://blog.csdn.net/travel7623/article/details/817

linux网络配置、环境变量以及JDK安装(CentOS 6.5)

由于需要搭建hadoop平台,但是苦于没有现成可用的linux服务器,只好自己下载了CentOS 6.5从头装起,安装过程中遇到了很多问题,比如网络配置.时钟同步.环境变量配置.以及各种服务的启停,还有jdk的安装等(虽然系统自带JDK,但是本人过于低端,自带的JDK的安装路径都搞不明白,就干脆自己装了一个),时间长了容易忘记,所以在这里写下来作为记录,顺便也分享给与我一样的菜鸟玩家,高手们可以退散了,当然了如果有批评指正小弟跪迎. 新建用户 新安装的linux一般只有root管理员用户,由于我

如何在Linux中使用sFTP上传或下载文件与文件夹

如何在Linux中使用sFTP上传或下载文件与文件夹 sFTP(安全文件传输程序)是一种安全的交互式文件传输程序,其工作方式与 FTP(文件传输协议)类似. 然而,sFTP 比 FTP 更安全;它通过加密 SSH 传输处理所有操作.在本文中,我们将向你展示如何使用 sFTP 上传/下载整个目录(包括其子目录和子文件). 作者:Aaron Kili来源:Linux中国|2017-03-09 14:42 移动端 收藏 分享 51CTO诚邀您9月23号和秒拍/国美/美团元专家一起聊智能CDN的优化之路

Linux安装配置php环境的方法

本文实例讲述了Linux安装配置php环境的方法.分享给大家供大家参考,具体如下: 1.获取安装文件: http://www.php.net/downloads.php php-5.3.8.tar.gz 获取安装php需要的支持文件:http://download.csdn.net/download/netlong339/1351852 libxml2-2.6.32.tar.gz 2.安装libxml2 复制代码 代码如下: tar zxvf libxml2-2.6.32.tar.gz cd l

Linux 如何配置 SFTP 来代替单一ftp应用

SFTP在Linux下是一个很方便很安全的文件传输工具,我常常用它在Linux服务器上替代传统的ftp来传输文件.众所周知SFTP账号是基于SSH账号的,默认情况下访问服务器的权限很大,下面的教程就是教你像ftp那样限制SFTP账号相关的访问权限. 必要条件: 你的openssh-server版本至少得失4.8p1, 因为配置权限需要版本添加的新配置项ChrootDirectory来完成. 如何查看自己服务器上的ssh版本?尝试以下命令 $ ssh -V 具体实施步骤 1. 我们需要创建一个用户

eclipse中配置spring环境

初识Spring框架 1.简单使用 eclipse中配置Spring环境,如果是初学的话,只需要在eclipse中引入几个jar包就可以用了, 在普通java project项目目录下,建一个lib文件夹,将常用的jar包导入,并Build Path. jar包资源下载:http://pan.baidu.com/s/1pKAP8gj 这样就可以快速进行Spring的简单学习了 2.正常使用 要使用Spring的完整功能还需要下载 Spring Tool Suite 与 完整版的 spring-f

Linux下配置Node环境变量及问题详解

这是之前在Linux下配置Node环境变量时踩过的坑,今天又有小伙伴质询这个问题,因此记录下来,不仅是给新童鞋们一些参考,也方便日后查阅 在这之前,相信都已经安装好了,没安装的可以查看博主另一篇文章  ---------http://www.cnblogs.com/Halifa/p/5772263.html 配置Node环境变量有永久生效和当时生效几种方式,这里只讲解永久生效 进入主题: 修改/etc/profile文件,在末尾添加以下内容 export NODE_HOME=/usr/local