我正在为SA执行某个任务时build立一个脚本。 该任务需要将用户添加到只能通过SSH连接到系统的系统(使用密钥),而不是使用密码login。 我想要做的是让SA执行带有相应标志的adduser命令,一次性创build用户。
我不想做adduser …然后usermod -L,用户名。 (完全locking用户),或将shell设置为/ sbin / nologin(它与usermod -L的function相同)。
我不希望SA手动编辑/ etc / passwd。
我正在寻找一个命令行解决scheme。 我知道我可以编写一个脚本,但是这需要SA下载脚本并运行它,这是我的最后手段。
关于单线解决scheme,没有一个。 像这样的复杂逻辑需要操作PAM堆栈。 也就是说,我认为这个PAM规则不会太复杂,所以这取决于你是否有一个configurationpipe理策略来为你pipe理这个PAMconfiguration,而不是把它放在SE上。 如果你这样做,这可能不会太痛苦。
这是一个经常被忽视的事实,但基于密钥的SSHauthentication绕过了PAM的auth堆栈。 如果您有一种方法来识别只应通过SSH密钥login的用户,则可以在auth堆栈中安装一个挂钩,以便在出现该特征时validation尝试失败。 我build议为此创build一个组,因为它比硬编码用户名到PAMconfiguration更好。
把所有这一切放在一起,并假设65536是所讨论群体的gid:
groupadd -g 65536 sshonly auth堆栈的顶部: auth required pam_succeed_if.so gid ne 65536 useradd -u $SOMEUID -g $SOMEGID somename usermod -a -G sshonly somename 事实上,安德鲁的回应并不完全正确。 虽然创build不同的组和修改身份validation栈都是很好的build议,但步骤3和步骤4实际上可以制作成一行。 以安德鲁的例子为基础,下面是一行(稍微接近完成):
useradd -u $SOMEUID -g $SOMEGID -G sshonly -s $SHELL -c comment -d $HOMEDIR somename
可以根据您的环境需要添加其他标志。 希望这可以帮助!