为用户登录添加二次验证

为用户登录添加二次验证
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。

相关内容