简单限制用户可执行命令来做堡垒机的方案

今天有朋友问怎么限制用户能执行的命令来做跳板机,看了下有好几种,这里记录下

  1. 将/etc/passwd相应用户的最后一列换成自己的一个脚本,脚本里面限制用户只能输入IP,然后脚本去自动ssh
    可以useradd -s xxx username的方式来修改,不过我一般喜欢直接vim
    脚本可以参考
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while [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
  1. 在用户的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
    28
        vim /etc/profile.d/login.sh

    #!/bin/bash
    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/