linux – / sbin / nologin和/ bin / false有什么区别?

我经常听到它建议通过将其 shell设置为/ bin / false来禁用用户帐户.但是,在我现有的 Linux系统上,我发现大量现有帐户(所有这些服务帐户)都有/ sbin / nologin的shell.

我在手册页中看到/ sbin / nologin向用户输出一条消息,说该帐户已被禁用,然后退出.据推测/ bin / false不会打印任何内容.

我还看到/ sbin / nologin列在/ etc / shells中,而/ bin / false则不是.

该手册页说FTP将禁用具有未在/ etc / shells中列出的shell的用户访问,并暗示其他程序可能会这样做.这是否意味着某人可以使用/ sbin / nologin作为其shell的帐户进行FTP?

这有什么区别?我应该使用哪一个来禁用用户帐户,以及在什么情况下? / etc / shells中的列表还有哪些其他影响?

解决方法

/ bin / false是一个实用程序,是/ bin / true的伴侣,它在一些抽象意义上很有用,可以确保unix是功能完整的.但是,已经找到了这些计划的紧急目的;考虑BASH语句/ some / program || / bin / true,无论/ some / program返回,它总是boolean-evaluate为true($?= 0).

正如您所识别的那样,紧急使用/ bin / false对于不允许登录用户来说是一个空shell.在这种情况下,系统的行为就像shell无法运行一样.

POSIX(虽然我可能错了,它可能是SUS)约束这两个命令除了返回适当的布尔值之外什么也不做.

/ sbin / nologin是一个BSD实用程序,它具有与/ bin / false类似的行为(返回布尔值false),但也打印输出,因为/ bin / false被禁止执行.这应该有助于用户理解发生了什么,但实际上许多终端模拟器只是在shell终止时关闭,在某些情况下使消息无论如何都是不可读的.

在/ etc / shells中列出/ sbin / nologin的目的不大. / etc / shells的标准效果是列出当用户更改自己的shell时允许与chsh一起使用的程序(并且没有可靠的理由将自己的shell更改为/ sbin / nologin).超级用户可以将任何人的shell改为任何东西.但是,您可能希望在/ etc / rsh中列出/ sbin / nologin和/ bin / false,这将禁止具有这些shell的用户在他们获得shell的不幸事件中使用chsh更改其shell.

FTP守护程序可能禁止访问不在/ etc / shells中的shell的用户,或者他们可能使用他们希望的任何其他逻辑.在任何情况下都应避免运行FTP,因为sftp(提供类似功能)类似但安全.有些站点使用/ sbin / nologin来禁用shell访问,同时允许sftp访问,方法是将它放在/ etc / shells中.如果允许用户创建cronjobs,这可能会打开后门.

在任何一种情况下,scp都不会与无效的shell一起运行.在这种情况下,scponly可以用作shell.

另外,shell的选择会影响su – (AKA su -l)的运行.特别是,如果它是shell,/ sbin / nologin的输出将打印到stdout;这不是/ bin / false的情况.无论哪种情况,使用su -cl运行的命令都将失败.

最后,答案是:

要禁用某个帐户,请同时依赖它们,但将shell设置为/ sbin / nologin是为了提供信息(除非/ sbin / nologin在/ etc / shells中,此时你应该使用/ bin / false,这应该是’是).相反,将/ etc / passwd中的密码字段设置为!,crypt保证对无密码有效.考虑以相同的方式在/ etc / shadow中设置哈希以避免错误. passwd -l会为你做这个.

禁用帐户的第三种方法是将帐户到期日期字段设置为古老的日期(例如,usermod –expiredate 1).这将阻止登录,以防您的设置允许用户在没有密码的情况下对其unix帐户进行身份验证,并且他们使用的服务不需要shell.

相关文章

Linux中的ARP防火墙主要用于防御ARP欺骗攻击,其效果取决于多...
insmod和modprobe加-f参数导致Invalid module format错误 这...
将ArchLinux安装到U盘 几个月前入门Arch的时候上网搜了不少安...
1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...