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 目录。我们将选择 /home/chroot 作为 chrooted 目录。
#mkdir -p /home/chroot |
在 /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 .. |
复制 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 目录中。
下一步是创建必需的设备 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 命令来检查配置是否正确:
/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”。
若要使用 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 |
-
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 |
学习
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文 。
- 了解有关 chroot 命令的更多信息。
-
OpenSSH is now bundled with AIX提供了关于在 AIX 上安装和配置 OpenSSH 的详细信息。
- 了解有关 OpenSSH 的信息。
-
AIX and UNIX 专区:developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。
-
AIX and UNIX 新手入门:访问“AIX and UNIX 新手入门”页面可了解更多关于 AIX 和 UNIX 的内容。
-
AIX and UNIX 专题汇总:AIX and UNIX 专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为你把本专区的所有专题进行汇总,让您更方便的找到你需要的内容。
获得产品和技术
- 从 SourceForge.net 下载最新版本的 OpenSSH。
- 从 IBM 下载最新的 openssl installp 文件集。
讨论
- 参与“AIX and UNIX”论坛: