热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Centos搭建opensshserver跳板服务器

部署背景:最近有一客户提出这么个需求,要在公司信息机房部署一台登录跳板服务器,让以后用户访问机房内的服务器都必须先登录这台跳板服务器,然后再ssh到其他服务器。具体要求为:1)安全最大化,普通用户登陆到这台跳板服务器后只能执行ssh,ls等有限的基础命令。2)把普通用户锁定在特定的目录下,这样即使被hack,也不会影响其他用户。

需求分析:
根据客户所提要求,那么就必须搭建一openssh server,利用ssh+chroot功能来实现。而在openssh 4.8p1以前的版本,要支持chroot,必须使用第三方的修改。但从openssh 4.8p1以后,chroot功能已经被内置了,为此可以直接在服务器系统(CentOS 5.5)上搭建。

系统平台:
CentOS 5.5 i386
openssh 5.6p1
zlib-1.2.5
openssl-1.0.0c  
         

CentOS 5.5中自带的openssh是4.3p2版本的,必须升级到4.8p1以后,我选择升级到目前最高版本5.6p1。具体升级到openssh 5.6p1的方法可以参考我这篇文章:CentOS 5.5下升级OpenSSH-4.3p2到5.6p1


根据sshd_config的man中所述,实现chroot功能需要配置"ChrootDirectory"这个参数。

ChrootDirectory:定义了用户通过认证以后的chroot目录,此目录及其所有子目录的属主必须是root,且这些目录只有root帐号可以进行写操作,其他任何组和帐号都不可写。chroot以后,sshd会将用户的工作目录转到chroot目录中用户自己的主目录。如果ChrootDirectory定义的目录下没有相应的/home/username目录,则会直接转到chroot的/目录下。

下边是详细的配置过程:


1.新增用户ait(不创建其缺省主目录)
[root@server ~]# useradd -M ait
[root@server ~]# passwd ait 
2.修改/etc/ssh/sshd_config文件
[root@server ~]# vi /etc/ssh/sshd_config    #增加以下内容
Match User ait
ChrootDirectory /var/chroot 
注:这里我指定chroot目录是/var/chroot
[root@server ~]# /etc/init.d/sshd restart    #重启SSH服务
3.搭建基本的chroot环境
小贴士:
一个最基本的chroot环境至少有一个shell(例如sh,bash)和一些必要的系统设备文件(例如/dev/null,/dev/zero),如果要允许用户执行一些命令,那么还要准备相应的命令可执行文件和命令依赖的库文件。

[root@server ~]# mkdir /var/chroot
[root@server ~]# cd /var/chroot
[root@server chroot]# mkdir {bin,dev,lib,lib64,etc,home}
[root@server chroot]# mknod dev/null c 1 3
[root@server chroot]# mknod dev/zero c 1 5

#可选,这两个文件ssh命令需要,如缺少会报告:PRNG is not seeded
[root@server chroot]# mknod dev/random c 1 8
[root@server chroot]# mknod dev/urandom c 1 9

#可选,ssh命令需要,如缺少会报告:Host key verification failed
[root@server chroot]# mknod dev/tty c 5 0 

#修改/var/chroot及其子目录的属主,并修改权限
[root@server chroot]# chown -R root.root /var/chroot
[root@server chroot]# chmod -R 755 /var/chroot

#允许用户写这些设备文件,不可写会有些命令报错
[root@server chroot]# chmod 0666 dev/{null,zero,tty}

然后将要允许用户执行的可执行文件和依赖的库文件复制到相应位置。例如必须给用户一个可用的shell,则我们一般用/bin/bash,那么执行ldd命令查看相关信息:
[root@server chroot]# ldd /bin/bash
        
linux-gate.so.1 =>  (0x00572000)
        libtermcap.so.2 => /lib/libtermcap.so.2 (0x0388b000)
        libdl.so.2 => /lib/libdl.so.2 (0x00839000)
        libc.so.6 => /lib/libc.so.6 (0x006b3000)
        /lib/ld-linux.so.2 (0x0068f000)
说明/bin/bash要正确执行,依赖于如下几个文件:
/lib/libtermcap.so.2
/lib/libdl.so.2
/lib/libc.so.6
/lib/ld-linux.so.2
那么我们必须把/bin/bash和相应的库文件复制到对应的位置。
[root@server chroot]# cp -p /bin/bash /var/chroot/bin
[root@server chroot]# cp -p /lib/libtermcap.so.2 /var/chroot/lib
[root@server chroot]# cp -p /lib/libdl.so.2 /var/chroot/lib
[root@server chroot]# cp -p /lib/libc.so.6 /var/chroot/lib
[root@server chroot]# cp -p /lib/ld-linux.so.2 /var/chroot/lib

类似上边这样,对每个想要允许用户执行的文件都如此操作即可。

这里只是为了说明下具体过程,实际应用时肯定要用脚本来执行的。我从一网站抄来一个脚本(这里我命名为shell.sh),略加修改,内容如下:

# /bin/bash
# 要允许执行的文件列表
cmdlist="/bin/bash /bin/ls /bin/cp /bin/mkdir /bin/mv /bin/rm /bin/rmdir"

# chroot路径
chroot_path="/var/chroot"

# 判断依赖的库文件
lib_1=`ldd $cmdlist | awk '{ print $1 }' | grep "/lib" | sort | uniq`
lib_2=`ldd $cmdlist | awk '{ print $3 }' | grep "/lib" | sort | uniq`

# 复制命令文件
for i in $cmdlist
do
    cp -a $i $chroot_path/bin/ && echo "$i done"
done

# 复制依赖的库文件(因为是i386,所以是lib,如果是x86_64,则是lib64,)
for j in $lib_1
do
    cp -f $j $chroot_path/lib/ && echo "$j done"
done

for k in $lib_2
do
    cp -f $k $chroot_path/lib/ && echo "$k done"
done
 


[root@server chroot]# ll
总计 28
drwxr-xr-x 2 root root 4096 02-25 05:47 bin
drwxr-xr-x 2 root root 4096 02-25 05:36 dev
drwxr-xr-x 2 root root 4096 02-25 05:35 etc
drwxr-xr-x 2 root root 4096 02-25 05:35 home
drwxr-xr-x 2 root root 4096 02-25 05:51 lib
drwxr-xr-x 2 root root 4096 02-25 05:35 lib64
-rw-r--r-- 1 root root  665 02-25 06:50 shell.sh

[root@server chroot]# chmod 755 shell.sh
[root@server chroot]# ./shell.sh
/bin/bash done
/bin/ls done
/bin/cp done
/bin/mkdir done
/bin/mv done
/bin/rm done
/bin/rmdir done
/lib/ld-linux.so.2 done
/lib/libacl.so.1 done
/lib/libattr.so.1 done
/lib/libc.so.6 done
/lib/libdl.so.2 done
/lib/libpthread.so.0 done
/lib/librt.so.1 done
/lib/libselinux.so.1 done
/lib/libsepol.so.1 done
/lib/libtermcap.so.2 done


复制/etc/passwd和/etc/group文件到/var/chroot/etc中,并删除用户自己和root以外的所有帐号。如果没有这两个文件,用户登录以后会报“I have no name!”
[root@server chroot]# cp -p /etc/passwd /var/chroot/etc/
[root@server chroot]# cp -p /etc/group /var/chroot/etc/


4.建立chroot目录中的用户主目录
[root@server chroot]# mkdir /var/chroot/home/ait 
[root@server chroot]# chown -R ait /var/chroot/home/ait
[root@server chroot]# chmod 700 /var/chroot/home/ait
OK,经过以上的配置,现在就可以进行测试了。用ait帐号ssh登录到系统中,看到ait是被限制在了自己的宿主目录/home/ait下了。测试执行一些命令,发现只有刚才复制过来的命令可以执行,其他全都不可以。
-bash-3.2$ pwd
/home/ait
-bash-3.2$ ls
-bash-3.2$ mkdir ait_test
-bash-3.2$ ls
ait_test
-bash-3.2$ ll
-bash: ll: command not found 

推荐阅读
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • Linux下安装依赖包版本高解决方法
    本文介绍了在Linux系统下,当已安装的依赖包版本高于需要安装的依赖包版本时,解决方法包括欺骗安装程序和修改相关配置文件等操作。针对不同情况,提供了不同的解决方案。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • Centos7搭建ELK(Elasticsearch、Logstash、Kibana)教程及注意事项
    本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ... [详细]
author-avatar
用户8vcs8un00z
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有