我想阻止所有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