ssh chroot 设置
目的
让特定的用户登录linux服务器后,对其操作权限进行限制:
- 不能使用任何方式杀掉服务器现有的进程
- 最好只能查看相关的目录和文件
- 最好只能运行特定的命令,比如cat、ls、tail等
场景模拟
一台nignx服务器,开发人员需要登录到这台服务上查看nginx的错误日志,并能够上传修改后的nginx.conf文件,但是没有权限重启nginx进程。
想让新修改的nginx.conf文件生效,需要运维人员介入。
操作步骤
- 给开发人员创建帐号并设置密码
# useradd developer
# echo '' | passwd --stdin developer
- 修改sshd_config配置文件,并重启ssh服务
# echo 'Match User developer' >> /etc/ssh/sshd_config
# echo 'ChrootDirectory /home/developer' >> /etc/ssh/sshd_config
# sed -i 's/^Subsystem.*$/Subsystem sftp internal-sftp/' /etc/ssh/sshd_config
# systemctl restart sshd
- 在上面规定的ChrootDirectory的目录下创建dev bin etc lib64 home等文件夹
# cd /home/developer
# mkdir ./{dev,etc,bin,lib64,home}
- 设置dev文件夹
# cd /home/developer/dev
# mknod -m null c
# mknod -m tty c
# mknod -m zero c
# mknod -m random c
- 设置bin文件夹
# cd /home/developer/bin
# cp /bin/bash .
# chroot=/home/developer #定一个变量,赋值为ChrootDirectory定义的路径
# for i in `ldd /bin/bash | awk '{print $3}'| grep '^/lib'`;do cp -v $i $chroot/lib64/;done
# for i in `ldd /bin/bash | awk '{print $1}'| grep '^/lib'`;do cp -v $i $chroot/lib64/;done
- 设置etc文件夹
# cd /home/developer/etc
# cp /etc/passwd /etc/group .
# echo 'export PATH=$PATH:/bin' > profile
- 设置ChrootDirectory文件夹的权限,至此,可以使用登录了,但只能运行bash的内置命令
# chroot=/home/developer #定一个变量,赋值为ChrootDirectory定义的路径
# chown -R root.root $chroot
# chmod $chroot
- 给用户添加ls命令
# cd /home/developer/bin
# which ls #找到ls的路径,可以看到ls位于/usr/bin/ls,这个路径记下后续有用
# cp /usr/bin/ls . #把ls拷贝到bin下
# ldd /usr/bin/ls #查看ls命令所依赖的共享包
# chroot=/home/developer #定一个变量,赋值为ChrootDirectory定义的路径
# for i in `ldd /usr/bin/ls | awk '{print $3}'| grep '^/lib'`;do cp -v $i $chroot/lib64/;done
# for i in `ldd /usr/bin/ls | awk '{print $1}'| grep '^/lib'`;do cp -v $i $chroot/lib64/;done
- 同第8节,添加所需要的命令(例如ls、cat、vi、tail、sftp等),遵循以下几个步骤
① 查找命令在系统中的实际位置,并拷贝到bin目录下(此bin非系统的bin)
② 用ldd命令查找出命令运行时所依赖的共享包
③ 把这些共享包拷贝到lib64下(同样,此lib64非系统的lib64)
④ 可参考第8节,理解这几个步骤,可考虑写个脚本
#!/bin/bash cmdlist="/bin/bash /bin/ls /bin/cp /bin/mkdir /bin/mv /bin/rm /bin/rmdir /usr/bin/ssh /usr/bin/id" # chroot路径
chroot_path="/data" # 判断依赖的库文件
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
if [ ! -d `dirname ${chroot_path}$i` ];then
mkdir -p `dirname ${chroot_path}$i`
fi
cp -a $i ${chroot_path}$i && echo "$i done"
done
# 复制依赖的库文件(因为是i386,所以是lib,如果是x86_64,则是lib64,)
for j in $lib_1
do
if [ ! -d `dirname ${chroot_path}$j` ];then
mkdir -p `dirname ${chroot_path}$j`
fi
cp -f $j ${chroot_path}$j && echo "$j done"
done for k in $lib_2
do
if [ ! -d `dirname ${chroot_path}$k` ];then
mkdir -p `dirname ${chroot_path}$k`
fi
cp -f $k ${chroot_path}$k && echo "$k done"
done
- 常见问题
① 执行for循环的时候,cp会提示文件覆盖,这是因为cp实际是cp -i 的别名,去掉别名即可。
② 按照上面的操作,ChrootDirectory是/home/developer,这个目录可以随便指定,假设上述nginx的日志在/var/log/nginx下,则指定ChrootDirectory为/var/log/nginx。
模拟结果
使用developer用户登录服务器的时候,只能运行添加的命令。特别的,需要文件传输的时候,还可以添加sftp命令。
ssh chroot 设置的更多相关文章
- linux远程ssh一键设置服务器时间
cmd="sudo date -s \"$1\""; ssh mrdTomcat@*.*.*.* "$cmd" 是不是遇到过很多问题 ssh ...
- 服务器SSH连接时间设置
用SSH客户端连接linux服务器时,经常会出现与服务器会话连接中断现象,造成这个问题的原因便是SSH服务有自己独特的会话连接机制. 解决方案: 1.设置服务器向SSH客户端连接会话发送频率和时间 v ...
- LINUX | 谷歌云开启SSH及设置root密码
一.设置root密码 1.先选择从浏览器打开ssh连接服务器 2.切换到root账号 sudo -i 3.设置root密码 passwd 然后会要求输入新密码,然后再重复一次密码,输入密码的时候不会显 ...
- Linux下设置SSH Server设置时间链接限制
OpenSSH基于安全的理由,如果用户连线到SSH Server后闲置一段时间,SSH Server会在超过特定时间后自动终止SSH连线.本人习惯长时间连接,需要做如下修改: 1.打开ssh配置文件: ...
- 利用Bitvise SSH Client设置二级代理
浏览器设置代理 chrome: 插件:SwitchyOmega 二级代理 软件:Bitvise SSH Client 友情连接:链接: https://pan.baidu.com/s/1fdth_TZ ...
- Kali Linux开启ssh服务设置自启
几天没写 水一些今天遇到的问题 0x01 配置SSH参数 修改sshd_config文件,命令为: vi /etc/ssh/sshd_config 将#PasswordAuthentication ...
- git bash push 本地的commit到远程 -- ssh keys设置
1. 检查是否已经创建 ssh keys git bash 下,cd ~/.ssh 如何出现“No such file or directory”,则表示需要创建一个ssh keys. 2. 创建新 ...
- VirtualBox中安装的CentOS开启SSH并设置访问外网
1.全局设置NAT网络 打开VirtualBox->管理->全局设定 网络->添加按钮->添加一个NAT网络(使用默认的就行,不用改动) 2.设置用来本机于VirtualBox ...
- detain ssh server 设置
ssh connection refused 处理方法 一般这种情况是 opens server 没安装 或 没启动 检查 openssh 是否安装 su 登录root账号,安装 openssh se ...
随机推荐
- 当td中文字过长时,显示为省略号
当表格中的文字过长时,可选择已省略号显示.这里是用js实现的.首先获取td中的文字长度(innerText.length),如果长度超过了设定的长度,则截取内容,加上省略号显示.示例代码如下: $(f ...
- 高德局部刷新标记点,bug解决
将接口返回的经纬集合点在高德地图上标记展示, 如果实时刷新地图标记点,不加优化,则会造成过多的带宽消耗 所以,地图只需加载一次,局部更新标记点就好了 代码: <template> < ...
- JZ2440 linux-3.4.2内核启动报错:Verifying Checksum ... Bad Data CRC
使用的uboot版本是1.1.6,是打过u-boot-1.1.6_jz2440.patch的: kernel使用的版本是3.4.2, 也是打过linux-3.4.2_camera_jz2440.pat ...
- Scrapy爬虫框架(2)--内置py文件
Scrapy概念图 这里有很多py文件,分别与Scrapy的各个模块对应 superspider是一个爬虫项目 spider1.py则是一个创建好的爬虫文件,爬取资源返回url和数据 items.py ...
- 【Inno Setup】Pascal 脚本 ---- 事件函数
转载 事件函数 Inno Setup支持以下函数和过程. 1. [安装初始化]该函数在安装程序初始化时调用,返回False 将中断安装,True则继续安装,测试代码如下: function Initi ...
- DFS(单词方阵)
思路: 先把地图二维字符数组存进去之后,遍历寻找到一个‘y’,然后我们可以设置一个八个方向的方向数组,让‘y’的坐标,遍历加上方向坐标,找到’i‘然后沿着这个方向,dfs下去,每次寻找到正确的,然后建 ...
- 徐州A
#include<bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=a;i<=b;++i) #defi ...
- SpringCloud入门(十一):Sleuth 与 Zipkin分布式链路跟踪
现今业界分布式服务跟踪的理论基础主要来自于 Google 的一篇论文<Dapper, a Large-Scale Distributed Systems Tracing Infrastructu ...
- 【集群实战】sersync
1. sersync介绍 sersync功能: 实时同步: sersync组成: sersync==inotify+rsync inotify: 监控某个目录下面"文件/目录"是否 ...
- 【Linux常见命令】vi,vim命令
所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正 ...