开发者社区> 科技探索者> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

SSH限制普通用户到家目录

简介:
+关注继续查看

在这个例子中,建立了一个"迷你监狱"用来测试一个只有 ls 命令的 Bash shell。首先用 mkdir 命令设定好 abc "监狱" 路径。


1.创建用户abc

useradd abc

passwd abc


2.用root用户建立目录 :

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

chown abc /chroot/home/abc


3. 创建passwd文件

tail -1 /etc/passwd >/chroot/etc/passwd


4.把bash文件拷贝到/chroot/bin下.(对于RHEL6,应该使用cp -a来拷贝文件。)

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


5. 查看bash命令需要哪些.so文件,拷贝到chroot相应的目录中(为ldd /bin/bash的结果)

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

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

# ll /lib64/

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的信息。


6、ssh设置

/etc/ssh/sshd_config

确保

UsePAM yes

默认即为yes


7. pam验证增加chroot模块

vim /etc/pam.d/sshd

在最下面添加一行:

session    required     pam_chroot.so

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

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

vim /etc/security/chroot.conf

# /etc/security/chroot.conf

# format:

# username_regex        chroot_dir

#matthew                /home

添加一行

abc /chroot


8、调试ssh服务

测试:

ssh abc@127.0.0.1

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

Jun  6 09:40:42 abc 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 abc sshd[18694]: error: openpty: No such file or directory

Jun  6 09:40:42 abc 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 abc@127.0.0.1

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

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

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


重新测试:

ssh abc@127.0.0.1

abc@127.0.0.1's password: 

-bash-4.1$ 

OK,可以正常登陆了。

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

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

9、复制 ls 命令所需的库文件到chroot相应的目录中。用 ldd 命令打印出 ls 命令依赖的共享库:

cp -a /bin/ls /chroot/bin/

ldd /bin/ls

输出样例:

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

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

librt.so.1=>/lib64/librt.so.1(0x00000032f7a00000)

libcap.so.2=>/lib64/libcap.so.2(0x00000032fda00000)

libacl.so.1=>/lib64/libacl.so.1(0x00000032fbe00000)

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

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

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

libpthread.so.0=>/lib64/libpthread.so.0(0x00000032f7600000)

libattr.so.1=>/lib64/libattr.so.1(0x00000032f9600000)


你可以一个个的复制库文件,为了更高效的作业,我们也可以使用bash shell 的循环指令实现:

list="$(ldd /bin/ls | egrep -o '/lib.*\.[0-9]')"

for i in $list;do cp -a "$i" /chroot/"${i}";done


拷贝原始文件:

list=`ll $(ldd /bin/ls | egrep -o '/lib.*\.[0-9]') |awk -F '>' '{print $2}'`

for i in $list;do cp -a /lib64/"$i" /chroot/lib64/"${i}";done


最后,chroot 到你的新abc:

chroot /chroot/home/abc /bin/bash

尝试浏览一下 /etc 或 /var:

# ls /


10、环境设置

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

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

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


 ssh abc@127.0.0.1

abc@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)

按上面的方法解决即可。

本文转自奔跑在路上博客51CTO博客,原文链接http://blog.51cto.com/qiangsh/1763530如需转载请自行联系原作者

qianghong000

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SSH无密码验证
一、安装和启动SSH协议  假设没有安装ssh和rsync,可以通过下面命令进行安装。 sudo apt-get install ssh 安装SSH协议 sudo apt-get install rsync service sshd restart 启动服务 (rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件) 确保所有的服务器都安装,上面命令执行完毕,各台机器之间可以通过密码验证相互登。
1162 0
设置不输入密码ssh登录
在/etc/hosts文件下加入:   192.168.1.60 u60 #设置u60为主机名 在每个节点上创建RSA秘钥: # ssh-keygen -t rsa # 一直按确定键即可 # touch /root/.
809 0
ssh非交互式密码输入
ssh登陆不能在命令行中指定密码。sshpass的出现,解决了这一问题。sshpass用于非交互SSH的密码验证,一般用在sh脚本中,无须再次输入密码。 它允许你用 -p 参数指定明文密码,然后直接登录远程服务器,它支持密码从命令行、文件、环境变量中读取。
1123 0
两个SSH2间免密码登录
OpenSSH登录SSH2.pdfSSH2免密码登录OpenSSH.pdfSSH2间免密码登录.pdf 以下针对的是ssh2,而不是ssh,也不是OpenSSH。配置分两部分:一是对登录机的配置,二是对被登录机的配置,其中登录机为客户端,被登录机为服务端,也就是解决客户端到服务端的无密码登录问题。
721 0
SSH2免密码登录精简详细说明
以下针对的是ssh2,而不是ssh。精简的意思是无多余步骤,详细是说关键细节都有提到。配置分两部分:一是对登录机的配置,二是对被登录机的配置,其中登录机为客户端,被登录机为服务端,也就是解决客户端到服务端的无密码登录问题。
757 0
SSH无密码验证登录的实现(转摘)
今天开始在集群中配置HADOOP, 三个节点,一个是NAME-NODE, 两个是DATA-NODE。 配置SSH无密码验证登陆时,不太成功。找了网上CASE。 原来是自建.ssh目录时,没有将权限设置为700,而AUTHORIZED_KEYS的权限要设置为600. 按以下文章配置后,一切OK。
985 0
获取cuteftp中的ssh密码
昨天拿到一个管理员的机器,分析他上面的文件时在Application Data目录找到了cuteftp的dat文件,迅速下过来导入到cuteftp里拿密码,上面全是内网ip的ftp连接,内网是一个大的网域,可以通过密码拿到更多的机器。
846 0
5487
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载