构想和目标

最近有个这样的诉求:基于对线上服务器的保密和安全,不希望开发人员直接登录线上服务器,因为登录服务器的权限太多难以管控,如直接修改代码、系统配置,并且也直接连上mysql。因此希望能限制开发人员ssh登录机器,但是通过ftp/sftp上传代码文件。

在网上找个各种各样的方法,经过试验做个汇总:

sftp指定端口:sftp -oPort=端口号 username@ip

方法一

这篇帖子的方法是搜索到的最通用的方法,方法是否可能呢,直接做个测试。

1、创建禁止登陆的用户:

useradd test -M -s /sbin/nologin

2、试试ssh登陆:登陆失败

[root@localhost app]# ssh test@172.19.194.30

test@172.19.194.30's password:

Last login: Tue Oct 11 15:28:07 2016 from 172.18.135.185

This account is currently not available.

Connection to 172.19.194.30 closed.

3、试试sftp登陆:同样也提示登陆失败!!!

[root@localhost app]# sftp test@172.19.194.30

test@172.19.194.30's password:

Received message too long 1416128883

[root@localhost app]#

可以看到,方法一,虽然限制了ssh登陆,但是同时也限制了sftp的连接,结论是此方法行不通。

方法二

1、首先修改sshd的配置文件:

#vim /etc/ssh/sshd_config

#该行(上面这行)注释掉

#Subsystem sftp /usr/lib/openssh/sftp-server

# 添加以下几行

Subsystem sftp internal-sftp

Match group sftp

#Match user test

#匹配sftp组,如为单个用户可用:Match user 用户名; 设置此用户登陆时的shell设为/bin/false,这样它就不能用ssh只能用sftp

ChrootDirectory /home/test

#指定用户被锁定到的那个目录,为了能够chroot成功,该目录必须属主是root,并且其他用户或组不能写

X11Forwarding no

AllowTcpForwarding no

ForceCommand internal-sftp

2、添加用户组和用户

添加用户组

groupadd sftp

添加用户

useradd -d /home/test -m -s /bin/false -g sftp test

修改密码

echo "rootroot" |passwd --stdin test

3、重启SSH服务

service sshd restart

或者

/etc/init.d/ssh reload

4、测试ssh

[root@localhost etc]# ssh test@172.19.194.30

test@172.19.194.30's password:

Write failed: Broken pipe

登陆失败,提示Write failed: Broken pipe错误

5、再测试sftp

[root@localhost etc]# sftp test@172.19.194.30

test@172.19.194.30's password:

Write failed: Broken pipe

Couldn't read packet: Connection reset by peer

同样提示Write failed: Broken pipe

6、按理说此方法应该是靠谱的为什么会提示失败呢,通过查找发现是目录权限配置导致的:

目录权限设置上要遵循2点:

ChrootDirectory设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root;

ChrootDirectory设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,权限最大设置只能是755。

修改/home/test 目录权限为755

chmod 755 /home/test -R

7、再次测试

[root@localhost etc]# ssh test@172.19.194.30

test@172.19.194.30's password:

Could not chdir to home directory /home/test: No such file or directory

This service allows sftp connections only.

Connection to 172.19.194.30 closed.

和预期一致:ssh尝试连接失败。

[root@localhost etc]# sftp test@172.19.194.30

test@172.19.194.30's password:

Connected to 172.19.194.30.

sftp> ls

a a.log authorized_keys mysql.sh

sftp>

sftp测试连接成功!

总结

这个东西虽然没有太大的技术含量,但是通过网上查找的大多是雷同且行不通的,又或者是不完整的,过程中耽误和浪费了不少时间,希望写这篇博客做个验证和汇总的作用。

参考:

linux 更改配置文件 禁止ssh,配置linux用户实现禁止ssh登陆但可用sftp登录相关推荐

  1. linux怎么设置自动缩进,配置Linux下vim自动缩进等功能

    从终端打开配置文件: vim ~/.vimrc 添加如下代码: set tabstop=4 set softtabstop=4 set shiftwidth=4 set autoindent set ...

  2. linux系统配置Vim命令,vim配置 LINUX操作系统VIM的安装和配置

    vim和emacs是linux环境下的文本编辑利器,关于vim和emacs谁更优秀的话题从来没有断过,我在这里就不再评判了,vim是linux下的默认编辑器,学好了vim将会一生受用,使用vim编辑代 ...

  3. linux系统多网口聚合配置,Linux网卡聚合linux多网卡绑定聚合之bond模式的原理是什么...

    将多个Linux网络端口绑定为一个,可以提升网络的性能,比如对于备份服务器,需要在一个晚上备份几个T的数据,如果使用单个的千兆网口将会是很严重的瓶颈.其它的应用,比如ftp服务器,高负载的下载网站, ...

  4. linux下mysql单机主从配置,Linux下MySQL互为主从配置

    Linux系统环境:CentOS 6.5 master1:192.168.100.204 master2:192.168.100.205 mysql版本:mysql-5.6.19 注:mysql的5. ...

  5. Linux服务器安装mysql数据库,配置linux防火墙策略

    一:安装目录 安装到指定目录下,此时我们安装在usr/local/src目录下 cd /usr/local/src/ 二:安装数据库 yum install mariadb-server ##安装ma ...

  6. visual studio编译linux,在 Visual Studio 中配置 Linux MSBuild C++ 项目

    在 Visual Studio 中配置 Linux MSBuild C++ 项目Configure a Linux MSBuild C++ project in Visual Studio 10/16 ...

  7. arm linux ip配置文件,手动修改ARM Linux的静态IP和用QT获取和修改IP

    http://blog.csdn.net/a15868717540/article/details/7165287 这是第一种方式 //读取部分 QSettings *ConfigIni = new ...

  8. linux查cpu和内存配置,Linux查看CPU和内存的配置信息

    CPU配置信息: frank@ubuntu:~/test/python$ cat /proc/cpuinfo processor : #系统中逻辑处理核的编号 vendor_id : GenuineI ...

  9. linux更改nginx最大访问数,Linux下nginx服务的配置文件nginx.conf中模块的讲解之配置limit_conn_zone来限制并发连接数以及下载速率...

    一.限制并发连接数的配置方法如下: 1.在nginx.conf里的http{}里加上如下代码: # vim /usr/local/nginx/conf/nginx.conf #在其中的36行加入下面的 ...

最新文章

  1. LeetCode--Add Two Numbers
  2. 「 iOS 知识小集 」2018 · 第 23 期
  3. iOS事件机制(一)
  4. CF750F. New Year and Finding Roots
  5. linux隐藏apache信息,Apache防盗链和隐藏版本信息-linux-centos运维
  6. oracle函数 sysdate
  7. vue组件化学习第一天
  8. 瑞友天翼服务器ip地址怎么修改,瑞友天翼6.0版本iphone移动客户端操作手册
  9. java %2c_java2c工具(修复)
  10. 黑马程序员机器学习Day1学习笔记
  11. C# 使用Microsoft.Reporting打印票据
  12. 增强 扫描王 源码_CamScanner扫描全能王v5.15.3 安卓版
  13. \u开头的字符串是什么意思?
  14. Java单元测试实践-15.Stub、Replace、Suppress Spring的方法
  15. 首次用jwt做token
  16. 中关村e谷为产业搭台:中关村论坛(空天专场)黑科技亮相现场
  17. 计算机dns ip在哪设置,电脑dns在哪里设置具体方法
  18. [VT虚拟化驱动]安装DPC回调检测CPU对VT的支持
  19. 关于导入.a文件后报错Undefined symbols for architecture arm64:
  20. volumes是什么意思中文翻译_volume是什么意思_volume的翻译_音标_读音_用法_例句_爱词霸在线词典...

热门文章

  1. cmake 添加二进制文件_CMake构建系统
  2. 【编程思想】什么是微服务
  3. Fisher线性判别(*)
  4. python 可视化 画直线_用Python画江苏省地图,实现各地级市数据可视化
  5. order by 子查询_SQL查询语法
  6. 168输出为861java_AcWing 861. 二分图的最大匹配-java-关键处注释
  7. python中sys模块是什么内容_python中sys模块是做什么用的
  8. 清空运行中的jar 日志_Java日志体系权威总结
  9. android接推流sdk,Android——直播推流SDK
  10. vue中,format与value-format比较