CentOS 新建用户,并屏蔽/禁止 root 用户远程登录

为安全起见,防止服务器被暴力破解,我们可以自定义 root 用户远程登录。

当然在此之前,我们要新建一个用户,并设置其密码以备远程登录,然后通过 su 命令切换至 root 用户权限。

1. 新建用户 zhishi ,设置用户密码,分别执行:

adduser zhizhi
passwd zhizhi

并在接下来的密码、确认密码请求中设置密码。

2. 现在应该可以使用新用户/密码登录了,成功进入之后,输入 su 命令,回车输入 root 密码即可切换到 root 权限。

3. 屏蔽/禁止 root 用户远程登录
打开文件

vi /etc/ssh/sshd_config

输入/PermitRootLoginyes 即可找到 PermitRootLoginyes
如果此行前面有 # ,去掉 #
yes 修改为 no,即:

PermitRootLogin no

4. 然后重启 sshd 服务即可:

service sshd restart

或者 CentOs 7

systemctl restart sshd

更多关于用户、用户组的操作,请参考 centos系统添加/删除用户和用户组的例子

CentOS 服务器修改或增加 SSH 端口

默认 SSH 默认端口为 22,所有服务器都一样,所以比较容易被别人扫描,尝试暴力破解登录。比较简单的办法,就是修改默认端口了。

修改 SSH 端口的方法本来挺简单的,网上也是一搜一把。

下面以修改为 10086 端口为例

1. 修改 /etc/ssh/sshd_config 文件,找到 Port 22 ,在其下方,增加 Port 10086

vi /etc/ssh/sshd_config

注意,这里是增加,而不是修改,主要是为了防止改了之后,新端口不能正确登录的麻烦。所以先新增,然后测试新端口能正确登录了,再将 Port 22 行注释掉即可。

2. 重启 sshd 服务

systemctl restart sshd

一般到这里也就可以试试新端口是否正确工作了。

但是阿里云服务器 ECS 有个安全组策略,需要手动设置其开放 10086 端口的访问:

3. 进入云服务器实例管理界面,左侧菜单“本实例安全组” > 配置规则,找到自定义 TCP (22/22)规则条目,> 克隆,修改协议类型为 “自定义 TCP”,端口范围设置为 10086/10086 ,提交保存即可。

如果经过上面步骤,新端口 SSH 依然连接超时,那么可能需要检查服务器防火墙设置,以及 SELinux 之类配置。

一般阿里云服务器,因为有上述安全组策略的存在,应该是默认没有开启防火墙的。因此前不知道阿里的安全组策略,我把下面几步都做了:

关于 SELinux 和 防火墙的相关配置和描述,请参考 皓煙:CentOS7增加或修改SSH端口号
对于使用 iptables 的服务器,请参考 centos7 修改ssh端口!

在新端口连接测试通过之后,注意参考上述第 1 步注释掉原来的 22 端口配置,当然,也可以参考上述第 3 步,删除阿里 ECS 安全组策略里边的 自定义 ICP (22/22)规则条目。

因为 ECS 的安全组策略我是在走完 SELinux 和 防火墙,甚至包括 iptabls 等流程之后,依然连接超时,之后才知道的。现在我也在想:既然有了凌驾于服务器防火墙配置之上的 安全组策略存在了,那么防火墙、SELinux 之类的是不是也可以禁用了呢?

Js 获取图片原始宽高

在涉及到图片显示、处理的时候,前端常会需要获取图片真实宽高,如下即可。

function getImageSizeOf(src, thenFn){
  var _img = document.createElement('img'); 
  _img.addEventListener('load', function(){
    console.log(this.width, this.height)
    typeof thenFn === 'function' && thenFn(this.width, this.height)
  });
  _img.src = src;
}

当然,上述代码只是一个简单实现,说明具体思路而已,可能会有不兼容部分浏览器的问题,如果你使用 jQuery ,也可以直接使用下面这个基于 jQuery ,兼容性更好的版本:

function getImageSizeOf(src, thenFn){
  $("<img>").attr("src", src).load(function(){
    console.log(this.width, this.height)
    typeof thenFn === 'function' && thenFn(this.width, this.height)
  });
}