首页 > 代码库 > SSH用户限制在固定的目录下面

SSH用户限制在固定的目录下面

centos设置

一 需求:

   Ssh使普通用户登陆后锁定到特定的目录下

二 系统平台:

CentOS release 6.3 (Final) x86_64

OpenSSH_5.3p1

OpenSSL 1.0.0-fips

 

三 实现过程:

   根据sshd_config的man中所述,实现chroot功能需要配置"ChrootDirectory"这个参数。

ChrootDirectory:定义了用户通过认证以后的chroot目录,此目录及其所有子目录的属主必须是root,且这些目录只有root帐号可以进行写操作,其他任何组和帐号都不可写。chroot以后,sshd会将用户的工作目录转到chroot目录中用户自己的主目录。如果ChrootDirectory定义的目录下没有相应的/home/username目录,则会直接转到chroot的/目录下

准备工作:

   1 首先要关闭selinux  setenforce 0 或者修改vim /etc/selinux/config  SELINUX=disabled

   2 将用户www锁定在/var/chroot下

详细实现过程

 1新增用户web_test(不创建其缺省家目录)

  #useradd –M web_test   #passwd  web_test

  

2修改/etc/ssh/sshd_config文件

 #vim /etc/ssh/sshd_config    增加以下内容 Match User web_test ChrootDirectory /var/chroot

  

3搭建基本的chroot环境

  小贴士:一个最基本的chroot环境至少有一个shell(例如sh,bash)和一些必要的系统设备文件(例如/dev/null,/dev/zero),如果要允许用户执行一些命令,那么还要准备相应的命令可执行文件和命令依赖的库文件。

  #mkdir /var/chroot

  #cd /var/chroot

  #mkdir {bin,dev,lib64,etc,home}

  # mknod dev/null c 1 3

  #mknod dev/zero c 1 5

  #可选,这两个文件ssh命令需要,如缺少会报告:PRNG is not seeded

  #mknod dev/random c 1 8

  #mknod dev/urandom c 1 9

  #可选,ssh命令需要,如缺少会报告:Host key verification failed

  #mknod dev/tty c 5 0

  #修改/var/chroot及其子目录的属主,并修改权限

  #chown –R root.root /var/chroot

  # chmod –R 755 /var/chroot

  #允许用户写这些设备文件,不可写会有些命令报错

  # chmod 0666 dev/{null,zero,tty}

  复制/etc/passwd和/etc/group文件到/var/chroot/etc中,并删除用户自己和root以外的所有帐号。如果没有这两个文件,用登录以后会报“I have no name!”

  #cp –p /etc/passwd  /var/chroot/etc/

  #cp -p /etc/group  /var/chroot/etc/

 

4建立chroot目录中用户主目录

  #mkdir /var/chroot/home/web_test

  #chown –R www.www /var/chroot/home/web_test

  #chmod 700 /var/chroot/home/web_test

5拷贝一些简单的命令以下可以使用脚本:

 # /bin/bash

 # 要允许执行的文件列表

 cmdlist="/bin/bash /bin/ls /bin/cp /bin/mkdir /bin/mv /bin/rm /bin/rmdir"

 # chroot路径

 chroot_path="/var/chroot"

 # 判断依赖的库文件

 lib_1=`ldd $cmdlist | awk ‘{ print $1 }‘ | grep "/lib" | sort | uniq`

 lib_2=`ldd $cmdlist | awk ‘{ print $3 }‘ | grep "/lib" | sort | uniq`

 # 复制命令文件

 for i in $cmdlist

 do

   cp -a $i $chroot_path/bin/ && echo "$i done"

 done

 # 复制依赖的库文件(因为是i386,所以是lib,如果是x86_64,则是lib64,)

 for j in $lib_1

 do

   cp -f $j $chroot_path/lib64/ && echo "$j done"

 done

 for k in $lib_2

 do

   cp -f $k $chroot_path/lib64/ && echo "$k done"

 done

 (这一些我是直接所把整个目录/lib ,放到/var/chroot/lib/目录下面,这样的坏处是,只要有人把相关的命令传到/var/chroot/bin目录下面就可以执行了。)

6拷贝一些设置环境变量的文件

 

系统级别:

cp /etc/bashrc /var/chroot/etc/

用户级别:

cp /home/joyway/.bashrc /var/chroot/home/web_test/

cp /home/joyway/.bash_profile /var/chroot/home/web_test

 

解决I have no name

vim /etc/bashrc

 #service sshd restart     重启ssh服务