背景需求:
在TOMCAT服务器上建立一个普通帐号log_user,只能查看TOMCAT日志,不能删改任何文件,不能执行fdisk、df、dd、mkdir、yum等命令,不能访问日志目录以外的路径。
系统:centos6.6
tomcat安装路径:/opt/apache-tomcat
tomcat日志路径:/opt/apache-tomcat/logs
 
 
操作过程:
 
一、使用mknod命令在/opt建立/dev下的文件:
mkdir /opt/dev   //该步骤可省略。/opt被设定为log_user的“根目录”
cd /opt/dev
mknod -m 666 null c 1 3
mknod -m 666 tty c 5 0
mknod -m 666 zero c 1 5
mknod -m 666 random c 1 8
 
二、设置log_user用户的根目录权限:
chown root:root /opt
chmod 0755 /opt
 
三、为远程SSH设置交互式shell:
mkdir /opt/bin
mkdir /opt/lib64   //用于调用shell命令的共享库
cp -v /bin/bash /opt/bin   //复制bash文件到log_user目录
ldd /bin/bash   //查询bash所需的共享库文件名及路径
cp -v /lib64/{linux-vdso.so.1 libtinfo.so.5 libdl.so.2 libc.so.6 ld-linux-x86-64.so.2} /opt/lib64/
//将共享库文件复制到log_user的lib库中
 
四、创建log_user用户:
useradd log_user && echo 'log_user' | passwd --stdin log_user
 
五、创建log_user用户的配置目录:
mkdir /opt/etc
cp -vf /etc/{passwd,group} /opt/etc    //当新增类似用户时,要及时更新这两个文件
 
六、编辑passwd和group文件,只保留log_user相关的那行,如下图所示:
 
七、配置ssh与chroot关联起来:
将下面两行追加到/etc/ssh/sshd_config文件:
Match User log_user   //添加要被chroot的用户
ChrootDirectory /opt   //指定log_user的根路径,它将被限制在该路径下
保存退出,restart或reload SSH服务
 
八、创建用户log_user的家目录,添加LINUX命令:
mkdir -p /opt/home/log_user   //建立log_user的家目录
chown -R log_user:log_user /opt/home/log_user   //家目录属主和属组必须是log_user自己
chmod -R 0700 /opt/home/log_user   //家目录读写权限通常是0700
cp -v /bin/{ls,date,cat,grep} /opt/bin   //让log_user用户能使用常用命令
通过ldd /bin/ls查找该的共享库文件路径,并复制到/opt/lib64中:
ldd /bin/ls
cp -v /lib64/{linux-vdso.so.1,libselinux.so.1,librt.so.1,libcap.so.2,libacl.so.1,libc.so.6,libdl.so.2,libpthread.so.0.libattr.so.1} /opt/lib64/
//遇到提示是否overwrite,选‘yes’(如果不复制这些文件,则log_user用户在执行命令时可能会报错,提示缺少xxxx文件)
 
九、用ACL重新设置下tomcat帐号的权限:
yum install acl //安装ACL
vi /etc/fstab,给根分区添加,acl,如下图所示:
mount -o remount,rw /
setfacl -R -m u:log_user:rx /opt   //设置log_user帐号的权限
setfacl -R -m u:tomcat:rwx /opt/apache-tomcat   //设置tomcat帐号的权限。
 
十、登录方式:
只能通过SSH@服务器方式登录,限制才会生效。如果是在本地直接登录log_user,则无效!
在本机或其它机器上:ssh log_user@服务器IP
输入:ls pwd cd /
输入:mkdir df -h fdisk -l
操作成功!!!可以看到,用户已经被限制在/opt目录下,输入:cd /看到的其实是/opt目录的内容。
 

不再需要该用户,并使系统回退到之前的状态:
cd /opt
rmdir dev/ lib64/ etc/ home/ bin/ usr/
setfacl -b -R ./
userdel log_user
chown tomcat:tomcat /opt/apache-tomcat

 
如果在ssh时报错:
Write failed: Broken pipe
这个问题的原因是ChrootDirectory的权限问题,你设定的目录必须是root用户所有,否则就会出现问题。所以请确保sftp用户根目录的所有人是root, 权限是 750 或者 755。可通过查看/var/log/secure日志来准确判断是哪个路径的权限出错。
执行以下命令排错试试:
chown -Rroot:root /opt/   //opt为log_user用户的根路径
setfacl -R -m u:log_user:rx /opt
 
注:将/opt/apache-tomcat/logs目录设置为log_user的“根”应该更符合要求。

限制SSH远程登录用户仅能只读访问Linux中指定的目录的更多相关文章

  1. 限制SSH用户访问Linux中指定的目录

    限制SSH用户访问Linux中指定的目录 http://os.51cto.com/art/201703/534895.htm#topx http://www.cnblogs.com/lykyl/arc ...

  2. 如何通过ssh远程登录内网的Mac和Linux系统?

    神器:ngrok 用法很简单,安装后 验证授权: ./ngrok authtoken 3WWujp1TEtHRo6rphEi5Y_7MBqGWm9yThCSFyqEHgip 在内网开启tcp服务 ng ...

  3. ubuntu拒绝root用户ssh远程登录解决办法

    ubuntu拒绝root ssh远程登录通常情况是ssh设置了禁止root远程登录,解决办法就是:修改ssh配置,然后重启ssh服务即可. vi /etc/ssh/sshd_config 找到并用#注 ...

  4. [转帖]SSH远程登录配置文件sshd_config详解

    SSH远程登录配置文件sshd_config详解 2016年06月02日 17:42:25 Field_Yang 阅读数 61386   版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权 ...

  5. SSH远程登录、.sh文件后缀运行、l l命令结果说明、VIM模式切换

    目录 SSH远程登录..sh文件后缀运行.l l命令结果说明.VIM模式切换 SSH远程安全登录 .sh文件后缀运行 l l命令结果说明 VIM模式切换 SSH远程登录..sh文件后缀运行.l l命令 ...

  6. ssh远程登录linux live系统

    要想ssh远程登录,须要准备两件事:配置同网段IP和开启SSH服务. 因为live系统没有IP,所以首先须要配置IP. 我的live系统是在虚拟机上启动的,宿主IP为192.168.230.1,liv ...

  7. ssh远程登录命令简单实例

    ssh远程登录命令简单实例 ssh命令用于远程登录上Linux主机. 常用格式:ssh [-l login_name] [-p port] [user@]hostname 更详细的可以用ssh -h查 ...

  8. SSH(远程登录)原理

    最近在研究hadoop,因为是分布式的,会涉及很多机器协作工作,但所有的操作都是需要进行权限验证的,namenode主机会尝试启动datanode主机上的进程等等.下面就用一张图来解释SSH登录验证的 ...

  9. SSH远程登录CentOS服务器

    1.把ssh默认远程连接端口修改为2200编辑防火墙配置:vi /etc/sysconfig/iptables防火墙增加新端口2222 -A INPUT -m state --state NEW -m ...

随机推荐

  1. .net组件和com组件&托管代码和非托管代码

    com组件和.net组件: COM组件是非托管对象,可以不需要.NET框架而直接运行,.NET框架组件是托管对象,必须有.NET框架的支撑才能运行. COM组件有独立的类型库文件,而.NET组件是通过 ...

  2. 机器学习笔记(4)Logistic回归

    模型介绍 对于分类问题,其得到的结果值是离散的,所以通常情况下,不适合使用线性回归方法进行模拟. 所以提出Logistic回归模型. 其假设函数如下: \[ h_θ(x)=g(θ^Tx) \] 函数g ...

  3. 安装Ubuntu 16.04双系统详解(Nvidia显卡)

    Ubuntu16.04双系统安装 一.准备工作 设备:惠普台式机,i5-7400.8G内存.1T机械硬盘.NVIDIA GTX1050显卡.预装系统:Win10. 1.下载ubuntu镜像文件,本人使 ...

  4. webgl 深度缓冲

    传统的画2d画布就是后画的会盖在先画的上面,但是在画一些三维图形时,这很难控制 深度缓冲区的作用就是区分颜色所在的层次,防止把被遮挡住的颜色显示出来. 深度缓冲很强大,用起来很简单 开启深度缓冲(测试 ...

  5. 剖析Vue原理&实现双向绑定MVVM-2

    vue.js 最核心的功能有两个,一是响应式的数据绑定系统,二是组件系统.本文仅探究双向绑定是怎样实现的.先讲涉及的知识点,再用简化得不能再简化的代码实现一个简单的 hello world 示例. 一 ...

  6. webgl学习笔记一-绘图单点

    写在前面   WebGl(全称:Web Graphics Library : web图形库) 是基于OpenGL ES 2.0的3D绘图协议.   WebGL完美地解决了现有的Web交互式三维动画的两 ...

  7. IE 之 userData 模拟 localStorage

    引 chrome,  safari, firefox, ie 9都支持 localStorage.  但可恶的是,中国 ie 6 占有最大的比例. 使用 cookie 不但容量有限,而且给我们增加了不 ...

  8. 卸载iptables 小心了!!怎么关闭和卸载iptables

    千万千万不要使用下面的命令卸载iptables yum remove iptables 这样操作会卸载掉很多系统必要的组件,那就开不了机了,链接不上了.切记切记. 如果想永远停用,使用以下命令即可: ...

  9. 百度editor编辑器添加新字体

    Ueditor本身自带11种字体,添加如下: 1.找到文件 ueditor/lang/zh-cn/zh-cn.js ,添加字体 'fontfamily': {        'songti': '宋体 ...

  10. C++解析(1):C到C++的升级

    0.目录 1.C与C++的关系 2.C到C++的升级 2.1 语言的实用性 2.2 register关键字 2.3 同名的全局变量 2.4 struct关键字 2.5 int f() 与 int f( ...