Approaches to Disable SSH

一、禁止用户登录

1、修改用户配置文件/etc/shadow
将第二栏设置为“*”,如下。那么该用户就无法登录。但是使用这种方式会导致该用户的密码丢失,也就是当你再次允许他登录的时候,你还得让他重新设置密码。(再次启用这个帐号的方法是把“*”去掉就可以了)
如:tom:*:14245:0:99999:7:::

为了使原密码不丢失,可以在原密码前面加一个特殊字符,比如”!”。需要再次启用这个用户的方法是删除此感叹号”!”。

2、使用命令usermod
这个方式简单又实用,而且没有(1)中的副作用。

1
2
usermod -L tom##Lock 帐号tom
usermod -U tom##Unlock 帐号tom

3、通过修改shell类型
这种方式会更加人性化一点,因为你不仅可以禁止用户登录,还可以告诉他你这么做的原因。如下:

1
2
3
4
5
6
7
8
chsh tom-s /sbin/nologin #将用户tom的shell进行更改

###############
##修改/etc/nologin.txt(没有就新建一个),
##在里面添加给被禁止用户的提示
###############

#解禁用户的方式就是把shell改为他原有的就可以了。

4、禁止所有的用户登录
当你(如果你是系统管理员)不想让所有用户登录时(比如你要维护系统升级什么的),如果按上面的方式,一个一个地去禁止用户登录,这将是很……无聊的事。而且还容易出错。下面有一种简洁有效的方式:

1
2
3
4
5
6
7
8
##在/etc目录下建立一个nologin文档
touch /etc/nologin ##如果该文件存在,那么Linux上的所有用户(除了root以外)都无法登录
##在/etc/nologin(注意:这可不是(3)中的nologin.txt啊!)写点什么,告诉用户为何无法登录
#################
cat /etc/nologin
9:00-10:00 系统升级,所有用户都禁止登录!

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

5、修改用户配置文件/etc/ssh/sshd_config
(1)只允许指定用户进行登录(白名单):

1
2
3
在/etc/ssh/sshd_config配置文件中设置AllowUsers选项,(配置完成需要重启 SSHD 服务)格式如下:
AllowUsers aliyun test@192.168.1.1
# 允许 aliyun 和从 192.168.1.1 登录的 test 帐户通过 SSH 登录系统。

(2)只拒绝指定用户进行登录(黑名单):

1
2
3
在/etc/ssh/sshd_config配置文件中设置DenyUsers选项,(配置完成需要重启SSHD服务)格式如下:   
DenyUsers zhangsan aliyun #Linux系统账户
# 拒绝 zhangsan、aliyun 帐户通过 SSH 登录系统

(3)禁止root通过ssh远程登录

1
2
3
vi /etc/ssh/sshd_config
找到PermitRootLogin,将后面的yes改为no,把前面的注释#取消,这样root就不能远程登录了!
可以用普通账号登录进去,要用到root的时候使用命令su root切换到root账户

重启SSH

1
service sshd restart

二、限制IP登录
除了可以禁止某个用户登录,我们还可以针对固定的IP进行禁止登录,linux 服务器通过设置/etc/hosts.allow和/etc/hosts.deny这个两个文件,hosts.allow许可大于hosts.deny可以限制或者允许某个或者某段IP地址远程 SSH 登录服务器,方法比较简单,且设置后立即生效,不需要重启SSHD服务,具体如下:

1
2
3
4
5
6
7
8
9
/etc/hosts.allow 添加:
sshd:192.168.0.1:allow #允许 192.168.0.1 这个IP地址SSH登录
sshd:192.168.0.:allow #允许192.168.0.1/24这段IP地址的用户登录,多个网段可以以逗号隔开,比如192.168.0.,192.168.1.:allow

/etc/hosts.allow添加
sshd:ALL #允许全部的ssh登录

/etc/hosts.deny添加
sshd:ALL #拒绝全部IP