linux chroot shell,Linux chroot Shell —— 简单chroot指定用户

对于Linux服务器,有时需要开放登录权限给一部分用户,但并非所有用户都愿意安分守己,也无法知道谁是不安分守己的,给多一个这些用户开放登录权限,系统的威胁就多了一分。

目前来说比较好的方案是chroot,调用了chroot(),就能把的根目录改成指定的根目录。何为根目录?顾名思义,“根”就是所有目录的“根”,一切目录均从“根”而生,没有“根”就没有其他目录,换句话说,“根目录”就是最原始的目录。你无法访问“根”之前前的数据,没有“根”的时候,怎么可以发展数据呢?

二进制程序chroot乃GNU的核心程序中的一个,Linux发行版本一般都有Coreutils,不过二进制版的chroot在这种情况下帮不上忙,因为仅有特权用户(root)才能调用chroot(),why?想想如果任何人都能调用chroot,如果用户自建了一个自定义了root密码的根文件系统,那他岂不是可以chroot进去后把自己提升为root?

SSH自带chroot功能,不过也仅仅是帮你chroot,如果让所有用户共享一个chroot文件系统,一个用户的数据可能会泄露到其他用户手上,要让不同用户使用不同chroot文件系统,管理和配置起来又麻烦。不仅如此,每chroot一个用户,就需要更改SSH的配置文件,记录多了异常麻烦。

如何简单地管理chroot文件系统,还方便地chroot用户?

Linux-CHROOT-SHELL就是为了解决此问题而生的。

拥有了Linux-CHROOT-SHELL,你只需要建立且维护一个chroot根文件系统。

拥有了Linux-CHROOT-SHELL,你可以让所有用户使用的chroot环境相互隔离。

拥有了Linux-CHROOT-SHELL,你不再需要维护多余的配置文件,繁杂的配置记录。

多说没用,下面让我来告诉大家如何使用Linux-CHROOT-SHELL。

Linux-CHROOT-SHELL由C语言编写,代码托管在GIT服务器上,因此需要安装gcc与git:

Default

apt-get install gcc git

1

apt-getinstallgccgit

从GIT服务器上获取源码,并进入源码目录:

Default

git clone https://git.coding.net/yzs/Linux-CHROOT-SHELL.git

cd Linux-CHROOT-SHELL

1

2

gitclonehttps://git.coding.net/yzs/Linux-CHROOT-SHELL.git

cdLinux-CHROOT-SHELL

编译Linux-CHROOT-SHELL:

Default

gcc main.c -o /usr/bin/chroot_shell

1

gccmain.c-o/usr/bin/chroot_shell

一切无误后,编译完毕的二进制文件将会存放到/usr/bin/chroot_shell。

由于调用chroot(),内核的要求是特权用户身份,因此需要给予用户临时的root权限,不过不用担心,一旦chroot完毕后,本shell将会自动把身份更改为原用户的身份:

Default

chmod u+s,g+s /usr/bin/chroot_shell

1

chmodu+s,g+s/usr/bin/chroot_shell

执行这条命令后,程序将会获得set uid和set gid属性,所有执行本程序的用户都可以取得文件所有者和所属群组的权限,所以必须确保本文件的所有者和所属群组为root。不过,既然你编译的时候能把文件输出到/usr/bin/,那你一定是以用root身份操作的,那么本文件的所有者和所属群组也必定是root。

接下来构建chroot文件系统:

Default

mkdir -p /srv/chroot/jessie/

wget http://mirrors.ustc.edu.cn/openvz/template/precreated/debian-8.0-x86_64-minimal.tar.gz -O- | tar zxvf - -C /srv/chroot/jessie/

1

2

mkdir-p/srv/chroot/jessie/

wgethttp://mirrors.ustc.edu.cn/openvz/template/precreated/debian-8.0-x86_64-minimal.tar.gz -O- | tar zxvf - -C /srv/chroot/jessie/

为了简单起见,这里直接使用了OpenVZ的模板构建chroot文件系统。

构建完毕后,可以对根文件系统进行设置:

Default

chroot /srv/chroot/jessie/ /bin/su - -l

1

chroot/srv/chroot/jessie//bin/su--l

例如更改/etc/resolv.conf中所设置的DNS服务器。

设置完毕后,执行exit退出:

Default

exit

1

exit

最后一步,创建用户:

创建用户的方法和平常差不多,只不过需要把用户的Shell指定为/usr/bin/chroot_shell:

Default

useradd -ms /usr/bin/chroot_shell chroot_user

1

useradd-ms/usr/bin/chroot_shellchroot_user

添加用户成功后,更改用户密码:

Default

echo "chroot_user:password" | chpasswd

1

echo"chroot_user:password"|chpasswd

如果要更改原有用户的Shell,使用usermod即可:

Default

usermod -s /usr/bin/chroot_shell chroot_user

1

usermod-s/usr/bin/chroot_shellchroot_user

别忘了,还要同步passwd的记录到chroot文件系统:

Default

\cp -ar /etc/passwd /srv/chroot/jessie/etc/passwd

1

\cp-ar/etc/passwd/srv/chroot/jessie/etc/passwd

可以把这个命令写到cron任务中,实现周期性同步。

接下来,你可以尝试使用指定了chroot_shell的用户登录:

31fd4b7dab21371ec8e0e21fb8d91e17.png

620d4059074b5bb1207e016b55c27008.png

可以看到,chroot_user和chroot_user2互相无法访问对方的目录,根据下图,可以看出两个chroot的用户无法访问原根存在的文件,说明chroot成功:

db5075352bdf187f25a95fbc865324bf.png

不仅如此,chroot后,用户还能访问自己家目录原有的数据,此外,除了用户自己的家目录和/tmp,所有其他目录均为只读模式,/tmp也实现了隔离,所有用户使用的/tmp不相干扰,相互独立。

由于没有挂载/proc和/dev,用户自然无法调用程序查看系统信息。

有了chroot shell,chroot用户变得简单起来,再也不用担心给了用户登录权限后,给服务器增加安全隐患了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值