linux用户没有.ssh目录,限制ssh登陆用户目录及命令

实现指定的用户从ssh登录后只能在指定的目录下工作并只能运行指定的命令或脚本。

方案:通过搭配使用pam内的chroot module来进行限制。

1、部署目录环境

创建一个目录,目录结构与实际的/目录结构类似

创建用户

useradd xjc

passwd xjc

将chroot目录设置在/chroot下

mkdir -p /chroot/{etc,dev,proc,lib,bin,lib64,home,usr}

mkdir -p /chroot/usr/bin

mkdir -p /chroot/home/xjc

需要说明一下,后面还会遇到很多拷贝文件的操作,对于RHEL5,没有selinux的问题,但是对于RHEL6,如果使用cp拷贝文件,不加-a参数,拷贝的文件会有selinux权限的问题。可以通过ls -Z来查看拷贝的文件与原始的文件是存在差别的:

原始文件的权限为:

#ls -Z /etc/passwd

-rw-r--r-- root root user_u:object_r:etc_t /etc/passwd

而如果直接cp的话,权限会有变化,造成selinux的权限问题。

所以,对于RHEL6,应该使用cp -a来拷贝文件。

对于RHEL5

grep xjc /etc/passwd >/chroot/etc/passwd

对于RHEL6,使用上面的方法创建passwd文件也会有权限问题,解决的办法就是cp -a /etc/passwd /chroot/etc/passwd,然后删除里面的无关用户。

cp -a /bin/bash /chroot/bin/

查看bash命令需要哪些.so文件,拷贝到chroot相应的目录中

#ldd /bin/bash

linux-vdso.so.1 => (0x00007fff569ff000)

libtinfo.so.5 => /lib64/libtinfo.so.5 (0x000000369d200000)

libdl.so.2 => /lib64/libdl.so.2 (0x000000368ea00000)

libc.so.6 => /lib64/libc.so.6 (0x000000368e600000)

/lib64/ld-linux-x86-64.so.2 (0x000000368e200000)

拷贝

cp -a /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /chroot/lib64/

拷贝完成后,ls -l,会发现拷贝的是软链接文件:

# ll

total 0

lrwxrwxrwx. 1 root root 10 Feb 6 13:58 ld-linux-x86-64.so.2 -> ld-2.12.so

lrwxrwxrwx. 1 root root 12 Feb 6 13:58 libc.so.6 -> libc-2.12.so

lrwxrwxrwx. 1 root root 13 Feb 6 13:58 libdl.so.2 -> libdl-2.12.so

lrwxrwxrwx. 1 root root 15 Jan 16 22:36 libtinfo.so.5 -> libtinfo.so.5.7

拷贝原始文件:

cp -a /lib64/{ld-2.12.so,libc-2.12.so,libdl-2.12.so,libtinfo.so.5.7} /chroot/lib64/

简单测试一下,看看chroot命令是否可以用该目录当做/环境。

chroot /chroot

没有错误信息即可,正常应显示bash的信息。

2、ssh设置

/etc/ssh/sshd_config

确保

UsePAM yes

默认即为yes

3、pam验证增加chroot模块

/etc/pam.d/sshd

在最下面添加一行:

session required pam_chroot.so

一定要确保输入正确,否则可能造成ssh无法登陆。

pam_chroot.so执行后会读取配置文件以决定是否使用chroot环境。

/etc/security/chroot.conf

# /etc/security/chroot.conf

# format:

# username_regex        chroot_dir

#matthew                /home

添加一行

xjc /chroot

4、调试ssh服务

测试:

ssh xjc@127.0.0.1

登陆失败,打开/var/log/secure日志查看:

Jun  6 09:40:42 sjz sshd[18769]: pam_env(sshd:setcred): Unable to open config file: /etc/security/pam_env.conf: No such file or directory

Jun  6 09:40:42 sjz sshd[18694]: error: openpty: No such file or directory

Jun  6 09:40:42 sjz sshd[18769]: error: session_pty_req: session 0 alloc failed

cp -a /etc/security /chroot/etc

为chroot准备dev环境,准备pts环境

mount --bind /dev /chroot/dev

mount -t devpts -o gid=5,mode=620 devpts /chroot/dev/pts

准备proc环境

mount -t proc /proc /chroot/proc/

再次登陆测试:

ssh xjc@127.0.0.1

Jun  6 09:50:04 sjz sshd[21426]: pam_env(sshd:setcred): Unable to open env file: /etc/environment: No such file or directory

Jun  6 09:50:04 sjz sshd[21390]: error: ssh_selinux_setup_pty: security_compute_relabel: No such file or directory

cp -a /etc/environment /chroot/etc/

重新测试:

ssh xjc@127.0.0.1

xjc@127.0.0.1's password:

-bash-4.1$

OK,可以正常登陆了。

如果访问系统的某个目录?

mount --bind /usr/local/123 /chroot/usr/local/123

5、环境设置

最简单的就是不设置环境,使用bash版本号作为提示符。

或者也可以按正常的用户一样设置提示符,需要做的操作比较多。

cp -a /etc/{profile,profile.d,bashrc} /chroot/etc/

ssh xjc@127.0.0.1

xjc@127.0.0.1's password:

-bash: id: command not found

-bash: id: command not found

-bash: uname: command not found

-bash: /bin/grep: No such file or directory

-bash: /bin/grep: No such file or directory

-bash: /bin/grep: No such file or directory

-bash: /usr/bin/id: No such file or directory

-bash: [: =: unary operator expected

#whereis id

id: /usr/bin/id /usr/share/man/man1p/id.1p.gz /usr/share/man/man1/id.1.gz

cp -a /usr/bin/id /chroot/usr/bin/

cp -a /bin/grep  /chroot/bin/

cp -a /bin/uname  /chroot/bin/

#  ldd /chroot/usr/bin/id

linux-vdso.so.1 =>  (0x00007fff4cba1000)

libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003690200000)

libc.so.6 => /lib64/libc.so.6 (0x000000368e600000)

libdl.so.2 => /lib64/libdl.so.2 (0x000000368ea00000)

/lib64/ld-linux-x86-64.so.2 (0x000000368e200000)

按上面的方法解决即可。

参考:

http://lccnetvip.pixnet.net/blog/post/32937893--%E7%8E%A9%E7%8E%A9-ssh-%2B-chroot-%E7%B0%A1%E6%98%93%E7%92%B0%E5%A2%83%E6%9E%B6%E8%A8%AD

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值