今天有朋友问怎么限制用户能执行的命令来做跳板机,看了下有好几种,这里记录下
- 将/etc/passwd相应用户的最后一列换成自己的一个脚本,脚本里面限制用户只能输入IP,然后脚本去自动ssh
可以useradd -s xxx username的方式来修改,不过我一般喜欢直接vim
脚本可以参考1
2
3
4
5
6
7
8
9
10
11
12while [1];do
echo -n "Input User@IP: "
read input
case "$input" in
q|quit|QUIT|Q)
exit
;;
*)
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$input"
;;
esac
done
- 在用户的home目录建一个.bash_profile ,其中export PATH 到一个特定的目录,特定的目录中只有个ssh命令的软链接. 然后同样的/etc/passwd 中 /bin/bash 改成/bin/rbash 来限制用户使用bash的本身某些命令
这样的好处是用户可以登陆机器自己ssh命令,有history功能,能记录,能上下箭头选择
有个自动化的脚本免去以上操作,原理一样1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28vim /etc/profile.d/login.sh
m=`whoami`
if [[ "${m}" != "root" ]];then
echo -e "\e[01;33m* ** 你目前登录的账户是: \e[01;31m$LOGNAME\e[00m ** \e[00m"
echo -e "\e[01;33m* ** 可以登入你申请的主机\e[00m"
mkdir -p $HOME/bin
rm -f $HOME/bin/*
ln -s /bin/ls $HOME/bin
ln -s /bin/ping $HOME/bin
ln -s /usr/bin/ssh $HOME/bin/
ln -s /usr/bin/ssh-copy-id $HOME/bin/
ln -s /usr/bin/ssh-keygen $HOME/bin/
ln -s /usr/bin/expect $HOME/bin/
ln -s /bin/grep $HOME/bin/
cat << EOF > $HOME/.newbash_profile
HISTFILESIZE=500000000
HISTSIZE=99999999
HISTTIMEFORMAT="%Y/%m/%d_%H:%M:%S :"
PATH=$HOME/bin
export TMOUT=600 #无操作kick的时间
export PATH
EOF
chown ${m}:${m} $HOME/.newbash_profile
exec bash --restricted --noprofile --rcfile $HOME/.newbash_profile
fi
另外推荐一个可以用来做为用户登入程序的repo https://github.com/ghantoos/lshell ,支持各种限制,具体看文档
以上参考以下网址,挑选了下我觉得方便简单的方案
http://kuanghy.github.io/2017/02/20/rbash
https://linux.cn/article-8313-1.html
https://sukbeta.github.io/2018/08/20/linux-%E9%99%90%E5%88%B6%E7%94%A8%E6%88%B7%E5%91%BD%E4%BB%A4%E6%96%B9%E6%B3%95/