分类: 系统运维
2017-12-23 17:50:35
运维都碰到过这种需求:生产环境上的服务日志,开发人员需要有查看权限,当没有日志系统的时候。如果随便分配一个普通用户,但是普通用户只要可以登录,权限就已经很大了。开发人员一般都没有好的服务器意识,为了保险起见,苛刻的权限分配很有必要。
现有需求:开发人员只能在生成环境指定目录,执行有限的命令,如:ls,pwd,cat,grep,less等查看命令。
经过一番折腾,整理如下思路:在跳板机上创建普通用户如:test,配置跳板机test用户,公钥+密码登录生产环境test账号(当然你也可以配置成免密码登录),指定生产环境test用户的shell为rbash(即限制版bash),并将test用户的环境变量初始为/home/test/bin,将允许执行的命令软链接到/home/test/bin,这样,rbash下通过bash命令就改不了shell了。在test的.bashrc中加入内容:定义PATH变量;cd /your/path 。
跳板机:192.168.0.1
生产环境:192.168.0.2
创建跳板机用户test
useradd -m test
su test
ssh-keygen -t rsa
设置密码:123456
创建生产环境用户test
useradd -m test
mkdir /homt/test/.ssh
chmod 700 /home/test/.ssh
将跳板机/home/test/.ssh/id_rsa.pub文件的内容追加到生产环境/home/test/.ssh/authorized_keys文件中,没有这个文件,则自己创建。
chmod 600 /home/test/.ssh/authorized_keys
这里有个问题让我查了比较久,就是公钥都配好了,权限也都没问题,但是跳板机登录的时候一直是:Permission denied (publickey),后来百度后发现,客户端ssh -vvv user@ip 可以打印登录过程,同时服务器端在/var/log/secure 中可以查看登录错误日志。最后发现是secure中错误“User test from 192.168.0.1 not allowed because not listed in AllowUsers”,原来是ssh限制了
登录用户。
在/etc/ssh/sshd_config中配置指定用户指定IP登录,加入以下行:
AllowUsers root test@127.0.0.1 #不同用户间以空格分开
查看/etc/hosts.allow和/etc/hosts.deny中是否有登录IP限制
mkdir /home/test/bin/
cd /home/test/bin
ln -sf /bin/ls ls
ln -sf /bin/cat cat
ln -sf /bin/grep grep
ln -sf /usr/bin/tail tail
耍了一个小聪明,做了一个小界面。
vi /home/test/.bashrc
点击(此处)折叠或打开
界面是这样的:(是的,很丑)
将test的shell改成rbash:
ln -sf /bin/bash /bin/rbash
echo "/bin/bash" >>/etc/shells
chsh -s /bin/rbash test
大功告成,跳板机test登录生成环境后会线上以上菜单,选择目录后,进入相应目录,权限很有效,不能cd,不能以 "/" 开头,以绝对路径执行命令,改不了bash。基本只有查看当前目录和某些目录文件的内容。