![为用户登录添加二次验证](https://linux22.com/image/7593/%E4%B8%BA%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E6%B7%BB%E5%8A%A0%E4%BA%8C%E6%AC%A1%E9%AA%8C%E8%AF%81.png)
trap '' 2
code=`oathtool --base32 --totp "xxxxxxxxxxxx"`
echo -n Enter Code:
read -s password
echo ""
if [ "$password" == "$code" ]; then
echo "You are allowed in"
else
exit
fi
trap 2
将此代码放在我添加两因素身份验证的另一种方法的顶部吗.profile
?或者可以绕过吗?
我知道你可以做类似的事情这添加两因素身份验证,但我希望能够自定义它。
答案1
不!
基本问题是.profile
只有在您成功登录后才能读取!此时,完整的 shell 已经在运行,并且大多数 shell 都是为用户服务的,不是阻止他们为所欲为。
让我们看一下例子:
# echo -en "echo byebye; exit" > ~foo/.profile
# ssh foo@localhost
foo@localhost's password:
[...]
byebye
Connection to localhost closed.
但我仍然可以告诉 shell 做一些完全不同的事情。 (就像运行另一个 shell 一样。)
# ssh foo@localhost -t "/bin/sh"
foo@localhost's password:
$ id
uid=1001(foo) gid=1001(foo) groups=1001(foo)
你可以将用户的 shell 更改为更受限制的程序,该程序旨在请求 OTP,然后启动 shell。但这将使执行任何需要运行另一个 shell 的操作变得困难。此外,在用户域内完成的任何操作很可能会被用户更改回来,而这通常不是人们希望通过身份验证实现的。
请在它所属的地方进行身份验证,在大多数 Linux 中是 PAM。