级别: 中级 Jimmie Brewster (jbrew@us.ibm.com), AIX 2 级支持,
IBM
Stefan Kister (skister@de.ibm.com), IT 咨询专家,
IBM
2008 年 7 月 03 日 有时候,您可能希望限制用户访问特定目录,这样他们就无法查看整个系统。可以通过创建 chroot 用户实现此目标。本文介绍如何设置 IBM® AIX® chroot 环境,并将其与 ssh、sftp 和 scp 一起使用。您还将了解 AIX 和 OpenSSH 的先决条件,以及如何配置和使用 chroot 环境。本文还提供了自动设置该环境的可下载示例 Shell 脚本。
引言
IBM 支持的 OpenSSH 版本(OpenSSH 4.5 版本以上)已包括 chroot 功能。它查找用户 home 目录中的“.”(点),然后 chroot () 调用更改用户的根目录,以使“.”(点)之前的目录成为 chrooted 目录。本文帮助您在 AIX 上设置 chroot 环境,然后将其与 ssh、sftp 和 scp 一起使用。
我们假定读者拥有基本的 AIX 技能,因此我们不再详细说明一般 AIX 任务,如更新 AIX、创建逻辑卷等等。我们重点关注设置 chroot 环境,以及将其与 IBM 支持的 OpenSSH 一起使用。
先决条件
chroot 功能在 OpenSSH 4.5p1 以上的版本中受到支持。要从 sourceforge.net 下载的文件集为 openssh-4.5.0.5302(OpenSSH-4.5p2-r2) 及更高版本。支持 AIX 5.3(至少需要 TL06)和 AIX 6.1 或更高版本。
Openssh-4.5p1(openssh-4.5.0.5200) for AIX 5.2 同样支持 chroot 功能。支持的最低 AIX 版本为 AIX 5200-10。
从 SourceForge.net 下载最新版本的 OpenSSH,并从 IBM 下载最新的 openssl installp 文件集,有关这些下载的信息,请参阅参考资料部分。
您需要在该站点上注册才能下载文件集。
在您下载了所有文件集后,可以使用 smitty install 或 AIX NIM 来安装它们。
以下是为 openssh 4.5.0.5302 或 openssl 0.9.8.4 安装的文件集:
/home/chroot # lslpp -l | grep open
openssh.base.client 4.5.0.5302 COMMITTED Open Secure Shell Commands
openssh.base.server 4.5.0.5302 COMMITTED Open Secure Shell Server
openssh.license 4.5.0.5302 COMMITTED Open Secure Shell License
openssh.man.en_US 4.5.0.5302 COMMITTED Open Secure Shell
openssh.msg.en_US 4.5.0.5302 COMMITTED Open Secure Shell Messages -
openssl.base 0.9.8.4 COMMITTED Open Secure Socket Layer
openssl.license 0.9.8.4 COMMITTED Open Secure Socket License
openssl.man.en_US 0.9.8.4 COMMITTED Open Secure Socket Layer
|
配置 chroot 环境
首先,您需要选择一个 chroot 目录。我们将选择 /home/chroot 作为 chrooted 目录。
在 /home/chroot 下面,您需要创建所需的目录和子目录,如 dev、dev/pts、etc、usr、usr/bin、usr/sbin、usr/lib 和 tmp。
#pwd
#/home/chroot
#mkdir –p dev/pts etc usr/bin usr/sbin usr/lib/ tmp
|
因此,我们在 /home/chroot 目录下拥有了以下目录:
/home/chroot # ls -al
total 8
drwxr-xr-x 6 root system 256 Feb 01 12:07 .
drwxr-xr-x 32 root system 4096 Feb 01 12:06 ..
drwxr-xr-x 3 root system 256 Feb 01 12:07 dev
drwxr-xr-x 2 root system 256 Feb 01 12:07 etc
drwxr-xr-x 2 root system 256 Feb 01 12:07 tmp
drwxr-xr-x 5 root system 256 Feb 01 12:07 usr
/home/chroot # ls -al *
dev:
total 0
drwxr-xr-x 3 root system 256 Feb 01 12:07 .
drwxr-xr-x 6 root system 256 Feb 01 12:07 ..
drwxr-xr-x 2 root system 256 Feb 01 12:07 pts
etc:
total 0
drwxr-xr-x 2 root system 256 Feb 01 12:07 .
drwxr-xr-x 6 root system 256 Feb 01 12:07 ..
tmp:
total 0
drwxr-xr-x 2 root system 256 Feb 01 12:07 .
drwxr-xr-x 6 root system 256 Feb 01 12:07 ..
usr:
total 0
drwxr-xr-x 5 root system 256 Feb 01 12:07 .
drwxr-xr-x 6 root system 256 Feb 01 12:07 ..
drwxr-xr-x 2 root system 256 Feb 01 12:07 bin
drwxr-xr-x 3 root system 256 Feb 01 12:07 lib
drwxr-xr-x 2 root system 256 Feb 01 12:07 sbin
/home/chroot # ls -al usr/lib
total 0
drwxr-xr-x 3 root system 256 Feb 01 12:07 .
drwxr-xr-x 5 root system 256 Feb 01 12:07 ..
|
 | |
请注意:请确保在 chrooted 目录下创建的所有文件的权限与原始目录中的文件的权限相同。
|
|
复制二进制文件和库
复制 chroot 环境所需的所有二进制文件和相关库。对于 ssh 登录,shell 是必需的(例如 ksh),对于 scp,相关二进制文件是必需的,而对于 sftp,访问 sftp 服务器二进制文件是必需的。在我们的示例中,我们还选择在我们的受限 shell 中允许使用命令“cd”、“pwd”、“ls”、“mkdir”、“rmdir”、“rm”和“cp”。
可以使用“which”命令查看二进制文件的路径信息,还可以使用“ldd”命令查看相关库。例如,若要复制“ls”命令的所有二进制文件和相关库,请运行下列命令:
# which ls | xargs ldd
/usr/bin/ls needs:
/usr/lib/libc.a(shr.o)
/unix
/usr/lib/libcrypt.a(shr.o)
|
将这两个库复制到 <chroot-dir> 目录的相应目录中。
# cp /usr/lib/libc.a /home/chroot/usr/lib/
# cp /usr/lib/libcrypt.a /home/chroot/usr/lib/
|
所有二进制文件还需要 /unix。首先检查 AIX 系统上的 /unix 目录:
/home/chroot # ls -al /unix
lrwxrwxrwx 1 root system 21 Aug 10 2005 /unix -> /usr/lib/boot/unix_64
|
然后为 /unix 创建软链接,如下所示:
/home/chroot # ln -s /usr/lib/boot/unix_64 unix
|
现在,我们在 chroot 目录中拥有下列目录:
/home/chroot # ls -al
total 8
drwxr-xr-x 6 root system 256 Feb 01 13:11 .
drwxr-xr-x 32 root system 4096 Feb 01 12:06 ..
drwxr-xr-x 3 root system 256 Feb 01 12:07 dev
drwxr-xr-x 2 root system 256 Feb 01 12:07 etc
drwxr-xr-x 2 root system 256 Feb 01 12:07 tmp
lrwxrwxrwx 1 root system 21 Feb 01 13:11 unix -> /usr/lib/boot/unix_64
drwxr-xr-x 5 root system 256 Feb 01 12:07 usr
|
同样,将所有所需的二进制文件和库复制到相应的 chroot 目录中。
 | |
在更新您的 AIX 系统时,必须检查原始系统中的二进制文件或库的版本是否发生变化。如果有变化,则必须相应地更新 chroot 环境中的二进制文件或库文件。
|
|
创建必需设备
下一步是创建必需的设备 null、zero、tty 和 pts/#。<chroot-dir>/dev 中的设备应该具有与原始 AIX 系统上相同的“Major and Minor”和权限。首先检查 AIX 系统上的值,使用“mknod”创建设备,并在 chroot 目录内使用“chmod”指定适当的权限。例如:
/home/chroot # ls –la /dev/tty
crw-rw-rw- 1 root system 1, 0 Jan 30 13:54 /dev/tty
/home/chroot # ls –la /dev/null
crw-rw-rw- 1 root system 2, 2 Feb 01 12:49 /dev/null
/home/chroot # ls –la /dev/zero
crw-rw-rw- 1 root system 2, 3 Aug 10 2005 /dev/zero
|
接下来,在 chroot 目录中使用 mknod 命令创建它们,并为其指定与原始设备上相同的权限:
/home/chroot # mknod dev/tty c 1 0
/home/chroot # mknod dev/null c 2 2
/home/chroot # mknod dev/zero c 2 3
chmod 666 null tty zero
/home/chroot # ls -al dev
total 0
drwxr-xr-x 3 root system 256 Feb 01 13:49 .
drwxr-xr-x 6 root system 256 Feb 01 13:11 ..
crw-rw-rw- 1 root system 2, 2 Feb 01 13:49 null
drwxr-xr-x 2 root system 256 Feb 01 12:07 pts
crw-rw-rw- 1 root system 1, 0 Feb 01 13:48 tty
crw-rw-rw- 1 root system 2, 3 Feb 01 13:49 zero
|
为 pts 设备执行相同的步骤。通常,不必在 chroot 中拥有与一般 AIX 环境中同样多的 pts/# 设备。在我们的测试系统中,使用从 0 到 9 共 10 个 pts/# 设备。因此,可以根据需求创建 pts 设备。
以下是为我们的 chroot 环境创建的 pts 设备,其具有与原始 pts 设备相同的权限。
/home/chroot # chmod go+w /home/chroot/dev/pts/*
/home/chroot # ls -al /home/chroot/dev/pts/
total 16
drwxr-xr-x 2 root system 4096 Feb 01 15:01 .
drwxr-xr-x 3 root system 4096 Feb 01 15:00 ..
crw-rw-rw- 1 root system 22, 0 Feb 01 15:01 0
crw-rw-rw- 1 root system 22, 1 Feb 01 15:01 1
crw-rw-rw- 1 root system 22, 2 Feb 01 15:01 2
crw-rw-rw- 1 root system 22, 3 Feb 01 15:01 3
crw-rw-rw- 1 root system 22, 4 Feb 01 15:01 4
crw-rw-rw- 1 root system 22, 5 Feb 01 15:01 5
crw-rw-rw- 1 root system 22, 6 Feb 01 15:01 6
crw-rw-rw- 1 root system 22, 7 Feb 01 15:01 7
crw-rw-rw- 1 root system 22, 8 Feb 01 15:01 8
crw-rw-rw- 1 root system 22, 9 Feb 01 15:01 9
/home/chroot # chmod 620 /home/chroot/dev/pts/0
/home/chroot # chown root:security /home/chroot/dev/pts/0
/home/chroot # ls -al /home/chroot/dev/pts/0
crw--w---- 1 root security 22, 0 Feb 01 15:01 /home/chroot/dev/pts/0
/home/chroot # ls -al /dev/pts/0
crw--w---- 1 root security 22, 0 Feb 01 15:09 /dev/pts/0
|
检查 chroot 配置
既然已经完成了基础 chroot 环境的设置,现在我们使用 chroot 命令来检查配置是否正确:
/home/chroot # chroot /home/chroot /usr/bin/ksh
/ # ls
dev etc tmp unix usr
/ # scp -?
scp: illegal option -- ?
usage: scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 [...] [[user@]host2:]file2
/ # cp -?
cp: illegal option -- ?
Usage: cp [-fhipHILPU] [-r|-R] [-E{force|ignore|warn}] [--] src target
or: cp [-fhipHILPU] [-r|-R] [-E{force|ignore|warn}] [--] src1 ... srcN directory
/ # touch /tmp/test.out
/usr/bin/ksh: touch: not found
/ # exit
|
只能执行已复制其二进制文件和库的那些命令(例如,“ls”、“scp”和“cp”)。若要退出 chroot 环境,请使用“exit”。
创建 chroot 用户并结束安装
若要使用 ssh 从远程访问此 chroot 环境,则必须创建 <chroot-user>。一般来说,用户有一个具有 magic token 的新 home 目录,例如:
<chroot-dir>/./home/<chroot-user>
|
在我们的示例中,创建了用户 smile,其 home 目录为 /home/chroot/./home/smile,初始化程序为 /usr/bin/ksh:
/home/chroot # useradd -s /usr/bin/ksh -m -d
/home/chroot/./home/smile/ -c "chroot test user" smile
/home/chroot # chown smile:staff /home/chroot/home/smile
/home/chroot # ls -al /home/chroot/home
total 0
drwxr-xr-x 3 root system 256 Feb 01 18:15 .
drwxr-xr-x 7 root system 256 Feb 01 18:15 ..
drwxr-xr-x 2 smile staff 256 Feb 01 18:15 smile
|
设置 <chroot-user> 的密码,然后在用户 shell 中更改它:
/home/chroot # passwd smile
Changing password for "smile"
smile's New password:
Enter the new password again:
/home/chroot # su - smile
$ passwd
Changing password for "smile"
smile's Old password:
smile's New password:
Enter the new password again:
$ exit
|
将 <chroot-user> 条目从 /etc/passwd 和 /etc/group 复制到 chroot 环境的相关文件中:
/home/chroot # cat /etc/passwd | grep smile >> /home/chroot/etc/passwd
/home/chroot # cat /etc/group | grep smile >> /home/chroot/etc/group
/home/chroot # cat /home/chroot/etc/passwd
smile:!:397:1:chroot test user:/home/chroot/./home/smile/:/usr/bin/ksh
/home/chroot # cat /home/chroot/etc/group
staff:!:1:ipsec,dasusr1,db2inst1,db2fenc1,idsldap,ldapdb2,ftp,anonymou,aroell,
ldap,ituam,ski,usrsftp,sshd,bm,smile
|
现在,已完成 chroot 环境的设置,并可与 ssh、sftp 和 scp 一起使用,例如:
lp2:root:/root # sftp smile@lp5
Connecting to lp5...
smile@lp5's password:
sftp> ls
sftp> put smit.log
Uploading smit.log to /home/smile/smit.log
smit.log 100% 203KB 203.1KB/s 00:00
sftp> ls -al
drwxr-xr-x 2 smile staff 256 Feb 1 18:32 .
drwxr-xr-x 3 0 0 256 Feb 1 18:15 ..
-rwxr----- 1 smile staff 254 Feb 1 18:15 .profile
-rw-r--r-- 1 smile staff 207951 Feb 1 18:32 smit.log
sftp> quit
lp2:root:/root # ssh smile@lp5
smile@lp5's password:
Last login: Fri Feb 1 18:32:19 NFT 2008 on ssh from X.YYY.ZZZ.77
$ ls -al
total 424
drwxr-xr-x 2 smile staff 256 Feb 1 18:33 .
drwxr-xr-x 3 0 0 256 Feb 1 18:15 ..
-rwxr----- 1 smile staff 254 Feb 1 18:15 .profile
-rw------- 1 smile staff 10 Feb 1 18:33 .sh_history
-rw-r--r-- 1 smile staff 207951 Feb 1 18:32 smit.log
$ cp smit.log test.out
$ rm smit.log
$ ls -al
total 432
drwxr-xr-x 2 smile staff 256 Feb 1 18:33 .
drwxr-xr-x 3 0 0 256 Feb 1 18:15 ..
-rwxr----- 1 smile staff 254 Feb 1 18:15 .profile
-rw------- 1 smile staff 54 Feb 1 18:33 .sh_history
-rw-r--r-- 1 smile staff 207951 Feb 1 18:33 test.out
$ exit
Connection to lp5 closed.
lp2:root:/root # scp smile@lp5:/home/smile/test.out .
smile@lp5's password:
test.out 100% 203KB 203.1KB/s 00:00
lp2:root:/root # ls -al test.out
-rw-r--r-- 1 root system 207951 Feb 01 18:38 test.out
|

 |

|
chrooted 用户的各种身份验证方法
-
PAM 身份验证:将
/usr/lib/security/pam_aix
复制到 chrooted 定向的目录中,例如:
# cp /usr/lib/security/pam_aix <chroot-dir>/usr/lib/security/
|
-
公钥身份验证:将 chrooted 用户的公钥文件复制到下述路径中:
/home/<chroot-dir>/home/<chroot-user>/.ssh/authorized_keys
|
下载 | 描述 | 名字 | 大小 | 下载方法 |
|---|
| Sample chroot scripts | chroot setup script | 3KB | HTTP |
|---|
参考资料 学习
获得产品和技术
讨论
作者简介  | |  | Jimmie Brewster 的 IBM 工作生涯始于激光打印机开发部门。他帮助开发了用于测量带色调光电导体和光电导体反射率的闭环系统,并获得了 IBM 专利。他从事 AIX 硬件和软件工作始于客户安装和测试部门,负责对 IBM RS/6000 组件执行故障分析。Jimmie 从 1995 年开始在 AIX 软件支持部门的 TCP/IP 团队中工作,他目前在网络通信团队 (NETCOM) 中工作,主要负责为 TCP/IP 应用程序提供支持。 |
 | |  | Stefan Kister 是一名 IBM 认证的 IT 专家,从 1999 年开始在德国技术销售支持部门工作。Stefan 拥有德国多特蒙德大学的化学博士学位。他在 AIX/Power 系统解决方案的咨询和实现方面有很强的能力。他负责设计基础设施、高可用性和灾难恢复解决方案,涵盖服务器、存储、网络和虚拟化技术。他在 UNIX 环境的规模调整和概念规划方面拥有大量经验,在性能监视和优化方面也是如此。他领导了多个 PoC、基准测试、服务器整合、研究和业界首创的项目,并参与了大量成功的客户端安装。 |
对本文的评价
|