IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  AIX and UNIX  >

OpenSSH 与 AIX chroot

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

样例代码

英文原文

英文原文


级别: 中级

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 目录。

#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 ..

请注意:请确保在 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 scriptschroot setup script3KBHTTP
关于下载方法的信息


参考资料

学习
  • 您可以参阅本文在 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 专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为你把本专区的所有专题进行汇总,让您更方便的找到你需要的内容。

获得产品和技术

讨论


作者简介

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、基准测试、服务器整合、研究和业界首创的项目,并参与了大量成功的客户端安装。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款