设为首页 收藏本站
查看: 817|回复: 0

[经验分享] Centos和Ubuntu下定制普通用户访问权限

[复制链接]

尚未签到

发表于 2018-5-5 07:15:01 | 显示全部楼层 |阅读模式
  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新增用户www(不创建其缺省家目录)
  #useradd –M www
  #passwd www
  2修改/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/www
  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
  

  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 name
  vim /etc/bashrc
DSC0000.jpg

  

  

  Ubuntu设置
  

  1首先需要安装libpam-chroot
  #apt-get install libpam-chroot
  

  2设置限制目录 /chroot
  mkdir –p /chroot/{bin,etc,home,lib,usr}
  mkdir /chroot/home/www
  chown –R www.www /chroot/home/www
  挂载一些系统设备
  mount -o bind -t proc /proc /chroot/proc
  mount -o bind -t udev /dev /chroot/dev
  mount -o bind -t devpts /dev/pts /chroot/dev/pts
  

  3 系统账户
  tail -1 /etc/passwd > /chroot/etc/passwd
  tail -1 /etc/group > /chroot/etc/group
  4修改/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/security
  cp /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
DSC0001.jpg

  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下'''
  否者会报错
  

DSC0002.jpg

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-455944-1-1.html 上篇帖子: ubuntu 常用软件的安装 下篇帖子: Linux Ubuntu SNMP配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表