1. 系统安装

本着纯净系统的原则,我们在安装系统时,应选择minimal install选项,来执行最小化安装,以便有需要时,安装我们需要的安装软件包。

操作系统为CentOS7.3 1611

下载地址:

https://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-1611.iso

2. 修改yum源,并安装常用软件

由于系统的yum源并不能每次都选择到国内的yum源进行安装,影响安装效率,可以替换为国内的yum源,进行使用,当然我们有条件,也可以自己定制自己的yum服务器进行安装。

yum -y install wget
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install vim net-tools lrzsz bash-completion rsync sysstat git chrony

3. 清除系统信息

> /etc/issue
> /etc/motd

4. 设置主机名

hostnamectl set-hostname  myserver.com
sed -i '$a10.0.7.100 myserver.com' /etc/hosts

5. 关闭防火墙和SELinux

systemctl disable firewalld
sed -ri 's@^(SELINUX=).*@\1disabled@g' /etc/selinux/config

6. 开启时钟同步

systemctl enable chronyd
#重启之后,验证是否启动
chronyc sources -v

7. 添加普通用户登陆系统

useradd xiaohou
echo "123456"|passwd --stdin xiaohou

8. 用户sudo授权

visudo

#设置一个命令别名
Cmnd_Alias SHUTDOWN = /sbin/halt, /sbin/shutdown, /sbin/poweroff, /sbin/reboot, /sbin/init
#对用户xiaohou进行授权,面密码进行一些操作,可以把ALL替换为你想要的命令路径
xiaohou ALL=(root) NOPASSWD:ALL,!SHUTDOWN
#sudo的日志记录
Defaults logfile=/var/log/sudo.log
Defaults !syslog

9. SSH设置

cat >> /etc/ssh/sshd_config <<EOF
#监听的IP和端口
Port 10022
ListenAddress 0.0.0.0
#禁止root远程登陆
PermitRootLogin no
#重试次数
MaxAuthTries 3
#SSH的最大连接数
MaxSessions 10
#禁止空密码用户登陆
PermitEmptyPasswords no
#禁止DNS和GSSAPI认证,加速响应
UseDNS no
GSSAPIAuthentication no
EOF

10. 命令历史记录和超时环境变量设置

cat >> ~/.bashrc << EOF
# ~/.bash_history的文件大小
export HISTFILESIZE=5000000
# 滚动保存的历史命令条目数
export HISTSIZE=10000
# 实时记录历史命令,默认只有在用户退出之后才会统一记录,容易造成多个用户间的相互覆盖。
export PROMPT_COMMAND="history -a"
# 记录每条历史命令的执行时间
export HISTTIMEFORMAT="%F %T $(whoami) "
EOF

11. ulimit优化

#打开文件数
cat >> /etc/security/limits.conf <<EOF
* soft nofile 100000
* hard nofile 100000
* - nproc 1024000
EOF
#打开进程数
cat >> /etc/security/limits.d/20-nproc.conf <<EOF
* soft nproc 10000
root soft nproc unlimited
EOF

12. 内核参数优化

cat >> /etc/sysctl.conf <<EOF
#所有用户打开文件描述符的总和
fs.file-max = 1000000
#修改防火墙连接数
net.netfilter.nf_conntrack_max=655360
net.netfilter.nf_conntrack_tcp_timeout_established = 180
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
#关闭ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
#关闭路由转发
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
#关闭组合键功能
kernel.sysrq = 0
#使用swap的概率
vm.swappiness = 10
#开启TCP连接中time_wait sockets的快速回收
net.ipv4.tcp_tw_recycle = 1
#timewait的数量,默认是180000
net.ipv4.tcp_max_tw_buckets = 6000
#开启TCP连接复用功能,允许将time_wait sockets重新用于新的TCP连接(主要针对time_wait连接)
net.ipv4.tcp_tw_reuse = 1
#1st低于此值,TCP没有内存压力,2nd进入内存压力阶段,3rdTCP拒绝分配socket(单位:内存页)
net.ipv4.tcp_mem = 94500000 915000000 927000000
#保持在FIN-WAIT-2状态的时间。
net.ipv4.tcp_fin_timeout = 15
#普通用户可使用的端口范围
net.ipv4.ip_local_port_range = 2048 65000
#arp抑制,lvs时用到
#net.ipv4.conf.lo.arp_ignore = 1
#net.ipv4.conf.lo.arp_announce = 2
#net.ipv4.conf.all.arp_ignore = 1
#net.ipv4.conf.all.arp_announce = 2
#当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2小时
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 5
#开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理
net.ipv4.tcp_syncookies = 1
#每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog = 32768
#记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128
net.ipv4.tcp_max_syn_backlog = 20000
#web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值
net.core.somaxconn = 32768
#为TCP socket预留用于发送缓冲的内存默认值(单位:字节)
net.core.wmem_default = 8388608
#为TCP socket预留用于发送缓冲的内存最大值(单位:字节)
net.core.wmem_max = 16777216
#为TCP socket预留用于接收缓冲的内存默认值(单位:字节)
net.core.rmem_default = 8388608
#为TCP socket预留用于接收缓冲的内存最大值(单位:字节)
net.core.rmem_max = 16777216
#时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉
net.ipv4.tcp_timestamps = 0
#系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。这个限制仅仅是为了防止简单的DoS攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)
net.ipv4.tcp_max_orphans = 3276800
#为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量
net.ipv4.tcp_synack_retries = 1
#在内核放弃建立连接之前发送SYN包的数量
net.ipv4.tcp_syn_retries = 1
EOF

13. VIM创建文件自动添加注释信息

添加至~/.vimrc中

autocmd BufNewFile *.py,*.sh exec ":call SetTitle()"
function! SetTitle()
if &filetype == 'sh'
call setline(1, "\#!/bin/bash")
call setline(2, "\# ******************************************************")
call setline(3, "\# Author: xiaohou")
call setline(4, "\# Email: xx@xx.com")
call setline(5, "\# Created Time : ".strftime("%c"))
call setline(6, "\# Last Modified: ")
call setline(7, "\# File Name: ".expand("%"))
call setline(8, "\# Description: ")
call setline(9, "\# ******************************************************")
normal G
endif
if &filetype == 'python'
call setline(1, "\#!/usr/bin/env python")
call setline(2, "\# ******************************************************")
call setline(3, "\# coding=utf8")
call setline(4, "\# Author: xiaohou")
call setline(5, "\# Email: xx@xx.com")
call setline(6, "\# Created Time : ".strftime("%c"))
call setline(7, "\# Last Modified: ")
call setline(8, "\# File Name: ".expand("%"))
call setline(9, "\# Version: ")
call setline(10,"\# Description: ")
call setline(11,"\# ******************************************************")
normal G
endif
endfunction
function! SetLastModifiedTime(lineno)
let modif_time = strftime("%c")
if a:lineno == "-1"
let line = getline(6)
else
let line = getline(a:lineno)
endif
if line =~ '^////\sLast Modified'
let line = substitute( line,':\s\+.*\d\{4\}', ':'.modif_time, "" )
else
let line = '# Last Modified: '.modif_time
endif
if a:lineno == "-1"
call setline(5, line)
else
call append(a:lineno, line)
endif
endfunction
au BufWrite *.py,*.sh call SetLastModifiedTime(-1)

唔,貌似不错,重启系统吧,reboot

其他可选配置

  1. 精简开机启动服务,建议开启的服务crond,network,syslog,sshd、iptables、udev-post、sysstat
systemctl list-unit-files --type=service|grep enabled
  1. 修改语言环境
vim /etc/locale.conf
LANG="en_US.UTF-8"
  1. 更新软件包
yum update -y
  1. 禁止Linux系统被ping
echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.conf
sysctl -p
  1. 定时自动清理邮件临时目录垃圾文件,防止磁盘的inodes数被小文件占满
find /var/spool/postfix/maildrop/ -type f |xargs rm -rf
  1. 锁定一些关键文件,放置被删除
chattr +i file
  1. 对于一些分区,可以在挂载时选择noexec,nosuid选项
/dev/sda1 /tmp xfs default,noexec,nosuid 0 0
  1. 设置eth0网卡
sed -ri 's@(GRUB_CMDLINE_LINUX=.*)"@\1 net.ifnames=0"@g' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
mv /etc/sysconfig/network-scripts/ifcfg-{ens32,eth0}
sed -i 's@ens32@eth0@g' /etc/sysconfig/network-scripts/ifcfg-eth0
rm /etc/udev/rules.d/70-persistent-ipoib.rules -f

最新文章

  1. MySQL 插入数据时,中文乱码问题的解决(转)
  2. python wordcloud 对电影《我不是潘金莲》制作词云
  3. mysql导入sql文件,乱码,一个例子
  4. 小白学数据分析-----&gt;留存率与运营活动分析_I
  5. 开放-封闭原则(OCP)
  6. vc编程时说“Cannot open include file: &#39;unistd.h&#39;: No such file or directory”
  7. git推送本地分支到远端 以及删除远端分支的 命令
  8. iOS崩溃报告获取二
  9. VMware下安装Ubuntu,那么必须安装VMware-tools,才能获得更好的体验,包括屏幕分辨率、声音、和windows共享剪贴板等等
  10. 脱O把妹,记录这一周来迁移至MySQL的一些心得
  11. 201521123085《Java程序设计》第10周学习总结
  12. Java由先序序列和中序序列还原二叉树
  13. ELK 5.5.0 安装
  14. UVa439——骑士的移动
  15. Codeforces Round #555 (Div. 3)[1157]题解
  16. iOS开发第三方库一 IQKeyboardManager
  17. ViewDragHelper
  18. XHR简介
  19. 一步一步学习IdentityServer3 (2)
  20. 网络流--最大流ek模板

热门文章

  1. LINUX进程ps -ef和ps -aux的区别及格式详解
  2. ceph osd跟cpu进行绑定
  3. CSS动画实例:行星和卫星
  4. c++线性表和数组的区别
  5. 关于c++11 memory order的理解
  6. 揭秘日活千万腾讯会议全量云原生化上TKE技术实践
  7. Excel-时间函数将时间换成小时
  8. Android开发之强大的网络判断工具,判断是否联网,判断是wifi还是3g网络等java工具代码类
  9. Unable to add window -- token null is not for an application错误的解决方法 android开发
  10. Cross-Site Scripting: Reflected