很多网友写了不少关于ssh如何使用pam chroot限制远程登录用户访的文章,不过多少都有些问题,导致不能正常使用,笔者经过研究,将ssh如何使用pam_chroot模块的方法写出来,帮着大家学习.
关于Linux系统的PAM机制这里不再介绍,只给出实现步骤:
1.保证当前安装的openssh支持pam,编译时需要带有--with-pam.如果编译时没有--with-pam以后想要启用pam时,需要修改配置文件sshd_config,将该文件中的”UsePAM no”改为”UsePAM yes”,启用这个选项后重启ssh,会提示错误: ”Unsupported option UsePAM”.如果带有—with-pam,还需要安装库pam-devel,否则调用./configure时会找不到PAM.h.
2.创建用户push,设置密码,必须设置密码,否则不能登录.
3.创建/tmp/test目录作为用户push的虚拟根目录.
4.将/bin和/lib64拷贝到/tmp/test,注意如果不是64位系统则拷贝/lib目录:
cp -a /bin /tmp/test/ 和 cp -a /lib64 /tmp/test/
5.将下面的脚本拷贝到/home/test设置可执行,运行.
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
|
#!/bin/sh
CHROOT_DIR=
"/home/test"
mkdir
-p $CHROOT_DIR/{dev,proc,dev
/pts
}
mount
proc $CHROOT_DIR
/proc
-t proc
#必须创建这个proc文件系统,用户登录后可以看到这个目录中有很多文件/子目录
mount
devpts $CHROOT_DIR
/dev/pts
-t devpts
#devpts文件系统,提供访问终端的接口
mknod
$CHROOT_DIR
/dev/ptmx
c 5 2
#必须有,用户登录后要使用它,作为作为伪终端的master设备.
chmod
666
/dev/ptmx
mkdir
$CHROOT_DIR/{home,home
/push
}
#必不可少,用户目录
chmod
ugo+rw $CHROOT_DIR
/home/push
mkdir
lib64
cp
-a
/lib64/
* lib64/
#必不可少,提供bash运行所需要的库,以及其它程序所需要的库.
#这些文件如果没有,不会影响登录,但登录不能运行这些命令
mkdir
bin
cp
-a
/bin/rmdir
bin/
cp
-a
/bin/rm
bin/
cp
-a
/bin/bash
bin/
cp
-a
/bin/mkdir
bin/
cp
-a
"/bin/pwd"
bin/
cp
-a
/bin/ls
bin/
cp
-a
/bin/bash
bin/
#必须要有,登录后要根据这个文件查询用户信息.如果没有这个,sshd调试时会出现错误:login_init_entry: Cannot find user "push"
#这个错误说明找不到用户.
mkdir
etc
cp
-a
/etc/passwd
etc/
|
6.openssh的配置文件sshd_config中添加UsePAM yes.
7.打开文件/etc/pam.d/sshd,改为如下的内容:
auth required pam_unix.so
account required pam_unix.so
session required pam_chroot.so
8.打开文件/etc/security/chroot.conf,添加”push /home/test”
9.重启sshd
利用远程登录工具登录即可.
本文转自jetyi51CTO博客,原文链接:http://blog.51cto.com/jetyi/1651372 ,如需转载请自行联系原作者