【系统优化】新装Linux系统注意事项增加系统安全

1、系统安装最小化

1)根据经验,选择安装包时应该按最小化原则,即不需要的或者不确定是否需要的就不安装,这样可以最大程度上确保系统安全。

2)如果安装过程落了部分包组或者其他伙伴安装时没选,再安装后可以按如下方式补上安装时未安装的包组:

yum groupinstall "Compatibility libraries" "Base" "Development tools"

yum groupinstall "debugging Tools" "Dial-up Networking Support"

可以通过yum groupinfo 包组查看具体安装的组件。

注意:不要使用yum的删除功能删除软件,会删除相关依赖,导致意外问题。

3) 安装系统补装工具命令

安装系统后还会有一些基本的工具没装,这时可以根据需求yum来安装下,啥时用啥时装也可。例如:

yum install tree nmap sysstat lrzsz dos2unix -y

如果需要更新补丁则执行

yum update

2、系统权限最小化

linux/unix是一个多用户、多任务的操作系统。

超级管理员(root): root默认在unix/linux操作系统中拥有最高的管理权限。比喻:皇帝。

普通用户:管理员或者具备管理权限的用户创建的。权限:系统管理仅可以读、看,不能增、删、改。

权限越大,责任越大。

可使用如下命令添加一个普通用户账号,并为其设置口令:

[root@oldboy ~]# useradd luffy

[root@ oldboy ~]# passwd luffy ###问你新的密码,然后你输入 交互设置密码

Changing password for user luffy.

New password:

BAD PASSWORD: it is too simplistic/systematic #ç提示密码太简单了,但可以不理会。

BAD PASSWORD: is too simple

Retype new password:

passwd: all authentication tokens updated successfully.

提示:

非交互式设置密码:还可通过下面的命令一步到位地设置密码(其中,luffy为用户名,密码为123456)。

echo "123456"|passwd --stdin luffy && history -c

尝试切换用户角色,命令如下:

[root@ oldboy ~]# su - luffy <==由root管理员,切换到普通用户luffy

[luffy@ oldboy ~]whoami<==查看当前用户是什么luffy[luffy@oldboy ] su - root <==切回到root用户

Password:

说明:

1)超级用户root切换到普通用户下面,无需输入对应用户密码,这相当于“皇帝”去“大臣”家里。

2)普通用户切换到root或其他普通用户下,需要输入切换的对应用户密码。

3)普通用户的权限比较小,只能进行基本的系统信息查看等操作,无法更改系统配置和管理服务。

4)符号是普通用户的命令行提示符,#符号是超级管理员的提示符。示例如下: [luffy@ oldboy ~] #普通用户luffy对应的提示符

[root@ oldboy ~]# #超级管理员root对应的提示符

5)提示符@前面的字符代表当前用户(可用whoami查询),后面的为主机名(可用hostname查询),~所在的位置是窗口当前用户所在的路径。示例如下:

[luffy@ oldboy ~]#luffy为当前用户,Oldboy为主机名,~表示当前目录,即家目录。 6)Linux命令提示符由PS1环境变量控制。示例如下: [root@ oldboy ~]# echoPS1

[\u@\h \W]$

这里的PS1='[\u@\h \W]′,可以通过全局变量配置/etc/profile文件调整PS1=′[\u@\h\W\t] '。

注意:PS1必须大写的。

参数 含义

\d 代表日期,格式为weekday month date。

\H 完整的主机名称。

\h 仅取主机的第一个名字。

\t 显示时间为24小时格式,如HHMMSS。

\T 显示时间为12小时格式。

\A 显示时间为24小时格式HHMM。

\u 当前用户的账号名称。

\v BASH的版本信息。

\w 完整的工作目录名称。家目录会以~显示

\W 利用basename取得工作目录名称,所以只会列出最后一个目录

\# 下达的第几个命令

$ 提示字符,如果是root时,提示符为# ,普通用户则为变量(放东西查看变量的内容)PS1−−−变量的名字−−−−−−藏经阁里面的武功秘籍(葵花宝典)秘籍名字(书名)PS1---查看变量里面的内容---手端着书(葵花宝典) 看书的内容(读书) PS1=新的内容 ---向变量里面放入东西----修改书的内容(升级书) 欲练此功,必先自宫,若不自宫,也能成功。 linux变量名字(书名)大写的一般是自己用(linux环境变量),在哪里都可以用的变量

3、关闭SELinux       

SELinux(Security-Enhanced Linux)是美国国家安全局(NSA)对于强制访问控制的实现,这个功能让系统管理员又爱又恨,这里我们还是把它给关闭了吧,至于安全问题,后面通过其他手段来解决,这也是大多数生产环境的做法,如果非要开启也是可以的。

关闭方式如下

永久关闭selinux

# 备份

cp /etc/selinux/config /etc/selinux/config.bak

# sed修改,看看结果,不加-i

sed 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

# 确认并使用 sed -i 修改文件内容

sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

# 检查结果

grep "disabled" /etc/selinux/config

临时关闭selinux

setenforce 0

# 数字0表示Permissive,即给出警告提示,但不会阻止操作,相当于disabled。

# 数字1表示Enforcing,即表示SElinux为开启状态。

getenforce # 查看命令

命令说明:

setenforce:用于命令行管理SELinux的级别,后面的数字表示设置对应的级别。

getenforce:查看SELinux当前的级别状态。

提示:修改配置SElinux后,要想使其生效,必须要重启系统。因此,可配合使用setenforce 0这个临时使其关闭的命令,这样在重启前后都可以使得SElinux关闭生效了,也就是说无须立刻重启服务器了,在生产场景下Linux机器是不能随意重启的(不要给自己找任何理由重启)。

4、关闭iptables(C6)或Firewalld(C7)防火墙

关闭防火墙的目的是为了让初学者学习更方便,将来在学了iptables技术后可再统一开启。 在企业环境中,一般只有配置外网IP的linux服务器才需要开启防火墙,但即使是有外网IP,对于高并发高流量的业务服务器仍是不能开的,因为会有较大性能损失,导致网站访问很慢,这种情况下只能在前端加更好的硬件防火墙了。 关闭防火墙的具体操作过程如下:

CentOS 6.x

关闭防火墙

[root@oldboyedu ~]# /etc/init.d/iptables stop 

[root@oldboyedu ~]# /etc/init.d/iptables stop #<==重复执行下确认已关闭。

查看是否关闭

[root@oldboyedu ~]# /etc/init.d/iptables status 

iptables: Firewall is not running.

关闭开机自启动命令,前面已经关闭这里就无需执行。

[root@oldboyedu ~]# chkconfig iptables off 

[root@oldboyedu ~]# chkconfig --list|grep ipt

iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off

CentOS7.x

关闭防火墙

[root@oldboyedu ~]# systemctl stop firewalld

关闭开机自启动

[root@oldboyedu ~]# systemctl disable firewalld

查看防火墙状态

[root@oldboyedu ~]# systemctl is-active firewalld #是否正在运行

[root@oldboyedu ~]# systemctl is-enabled firewalld #是否开机自启动

关闭NetworkManager

[root@oldboyedu ~]# systemctl stop NetworkManager

[root@oldboyedu ~]# systemctl disable NetworkManager

5、更改SSH远程默认的22端口

sed -i 's#\#Port 22#Port 7777#g' /etc/ssh/sshd_config

service sshd restart

6、使用国内镜像做yum源

默认国外的yum源(软件仓库)比较慢,所以换成国内的。

备份

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

下载新的CentOS-Base.repo 到/etc/yum.repos.d/

CentOS 5

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo

或者

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo

CentOS 6

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

或者

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

CentOS 7

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

或者

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

之后运行yum makecache生成缓存,此步骤可以不执行。

7、epel源的安装

备份(如有配置其他epel源)

mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup

mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup

下载新repo 到/etc/yum.repos.d/

epel(RHEL 7)

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

epel(RHEL 6)

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

epel(RHEL 5)

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-5.repo

更换查看帮助的网站mirrors.aliyun.com

8、关于网络下载命令

curl

在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。

常用参数

-o --output,把输出写到该文件中

-O --remote-name,把输出写到该文件中,保留远程文件的文件名

-I --head,只显示传输文档,经常用于测试连接本身

-s --silent,静默模式,不输出任何东西

-T --upload-file,上传文件

-V --version,显示版本信息

-f --fail,只输出错误信息

-# --progress-bar,用进度条显示当前的传送状态

-H --header,自定义标题传递到服务器

-v --verbose,详细显示请求报文结构和响应报文结构信息

wget 主要用于下载文件

wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成

wget 可以跟踪HTML页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构。这又常被称作”递归下载”。

常用参数

-V --version,显示 Wget 的版本信息并退出。

-h --help,打印此帮助。

-b --background,启动后转入后台。

-O --output-document=FILE,将文档写入 FILE。

-q --quiet,安静模式(无信息输出)。

-v --verbose,详尽的输出(此为默认值)。

9、安装常用软件

为了使用方便,可以安装一些常用的软件。

yum -y install tree nmap sysstat lrzsz dos2unix telnet bash-completion bash-completion-extras vim nc lsof net-tools rsync

10、升级具有典型漏洞的软件版本

诸如openssl、openssh、bash爆出很多软件漏洞,在企业场景需要进行修复漏洞操作,步骤如下:

首先查看相关软件的版本号。

[root@Oldboy ~]# rpm -qa openssl openssh bash

openssl-1.0.1e-30.el6.x86_64

bash-4.1.2-29.el6.x86_64

openssh-5.3p1-104.el6.x86_64

执行升级已知漏洞的软件版本到最新,命令如下:

[root@Oldboy ~]# yum install openssl openssh bash -y

[root@Oldboy ~]# rpm -qa openssl openssh bash

openssh-5.3p1-104.el6_6.1.x86_64

bash-4.1.2-29.el6.x86_64

openssl-1.0.1e-30.el6_6.5.x86_64

11、时间同步

echo '#Timing synchronization time' >/var/spool/cron/root

echo '*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >/var/spool/cron/root

crontab -l

12、加大文件描述

echo '* - nofile 65535 ' >>/etc/security/limits.conf 

tail -1 /etc/security/limits.conf

13、别名和环境变量优化

cat>>/etc/profile.d/color.sh<<EOF

alias ll='ls -l --color=auto --time-style=long-iso'

PS1='

\e[32;1m

[\u@\h \W]$

\e[0m

'

export HISTTIMEFORMAT='%F-%T '

EOF

14、内核优化

cat >>/etc/sysctl.conf<<EOF

net.ipv4.tcp_fin_timeout = 2

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_keepalive_time = 600

net.ipv4.ip_local_port_range = 4000 65000

net.ipv4.tcp_max_syn_backlog = 16384

net.ipv4.tcp_max_tw_buckets = 36000

net.ipv4.route.gc_timeout = 100

net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_synack_retries = 1

net.core.somaxconn = 16384

net.core.netdev_max_backlog = 16384

net.ipv4.tcp_max_orphans = 16384

EOF

sysctl -p

15、修改主机名和IP脚本

[root@oldboy ~]# cat /server/scripts/hostname_ip.sh 

#!/usr/bin/sh

if [ # -ne 2 ];then   echo "/bin/sh0 hostname PartIP"

exit 1

fi

hostnamectl set-hostname $1

sed -i "s#100#$2#g" /etc/sysconfig/network-scripts/ifcfg-eth[01]

systemctl restart network

16、更改Linux特殊变量

临时生效:

export TMOUT=10        账号超时时间控制台变量(类似于Windows的锁屏)

export HISTSIZE=5          命令行历史记录数量(历史记录越少越好)

export HISTFILESIZE=5   命令行命令对应文件的记录数~/.bash_history

永久生效:

echo 'export TMOUT=300' >>/etc/profile

echo 'export HISTSIZE=5' >>/etc/profile

echo 'export HISTFILESIZE=5' >>/etc/profile

source /etc/profile

17、隐藏Linux版本信息

cat /etc/issue

>/etc/issue

>/etc/issue.net

这时候就没有任何版本信息了

18、如何防止显示中文乱码(该优化初期建议不优化,直接强制看英文)

此项优化为可选项,即调整Linux系统的字符集设置,那么,什么是字符集呢?

简单的说,字符集就是一套文字符号及其编码。目前Linux下常用的字符集有:

GBK:定长,双字节,不是国际标准,支持的系统不少,实际企业用的不多。

UTF-8:非定长,1~4字节,广泛支持,MYSQL也使用UTF-8,企业广泛使用。 可通过快捷的命令方式在/etc/sysconfig/i18n中添加如下内容,使其支持中文显示:

CentOS 6.x修过过程

[root@ oldboy ~]# echo LANG                ###查看系统当前的字符集 en_US.UTF-8 [root@ oldboy ~]# cat /etc/sysconfig/i18n   #####系统字符集配置文件的位置 LANG="en_US.UTF-8" SYSFONT="latarcyrheb-sun16" [root@Oldboy ~]# cp /etc/sysconfig/i18n /etc/sysconfig/i18n.ori  ####备份 [root@Oldboy ~]# echo 'LANG="zh_CN.UTF-8"'  >/etc/sysconfig/i18n ####修改配置文件 #→相当于用vi /etc/sysconfig/i18n 添加LANG="zh_CN.UTF-8"内容 [root@Oldboy ~]# source /etc/sysconfig/i18n #→使上文修改生效    ###让配置文件生效 [root@Oldboy ~]# echoLANG ###查看系统当前的字符集

zh_CN.UTF-8

CentOS 7.x修过过程

修改/etc/locale.conf这个文件

提示:

乱码的核心解决方法:

系统字符集(utf-8)

xshell软件的字符集保持一致(utf-8)

文件使用的字符集一致

zh_CN.GBK

注意“zh_CN.UTF-8”的大小写字母。

这个中文显示配置要跟你自己的SSH客户端的配置一致。

Linux基础优化与安全重点小结

不用root登录管理系统,而以普通用户登录通过sudo授权管理。

更改默认的远程连接SSH服务端口,禁止root用户远程连接,甚至要更改SSH服务只监听内网IP。

定时自动更新服务器的时间,使其和互联网时间同步。

配置yum更新源,从国内更新源下载安装软件包。

关闭SELinux及iptables(在工作场景中,如果有外部IP一般要打开iptables,高并发高流量的服务器可能无法开启)。

调整文件描述符的数量,进程及文件的打开都会消耗文件描述符数量。

定时自动清理邮件临时目录垃圾文件,防止磁盘的inodes数被小文件占满(注意Centos6和Centos5要清除的目录不同)。

精简并保留必要的开机自启动服务(如crond、sshd、network、rsyslog、sysstat)。

Linux内核参数优化/etc/sysctl.conf,执行sysctl -p生效。

更改系统字符集为“zh_CN.UTF-8”,使其支持中文,防止出现乱码问题。

锁定关键系统文件如/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow、/etc/inittab,处理以上内容后把chattr、lsattr改名为luffy,转移走,这样就安全多了。

清空/etc/issue、/etc/issue.net,去除系统及内核版本登录前的屏幕显示。

清除多余的系统虚拟用户账号。

为grub引导菜单加密码。

禁止主机被ping。

打补丁并升级有已知漏洞的软件。 新系统 yum –y install 已经在线上用的服务器 web服务器能够停止。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章