什么是chroot
chroot即change root,是linux操作系统的一种文件系统访问隔离技术,通过改变用户/进程的根目录,使得用户/进程只能访问到该目录及其子目录,从而实现访问隔离。
使用chroot限制用户的访问权限
- 创建一个用户test,并设置密码
1
2
| useradd test
passwd test
|
- 为用户test创建根目录/home/test,该目录必须为root用户所有,否则chroot会失败
1
2
3
| mkdir /home/test
chown root:root /home/test
chmod 755 /home/test
|
- 修改/etc/ssh/sshd_config文件,将test加入到AllowUsers中,并且设置chroot目录为/home/test
1
2
3
4
| AllowUsers test
Subsystem sftp internal-sftp
Match User test
ChrootDirectory /home/test
|
- 重启sshd服务(systemctl不生效的话也可以ps查看进程号直接kill)
- chroot创建了一个隔离的文件系统,因此需要安装一些基础软件,可以选择从现有系统复制:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| mkdir -p /home/test/{bin,lib,lib32,lib64,usr,sbin,usr/local}
ln -s ../bin /home/test/usr/bin
ln -s ../bin /home/test/usr/local/bin
ln -s ../sbin /home/test/usr/sbin
ln -s ../sbin /home/test/usr/local/sbin
ln -s ../lib /home/test/usr/lib
ln -s ../lib /home/test/usr/local/lib
ln -s ../lib32 /home/test/usr/lib32
ln -s ../lib32 /home/test/usr/local/lib32
ln -s ../lib64 /home/test/usr/lib64
ln -s ../lib64 /home/test/usr/local/lib64
cp /usr/local/lib/libreadline.so.6 /home/test/usr/local/lib/
cp /usr/local/lib/libhistory.so.6 /home/test/usr/local/lib/
cp /usr/local/lib/libncurses.so.5 /home/test/usr/local/lib/
cp /usr/local/lib/libdl.so.2 /home/test/usr/local/lib/
cp /usr/local/lib/libc.so.6 /home/test/usr/local/lib/
cp /usr/local/lib/libm.so.6 /home/test/usr/local/lib/
cp /usr/local/lib/libnsl.so.1 /home/test/usr/local/lib/
cp /lib/ld-linux-* /home/test/lib/
cp /bin/bash /home/test/bin/
cp /bin/ls /home/test/bin/
cp /bin/cat /home/test/bin/
cp /bin/cp /home/test/bin/
cp /bin/mkdir /home/test/bin/
cp /bin/rm /home/test/bin/
cp /bin/mv /home/test/bin/
cp /bin/touch /home/test/bin/
cp /bin/chmod /home/test/bin/
cp /bin/vi /home/test/bin/
cp /bin/rz /home/test/bin/
cp /bin/sz /home/test/bin/
cp /bin/clear /home/test/bin/
mkdir -p /home/test/usr/share/terminfo/x
cp /usr/share/terminfo/x/xterm /home/test/usr/share/terminfo/x/
|
- 挂载必要的文件系统:
1
2
3
4
5
6
| mkdir -p /home/test/{proc,sys,dev,run,var}
mount -t proc /proc /home/test/proc
mount -t sysfs /sys /home/test/sys
mount --rbind /dev /home/test/dev
mount --rbind /run /home/test/run
ln -s ../run /home/test/var/run
|
- 为test用户创建home目录,并设置权限
1
2
3
| mkdir /home/test/home
chown test:test /home/test/home
chmod 755 /home/test/home
|
- 使用test用户登录,可以看到只能访问到/home/test目录,并且无法访问其他目录
在chroot环境中运行docker命令
在上个部分完成设置后,只需复制docker命令到test用户目录,并修改相关文件的权限即可
1
2
| cp /bin/docker /home/test/bin/
chmod 766 /var/run/docker* -R
|