CentOS的ssh sftp配置及权限设置(流程相当完整)(关闭了SElinux才能上传了)

从技术角度来分析,几个要求:

1、从安全方面看,sftp会更安全一点

2、线上服务器提供在线服务,对用户需要控制,只能让用户在自己的home目录下活动

3、用户只能使用sftp,不能ssh到机器进行操作

提供sftp服务,可以用系统自带的internal-sftp,也可以使用vsftpd,这里需求不多,直接选用internal-sftp。

限制用户只能在自己的home目录下活动,这里需要使用到chroot,openssh 4.8p1以后都支持chroot,我现在用的是CentOS 6.3,自带的openssh已经是5.3p1,足够了。

可以输入:

# ssh -V

来查看openssh的版本,如果低于4.8p1,需要自行升级安装,不在这里具体介绍了。

假设,有一个名为sftp的组,这个组中的用户只能使用sftp,不能使用ssh,且sftp登录后只能在自己的home目录下活动

1、创建sftp组

# groupadd sftp

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

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

# passwd mysftp

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

# mkdir -p /data/sftp/mysftp

# usermod -d /data/sftp/mysftp mysftp

4、配置sshd_config

编辑 /etc/ssh/sshd_config

# 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/sftp/%u

用chroot将用户的根目录指定到/data/sftp/%u,%u代表用户名,这样用户就只能在/data/sftp/%u下活动,chroot的含义,可以参考这里:http://www.ibm.com/developerworks/cn/linux/l-cn-chroot/

ForceCommand    internal-sftp

指定sftp命令

AllowTcpForwarding no

X11Forwarding no

这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉

5、设定Chroot目录权限

# chown root:sftp /data/sftp/mysftp

# chmod 755 /data/sftp/mysftp

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

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

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

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

所以遵循以上两个原则

1)我们将/data/sftp/mysftp的所有者设置为了root,所有组设置为sftp

2)我们将/data/sftp/mysftp的权限设置为755,所有者root有写入权限,而所有组sftp无写入权限

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、重启sshd服务

# service sshd restart

到这里,mysftp已经可以通过sftp客户端登录并可以上传文件到upload目录。

如果还是不能在此目录下上传文件,提示没有权限,检查SElinux是否关闭,可以使用如下指令关闭SElinux

修改/etc/selinux/config文件中的SELINUX="" 为 disabled ,然后重启。或者

# setenforce 0

一开始,我以为是权限问题导致的无法上传文件,即使给777权限给文件夹也不行. 然后干脆关闭了SElinux,终于可以上传了。

http://blog.sina.com.cn/s/blog_4fd50c3901018a0l.html

时间: 2024-08-07 21:21:05

CentOS的ssh sftp配置及权限设置(流程相当完整)(关闭了SElinux才能上传了)的相关文章

ssh/sftp配置和权限设置

基于 ssh 的 sftp 服务相比 ftp 有更好的安全性(非明文帐号密码传输)和方便的权限管理(限制用户的活动目录). 1.开通 sftp 帐号,使用户只能 sftp 操作文件, 而不能 ssh 到服务器 2.限定用户的活动目录,使用户只能在指定的目录下活动,使用 sftp 的 ChrootDirectory 配置 确定版本 #确保 ssh 的版本高于 4.8p1 否则升级一下 一般都高于这个版本ssh -V 新建用户和用户组 #添加用户组 sftpgroupadd sftp#添加用户 指定

[Android Pro] Android权限设置android.permission完整列表

android.permission.ACCESS_CHECKIN_PROPERTIES允许读写访问"properties”表在checkin数据库中,改值可以修改上传( Allows read/write access to the “properties” table in the checkin database, to change values that get uploaded) android.permission.ACCESS_COARSE_LOCATION允许一个程序访问Cel

Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载

Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载 2018年5月26日 19:03 阅读 375 评论 7 我本地和服务器的连接一直使用的是 Xshell 5,而在与服务器进行文件操作的时候使用的是 Xshell 推荐安装的一个工具 Xftp 5,然而,昨天自己想着从服务器下载备份好的的数据库文件到本地的时候发现这个文件传输工具居然过期不能用了,好气啊!于是没办法(机智如我)只好用 Python 来实现 SSH 的连接,顺便从服务器批量下载一些文件,实现自动化. 项

sftp配置多用户权限

工作需要,用户上传文件到目录下,用ftp不太安全,选择sftp.让用户在自己的home目录下活动,不能ssh到机器进行操作. 下面开始干活. 查看ssh版本 ssh -V,我的系统是CentOS6.4 ssh版本是5.3(大于4.8)的没有问题. 0, 创建用户目录root权限下创建用户和属组都是root mkdir  -p /opt/sftp/dir1/{upload,public} 1,创建 groupadd sftp 2. 创建 user -s /sbin/nologin  -G sftp

Android权限设置android.permission完整列表

程序执行需要读取到安全敏感项必需在Androidmanifest.xml中声明相关权限请求, 完整列表如下: android.permission.ACCESS_CHECKIN_PROPERTIES允许读写访问"properties”表在checkin数据库中,改值可以修改上传( Allows read/write access to the “properties” table in the checkin database, to change values that get uploade

CentOS下ssh的配置

一.一些废话. 在高三的时候曾经接触过Linux,被其帅气的终端所打动,从此走上了和Linux斗争的道路,其中有辛酸,但更多的是快乐.刚开始之所以接触Linux其实是因为BackTrack,然后学习了一些Linux下面的基本操作.最近这段时间想系统的学一下Linux安全方面的东西,准备把自己在这段时间当中的所学所想记录下来,为折腾Linux的同学提供一些借鉴,当然如果你们看得上的话 二.SSH简介. 简单说,SSH是一种网络协议,用于计算机之间的加密登录. 如果一个用户从本地计算机,使用SSH协

iOS之设置头像(访问系统相册、本地上传)

1. UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:                               @"设置头像" delegate:self cancelButtonTitle:@"取消"                       destructiveButtonTitle:nil otherButtonTitles:@"选择本地图片",@&

配置Spring项目输出JSON到LogStash或者使用FileBeat收集上传到ELK

一.使用LogStash 在项目中添加Gradle依赖,然后Sync项目: "net.logstash.logback:logstash-logback-encoder:4.11", 或者使用Maven: <!-- https://mvnrepository.com/artifact/net.logstash.logback/logstash-logback-encoder --> <dependency> <groupId>net.logstash

Centos下Hadoop安装配置

首先声明本人的配置是根据: http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503949.html 进行修改的,因此在这里表示感谢. 在这里我自己对于原有的文章进行了修改. 原作的某些命令不适合在centos上进行使用. 以及一些不太注意的细节,在这里我提了出来. 首先在安装之前,应先建立hadoop的用户组和hadoop用户, 然后再进行以下的安装配置.这里是很多新手都忽略的地方. 1.2 环境说明 集群中包括4个节点:1个Master,