NingG +

Linux下禁止用户远程登录

背景

有些用户不安份,能不能禁止用户登录(锁定用户)?

分析

说实话,这个问题很小,不过思路不能丢,要禁止用户登录,涉及几个问题:

吹个牛,上面的几个点,就跟实际做事情的要点是一样的,即:

锁定用户和解锁用户

通过命令usermod即可完成对用户的锁定和解锁:

// Lock a user´s password. This puts a ´!´ in front of the
// encrypted password, effectively disabling the password. 
[root@ningg ~]# usermod -L ningg

// Unlock a user´s password. This removes the ´!´ in front 
// of the encrypted password. 
[root@ningg ~]# usermod -U ningg

也可以设定用户的自动解锁时间,具体参考man usermod。需要说明一点,通过usermod -L [login]锁定用户[login],则,当用户尝试登录时,会提示:”incorrect password”;而root用户,则可以通过su - ningg直接转换为用户ningg的身份。

备注:命令passwd也可以进行用户的锁定和解锁:passwd -l [login]passwd -u [login]两个命令。

查看是否锁定用户

查看/etc/shadow文件,以:分割的第二行,如果以!或者*开头,则表示当前用户无法远程登录,只能通过root用户以su命令切换身份而来,具体,看下面的示例:

[root@ningg ~]# vim /etc/shadow
root:$6$t(省略...):16407:0:99999:7:::
bin:*:15628:0:99999:7:::
daemon:*:15628:0:99999:7:::
ftp:*:15628:0:99999:7:::
nobody:*:15628:0:99999:7:::
ningg:$6$t(省略...):16374:0:99999:7:::
flume:!!:16380::::::

疑问:以!*开头,有没有差异?

修改shell类型

通过修改用户登录之后的shell类型实现禁止用户登录,具体命令如下:

// chsh - change your login shell
chsh -s /sbin/nologin ningg

用户登录,提示信息:This account is currently not available.

特殊的shell:/sbin/nologin

/sbin/nologin本质是用户的login shell,不过这个nologin shell有些特殊,需要说一说。/sbin/nologin使用户无法登录,本质是:用户无法使用bash或其他shell来登入系统,这个账户仍然可以使用其他系统资源,例如:www服务由帐号apache管理,其可以进行系统程序的工作,但是无法登入主机;

疑问

当用户的login shell被设置为/sbin/nologin时,用户登录时,会被拒绝,并且提示信息:This account is currently not available;这个提示信息是可以定制的,具体定制方法:新建/etc/nologin.txt,并在其中写入提示信息即可。

禁止所有用户登录

如果因为系统维护升级等原因,希望禁止所有用户登录,则按照上面的方式,一个一个禁用用户,很无聊,而且容易出错,一种下面是简便的解决方法:

##在/etc目录下建立一个nologin文档
touch /etc/nologin ##如果该文件存在,那么Linux上的所有用户(除了root以外)都无法登录
##在/etc/nologin(注意:这可不是3中的nologin.txt啊!)写点什么,告诉用户为何无法登录

##cat /etc/nologin
9:00-10:00 系统升级,所有用户都禁止登录!

解禁帐号也简单,直接将/etc/nologin删除就行了!

比较两种方式

整理上面两种禁止用户登录的方式,其出发思路不同:

重要遗留问题:当设置为/sbin/nologin时,这一用户如何才能调用其他系统资源?

参考来源

Top