分类目录归档:后端

使用SSH密钥,更安全快速的免密登陆到Linux服务器

为什么用密钥替代传统的密码

因为密码虽然可以设置复杂一些,但终究还是不方便管理,需要管理员手动输入一遍又一遍。还有密码的安全性也是一个令人担忧的地方,如果要在公网暴露公网IP,我不太敢让服务器提供密码鉴权服务(虽然也有failban,但是依旧不信任),毕竟有那么多攻击四处寻找目标,一切要以安全为核心

如果使用密钥,上面的担忧都可以消除了!因为密钥首先加密长度不短,需要暴力破解没个几年日夜不停的话,被攻击成功的可能性还是比较小的。其次,密钥在手,可以免密登陆,在经常登陆的场景下非常方便,甚至一个私钥我可以登陆所有服务器,而不需要任何密码输入,可以说非常方便

密钥创建

如果是windows,请先安装git-bash,它会给你许多Linux下的工具(不是所有)。如果是Linux,不需要做任何操作,一般都有必备的软件工具

在自己的主目录下创建.ssh主目录(win是C:\users\${user},Linux是~):

ssh-keygen -b 4048

第一次询问文件名称,如果没有即回车,有的话将会输出到当前文件夹下。后面的询问都直接回车即可

正常情况下,应该是生成了test.pub和test这两个文件(我拿test作为示例),test.pub是公钥,是传送给目标Linux服务器的,test是私钥,是用来后续登陆使用的

拷贝公钥到目标服务器

ssh-copy-id -i ./test.pub root@${ssh_ip} -p ${ssh_port}

拷贝最后会要求输入密码,输入之后没有错误即完成了

使用私钥进行SSH登陆

ssh -i ./test root@{ssh_ip} -p ${ssh_port}

更安全的SSH登陆配置

只是密钥登陆还不是最佳实践,更安全的配置请参考我之前的写的文章…

Linux服务器安全建议以及相关配置

能处处都特别理想,我按照我思考的最理想的配置来描述,可能有不对的地方,请多多包涵和指出!

1,永远不要关闭iptables

我以前为了方便开发调试,经常执行iptables -F清空所有规则,但是后面深入了解网络安全,发现这样会导致服务器处于无保护状态。至少要确保每个端口开放都是明确的,否则会很不安全

2,SSH只允许密钥登陆,禁止密码登陆和Root远程登陆权限,修改22端口

如果密码不复杂,那么允许密码登陆也会导致服务器不安全。我推荐使用密钥进行登陆,过几天有空写一些专门的SSH密钥配置流程。

接下来编辑/etc/ssh/sshd_config,修改一些参数:

修改22端口,和禁止Root登陆
禁止密码登陆

3,不能随意给Root权限,在chmod设置权限的时候谨慎给与其他用户组rwx

root账号应该是顶级用户使用的,具体分配给成员各自的账号,在/var/log/下各种操作都可以一目了然。如果都是root权限,那么在出问题的时候很难查出是谁操作的(随意删除操作日志、.bash_history等)。还有,Linux的权限系统限定了owner,group,other users,不能随意的设置文件777权限,这可能会导致部分用户可以读取执行隐私文件…

Linux系统配置lrzsz,配合XShell提升使用体验

在传统的Linux文件上传下载,一般是需要用到SFTP或者Rsync、FTP等协议,然而有一个更快捷更方便的方法,可以让你在上传下载时效率提升N倍

这里用CentOS7作为示例,首先安装相关的软件包:

yum -y install lrzsz

然后,在windows打开xshell,登陆目标服务器的SSH控制台,你可以尝试拖拽一个文件到控制台下,如图:

是不是很方便,它传送的目标地址就是你当前控制台的位置

那么怎么传送当前控制台下的某个文件呢?很简单,输入 sz ${YOUR_TARGET_FILE}即可:

sz mytarget.tar

选择好目标即可进行传送

这个方法真的非常提升效率,减少了误操作,强烈推荐


Linux的LANG语言编码配置

语言编码配置,是非常重要的,如果设置了不恰当的语言编码(比如英文或者GBK),同时你又尝试运行基于UTF-8的Java应用程序,那么乱码概率可是相当的大的!

临时设置:

export LANG=en.US

永久设置

vi /etc/locale.conf ,使目标编码生效即可(去除前面的#号)…

CentOS7在执行groupinstall的时候报错

因为在一开始选择了minmal install,许多依赖包没有安装,输入下面命令执行就可以了

yum groupinstall “Office Suite and Productivity” –setopt=group_package_types=mandatory,default,optional

然后,再执行yum group list,可以看到有许多套件,安装即可(记得组建名要大小写一致,用引号标注):

Nginx常规操作:压缩配置、反向代理、http转向等

概述

nginx真的很好用!而且配置清晰,我在nginx遇到的功能特性以及特性都描述在这里,文档不定时更新

压缩配置

在Web开发中,传输资源(JS/CSS/图片)的体积非常影响使用者的体验。据说,一个页面只要超过7秒钟,浏览者就会失去等待的耐心,并关掉页面。

那么如何尽量减少体积呢?代码混淆压缩是一方面,其实我们还可以在更高角度对资源进行压缩,这个压缩,就是gzip。无论是前端还是后端,在资源体积过大的情况下,都应该使用gzip。我曾经使用gzip,成功将5M的文件压缩成700k

下面描述相关配置:

在http下,输入:

gzip  on; # 打开gzip
gzip_min_length 1k; # 低于1k的不压缩
gzip_comp_level 9; # 压缩比例,1-9,越高压缩率越大
gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
gzip_disable "MSIE [1-6]\.";
gzip_vary on; 
然后调用curl,并查看返回的Content-Encoding
可以看到Content-Encoding是gzip,表明该资源是gzip压缩传送过来的

反向代理

有一些内网机器,并不想暴露在对外网络中,又或者是需要做负载均衡。那么这个情况下,就需要nginx的反向代理作为对外的入口了,我常用nginx的代理在http层的代理(貌似最新版本支持tcp代理了)

反向代理是什么?其实这个就应该和正向代理一起来讲述。正向代理,就像是一台中转路由器,它明确告诉你,它不是服务器,只是替你转发请求。而反向代理,就是伪装自己是最终端的服务器,它告诉你它就是处理服务器的终点,但实际上并不是,它还需要将请求转发给内网的其他服务器,这一个转发的过程你不知道,所以这是反向代理。

反向代理的配置如下:

proxy_pass http://127.0.0.1:55161; 
proxy_set_header 

CentOS7 安装桌面环境Xfce4以及VNC-Server

因为之前一直用Ubuntu来开发,最近想尝尝鲜,用CentOS7来试试它的桌面(过几天装Oracle肯定也要GUI,我提前先试试^_^)

1,首先安装GNOME环境

yum groupremove “GNOME Desktop”

2,安装Redhat的升级包

yum install epel-release

3,安装XWindow的基本系统

yum groupinstall “X Window System”

4,安装Xfce4的group安装包

yum grouplist yum groupinstall Xfce4

5,初始化xstartup

echo ‘#!/bin/sh’ > ~/.vnc/xstartup

echo ‘/usr/bin/startxfce4’ >> ~/.vnc/xstartup

到这里,大致的环境已经配置好了!接下来就是安装VNC-Server,使用VNC进行登陆即可!

yum install -y tigervnc-server

echo ‘VNCSERVERS=”1:root”‘ > /etc/sysconfig/vncservers…

搭建HTTPS服务,为Web应用安全护航

什么是https

HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL

https搭建的目的

最大的动力还是因为http明文传输、容易被中间人劫持,同时也是为了让用户浏览安全,所以我尽可能给自己的Web应用加上https证书

搭建环境

操作系统: CentOS7

Linux账号: root

创建https证书

首先执行,创建基本的acme目录:

curl https://get.acme.sh | sh

进入acme目录,并且执行命令

cd /root/.acme.sh

./acme.sh –issue -d laihuanmin.com –dns –yes-I-know-dns-manual-mode-enough-go-ahead-please

按照输出结果,配合域名值记录值,到DNS解析处进行记录添加
看到这是插入的结果,因为我解析了@和www,所以添加了两个TXT记录

在添加之后,再进行二次校验

./acme.sh –renew -d laihuanmin.com –dns –yes-I-know-dns-manual-mode-enough-go-ahead-please

正常情况下,会有Verifying并且Success的字样…