nui9 发表于 2013-7-3 08:46:58

Centos和Ubuntu下定制普通用户访问权限

centos设置一 需求:   Ssh使普通用户登陆后锁定到特定的目录下二 系统平台:CentOS release 6.3 (Final) x86_64OpenSSH_5.3p1OpenSSL 1.0.0-fips
三 实现过程:   根据sshd_config的man中所述,实现chroot功能需要配置"ChrootDirectory"这个参数。ChrootDirectory:定义了用户通过认证以后的chroot目录,此目录及其所有子目录的属主必须是root,且这些目录只有root帐号可以进行写操作,其他任何组和帐号都不可写。chroot以后,sshd会将用户的工作目录转到chroot目录中用户自己的主目录。如果ChrootDirectory定义的目录下没有相应的/home/username目录,则会直接转到chroot的/目录下准备工作:   1 首先要关闭selinuxsetenforce 0 或者修改vim /etc/selinux/configSELINUX=disabled   2 将用户www锁定在/var/chroot下详细实现过程
1新增用户www(不创建其缺省家目录)   #useradd –M www   #passwd www2修改/etc/ssh/sshd_config文件 #vim /etc/ssh/sshd_config    增加以下内容 Match User www ChrootDirectory /var/chroot #service sshd restart   重启ssh服务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/www#chown –R www.www /var/chroot/home/www#chmod 700 /var/chroot/home/www5拷贝一些简单的命令以下可以使用脚本: # /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
6拷贝一些设置环境变量的文件
系统级别:cp /etc/bashrc /var/chroot/etc/用户级别:cp /home/joyway/.bashrc /var/chroot/home/www/cp /home/joyway/.bash_profile /var/chroot/home/www
解决I have no namevim /etc/bashrc

Ubuntu设置
1首先需要安装libpam-chroot#apt-get install libpam-chroot
2设置限制目录 /chrootmkdir –p /chroot/{bin,etc,home,lib,usr}mkdir /chroot/home/wwwchown –R www.www /chroot/home/www挂载一些系统设备mount -o bind -t proc /proc /chroot/procmount -o bind -t udev /dev /chroot/devmount -o bind -t devpts /dev/pts /chroot/dev/pts
3 系统账户 tail -1 /etc/passwd > /chroot/etc/passwd tail -1 /etc/group > /chroot/etc/group4修改/etc/pam.d/sshd加一句
session required pam_chroot.so修改/etc/security/chroot.conf 加一句www /chroot
5拷贝修要的命令的脚本
# /bin/bash # 要允许执行的文件列表 #cmdlist="/bin/ls /bin/bash /bin/cp /bin/mkdir /usr/bin/find /bin/grep /bin/mv /bin/rm /usr/bin/vi /usr/bin/vim /bin/more /bin/cat / usr/bin/tail" while read cmdlist do # chroot路径 chroot_path="/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/ && cp -f $j $chroot_path/lib/ && echo "$j done" done for k in $lib_2 do   LIBFILE=`basename $k`   echo $LIBFILE   LIBPATH=`echo $k|sed "s@\(.*\)/$LIBFILE@\1@g"`   echo $LIBPATH   [ -d $chroot_path/$LIBPATH ] || mkdir -p $chroot_path/$LIBPATH &>/dev/null   [ $? -eq 0 ] && cp -f $k $chroot_path/$LIBPATH/ && echo "$k done" done done <bin.txt
6拷贝一些环境变量系统级别cp /etc/bash.bashrc /chroot/etc/cp /etc/bash_commpletion /chroot/etc/cp /etc/environment /chroot/etc/cp /etc/hostname /chroot/etc/mkdir /chroot/etc/securitycp /etc/security/pam_env.conf/chroot/etc/security/用户级别:cp /home/joyway/.bashrc /chroot/home/www/cp /home/joyway/.profile /chroot/home/www/
ps:一些报错信息可以在 /var/log/auth.log 看到报错信息 以此来添加需要的文件
问题: 1 在新建www用户时指定其shell为/bin/bash 默认/bin/sh 否则会有很多问题 2 登陆后提示I have no name   可以修改家目录下的.bashrc里对PS1参数的定义调整对\u 修改成$USER 3 tab补全功能会有问题提示需要安装python的组件及awk命令awk就是拷贝命令及lib文件python相对麻烦 需要拷贝lib文件 include文件cp /usr/lib/python2.7 /chroot/usr/lib/mkdir /chroot/usr/include/cp /usr/include/python2.7 /chroot/usr/include

'''新加用户的时候注意将/etc/passwd和/etc/group对应用户信息添加到/chroot/etc/passwd和/chroot/etc/group下'''否者会报错


xy123321 发表于 2013-7-3 12:04:47

只要不下流,我们就是主流!

gfdxy3322 发表于 2013-7-3 16:36:43

小手一抖,钱钱到手!

张颢镡 发表于 2013-7-3 17:42:53

精典之极就是精斑!!!

cmkzjw 发表于 2013-7-3 18:39:13

有竞争才有进步嘛

nikoo 发表于 2013-7-3 19:00:21

不在放荡中变坏,就在沉默中变态!

zjxhx 发表于 2013-7-4 02:13:24

昨天,系花对我笑了一下,乐得我晚上直数羊,一只羊,两只羊,三只羊……
页: [1]
查看完整版本: Centos和Ubuntu下定制普通用户访问权限