2015年(68)
分类: 系统运维
2015-08-31 18:49:55
linux是个多用户系统,允许多个用户登录,但有时我们会遇到需要暂时禁止所有用户登录到系统的情况,比如应用升级、进行重要的系统维护等,下面的方法就是在这种情况下用的。
1. touch /etc/nologin
[root@localhost ~]#touch /etc/nologin
只要在/etc/目录下新建的一个nologin文件,就会禁止除root外的所有用户登录到系统,不管是从ssh、telnet还是终端登录一概禁止,需注意的是对已经登录到系统的用户无效。另外,如果是用ssh远程连到服务器并且配置了ssh禁止root远程登录,使用这个方法就要很小心了。
要显得更人性化一点,可以在nologin文件输入一些信息用于提示被禁止登录用户的用户,如:
[root@localhost ~]# cat /etc/nologin
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
System upgrade.
Please try back later after a few minutes. Thank you
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[root@localhost ~]# ssh appvirt@192.168.22.238 //使用普通用户登录测试
appvirt@192.168.22.238's password:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
System upgrade.
Please try back later after a few minutes. Thank you
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Connection closed by 192.168.22.238
简单说一下这个功能linux是如何实现的:linux用户登录系统时都会用到login,login是用pam模块来对用户进行验证的,而login如何调用pam模块可以从login的配置文件/etc/pam.d/login得知
[root@localhost ~]# cat /etc/pam.d/login
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth include system-auth
account required pam_nologin.so //主要就是这行
------- 略 ------
pam_nologin.so :当 /etc/nologin 这个文件存在时,pam_nologin.so这个模块会限制非root用户登陆到系统,如果 /etc/nologin 存在内容,当非root用户登陆时会将该文件的内容显示出来,详细内容可以man pam_nologin。
取消限制需将/etc/nologin文件删除就可以了
2. tcpwrap
采用tcpwrap方式禁止用户登录到系统的方法
[root@localhost ~]# mv /etc/hosts.{allow,allow.bak};mv /etc/hosts.{deny,deny.bak}
[root@localhost ~]# echo "ALL:ALL" > /etc/hosts.deny
要小心了,如果按上面的方法设置后,包括root在内的所有用户都会禁止从远程登录,但对从本地终端登录无影响,所以这个方法只适合在机器面前操作的时候使用。想避免这种情况,可以在hosts.deny加个一个例外来只允许某一台机器通过远程连到此服务器。
[root@localhost ~]# echo "ALL:ALL EXCEPT 192.168.22.240" > /etc/hosts.deny
如上设置后,除了机器192.168.22.240外,从外面来的任何远程连接都会被拒绝。