阻止没有“-”的 su

阻止没有“-”的 su

我想阻止所有su没有登录选项的人运行。

他们可以跑su - <user>,,su -l <user>su --login <user>su <user>会被阻挡。

如何实现这一点?

答案1

您可以编写一个脚本来检查 CLI 参数并将其传递给su。如果未指定--l--login选项,它将向用户打印警告以使用这些选项。

*** 请注意,这不会“阻止”他们使用,su因为他们可以直接调用二进制文件。

示例su.sh脚本:

#!/bin/bash

### script to prompt at su
### counter variable
CNT=0
### evaluate all the CLI arguments passed to "su" and check if the login is specified (also let `-V` version argument work)
for arg in $@

do
        if [[ $arg == - || $arg == -l || $arg == --login || $1 == -V ]]; then
### increment counter if login argument is found
                CNT=$((CNT+1))
        fi
done
### check if login argument is given
if [[ $CNT -ge 1 ]]; then
    /usr/bin/su $@
else
    echo -e '*** Please use "-", "-l" or "--login" with the "su" command ***'
    exit 2
fi

在用户.bashrc文件中为该脚本创建一个别名,例如 alias su=/usr/bin/su.sh。这样,每次调用 date 时,该脚本都会运行,它会让您知道您发出了 set date 命令标志并要求确认。

您也可以避免使用别名,只需替换命令即可su,如下所示,但也请将su脚本中的二进制文件的名称从更改/usr/bin/su/usr/bin/su_cmd

mv /usr/bin/su /usr/bin/su_cmd 
mv /usr/bin/su.sh /usr/bin/su

相关内容