CentOS 服务器初始化设置
网卡配置
CentOS 6.x
1 vi /etc/sysconfig/network-scripts/ifcfg-eth0 2 3 DEVICE="eth0" 4 BOOTPROTO="static" 5 HWADDR="00:50:56:8F:01:3D" 6 NM_CONTROLLED="no" 7 ONBOOT="yes" 8 TYPE="Ethernet" 9 UUID="fdabdc89-ad4b-45ea-a860-83f1bc9f48c8" 10 IPADDR=192.168.9.27 11 NETMASK=255.255.255.0 12 GATEWAY=192.168.9.254 13 DNS1=114.114.114.114 14 DNS2=8.8.8.8 15 16 # 重启网卡, 使配置生效 17 /etc/init.d/network restart 18 19 # 查看网卡是否生效 20 ifconfig eth0 21 eth0 Link encap:Ethernet HWaddr 00:50:56:8F:01:3D 22 inet addr:192.168.9.27 Bcast:192.168.9.255 Mask:255.255.255.0 23 inet6 addr: fe80::250:56ff:fe8f:13d/64 Scope:Link 24 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 25 RX packets:4521395 errors:0 dropped:0 overruns:0 frame:0 26 TX packets:157653 errors:0 dropped:0 overruns:0 carrier:0 27 collisions:0 txqueuelen:1000 28 RX bytes:564465601 (538.3 MiB) TX bytes:16694989 (15.9 MiB)
View Code
CentOS 7.x
# 修改 CentOS 7 网卡名为 eth0 cd /etc/sysconfig/network-scripts mv ifcfg-ens160 ifcfg-eth0 vi ifcfg-eth0 # Generated by dracut initrd # NAME="ens160" # DEVICE="eth0" NAME="eth0" DEVICE="eth0" ONBOOT=yes NETBOOT=yes UUID="eb965b1d-1978-475c-bc27-25b260b0baac" IPV6INIT=yes BOOTPROTO=static TYPE=Ethernet IPADDR=192.168.9.27 NETMASK=255.255.255.0 GATEWAY=192.168.9.1 # 因 CentOS7 采用 grub2 引导,还需要对 grub2 进行修改,编辑 /etc/default/grub 配置文件,在 GRUB_CMDLINE_LINUX 这个参数后面加入 net.ifnames=0 biosdevname=0 vi /etc/default/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed \'s, release .*$,,g\' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0 crashkernel=auto rhgb quiet" GRUB_DISABLE_RECOVERY="true" # 用 grub2-mkconfig 命令重新生成GRUB配置并更新内核 grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-fb511531b5c644a79810fbc5a52fe83c Found initrd image: /boot/initramfs-0-rescue-fb511531b5c644a79810fbc5a52fe83c.img # 重启系统 reboot # 配置 DNS, 同样可以在配置网卡的时候配置 DNS1 / DNS2 vi /etc/resolv.conf nameserver 114.114.114.114 nameserver 8.8.8.8
Centos 7.x 修改网卡名, 在装机的时候进行更改
- 安装系统时, 在选择菜单的界面, 按 Tab 键, 打开 Kernel 启动选项
- 增加内核参数 : net.ifnames=0 biosdevname=0
- 输入完成之后回车正常安装操作系统.
修改主机名
CentOS 6.x
# 临时修改; hostname web_1 # 永久修改主机名,重启生效; vim /etc/sysconfig/network NETWORKING=yes HOSTNAME=web_1 # 修改 hosts 文件, 本地解析, 可以将localhost.localdomain替换为web_1,或者追加; vim /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 web_1 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
# 查看主机名
uname -n 或者 hostname
CentOS 7.x
# 临时修改 hostname tian # 永久修改,退出登录终端重新登录生效; hostnamectl set-hostname tian # 永久修改2, 需要重启生效; vim /etc/hostname tian # 查看主机名 uname -n 或者 hostname
更换国内阿里云yum源
CentOS 6.x
# 备份源yum源 cd /etc/yum.repos.d && mkdir back mv *.repo back wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo # 或者使用 curl curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo # 清除yum缓存 yum clean all # 缓存yum源的安装包 yum makecache
CentOS 7.x
# 备份源yum源 cd /etc/yum.repos.d && mkdir back mv *.repo back wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 或者使用 curl curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 清除yum缓存 yum clean all # 缓存yum源的安装包 yum makecache
安装系统软件库
# 开发工具, 源码安装服务需要 yum -y groupinstall "Development tools"
yum -y vim lrzsz ntp unzip
时间同步
# 查看系统时区是否为 上海 vim /etc/sysconfig/clock ZONE="Asia/Shanghai" UTC=false # 设置为false,硬件始终不与utc时间一致 ARC=false # 若时区不是上海 rm -f /etc/localtime # 删除时间文件; ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 时区设置为上海 # 进行时间同步 (ntp1.aliyun.com / time.nist.gov / asia.pool.ntp.org) ntpdate time.nist.gov # 设置硬件时间与系统时间一致并校准 hwclock --show # 显示硬件时间 hwclock --systohc # hwclock 命令的使用 hwclock -r or hwclock --show # 显示时间 hwclock -w or hwclock --systohc # 用系统时间同步硬件时间 hwclock -s or hwclock --hctosys # 用硬件时间同步系统时间 hwclock -a or hwclock --adjust # 矫正时间 hwclock -v or hwclock --version # 工具版本 hwclock --set --date=newdate # 设置时间 # CentOS 7 查看系统时间及硬件时间 timedatectl # 添加时间同步定时任务 crontab -e 00 01 * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1 ; /sbin/hwclock -w
# ntp 常用服务器
中国国家授时中心: 210.72.145.44
NTP 服务器(上海): ntp.api.bz
微软公司授时主机(美国): time.windows.com
内核参数优化
# 在 /etc/sysctl.conf 文件中添加以下内容 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 = 10000 65000 net.ipv4.tcp_max_syn_backlog = 16384 net.ipv4.tcp_max_tw_buckets = 6000 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
net.ipv4.tcp_keepalive_probes=5
net.core.netdev_max_backlog=3000 EOF # 立即生效添加项 sysctl -p # ************************* 参数讲解 ******************************** # 表示套接字由本端要求关闭,这个参数决定了他保持在 FIN_WAIT_2 状态的时间, 默认值是 60 秒; 该参数对应系统给路径为: /proc/sys/net/ipv4/tcp_fin_timeout net.ipv4.tcp_fin_timeout # 表示开启重用,允许将 TIME_WAIT sockets重新用于新的TCP连接, 默认值为0, 表示关闭; 该参数对应系统路径为: /proc/sys/net/ipv4/tcp_tw_reuse net.ipv4.tcp_tw_reuse # 表示开启 TCP 连接中 TIME_WAIT sockets 的快速回收, 默认值为0 , 表示关闭; 该参数的对应系统路径为: /proc/sys/net/ipv4/tcp_tw_recycle net.ipv4.tcp_tw_recycle # 上面两个 reuse和recycle 两个参数是为了放置生产环境中 WEB , Squid 等业务服务器 time_wait网络状态数量过多; # 表示开启 SYN Cookies功能,当出现 SYN 等待队列溢出时, 启用 Cookies 来处理, 可防范少量SYN攻击, 这个参数可不添加, 对应系统路径: /proc/sys/net/ipv4/tcp_syncookies net.ipv4.tcp_syncookies # 表示当keepalive启用时, TCP 发送keepalive消息的频度, 默认是2小时, 建议 10 分钟; 对应系统路径: /proc/sys/net/ipv4/tcp_keepalive_time, 默认 7200 秒; net.ipv4.tcp_keepalive_time # 表示设定允许系统打开的端口范围, 即用于向外连接的端口范围; 对应系统路径:/proc/sys/net/ipv4/ip_local_port_range net.ipv4.ip_local_port_range # 表示 SYN 队列的长度, 默认为 1024, 建议加大队列的长度为 8192 或者更大,这样可以容纳更多等待连接的网络连接数,该参数为服务器端用于记录那些尚未收到客户端确认信息的连接请求最大值; 对应系统路径: /proc/sys/net/ipv4/tcp_max_syn_backlog net.ipv4.tcp_max_syn_backlog # 表示系统同时保持 TIME_WAIT 套结字的最大数量,如果超过这个数值,TIME_WAIT套接字将立刻被清除并打印警告信息, 默认 180000, 对于 apache , nginx 等服务器来说可以将其调低一点, 5000~30000间, 不同业务的服务器也可以大一点, 如 LVS , Squid; 此参数可以控制 TIME_WAIT 套接字的最大数量, 避免 Squid 服务器被大量的TIME_WAIT套接字拖死; 对应系统路径:/proc/sys/net/ipv4/net.ipv4.tcp_max_tw_buckets net.ipv4.tcp_max_tw_buckets # 该参数的值决定了内核放弃连接前发送 SYN+ACK 包的数量; 对应系统路径为: /proc/sys/net/ipv4/net.ipv4.tcp_synack_retries net.ipv4.tcp_synack_retries # 表示在内核放弃建立连接之前发送 SYN 包的数量; 对应系统路径:/proc/sys/net/ipv4/net.ipv4.tcp_syn_retries net.ipv4.tcp_syn_retries # 用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上,如果超过这个数值,孤立连接将被立即被复位并打印出警告信息,这个限制只有为了防止简单的DoS攻击,不能过分依靠这个限制甚至认为减少这个值,更多的情况是增加这个值;对应系统路径为:/proc/sys/net/ipv4/tcp_max_orphans net.ipv4.tcp_max_orphans # 该选项默认值是128,这个参数用于调节系统同时发起的TCP连接数,在高并发的请求中,默认的值可能会导致链接超时或重传,因此,需要结合并发请求数来调节此值,对应系统路径为:/proc/sys/net/core/somaxconn net.core.somaxconn # 表示当每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包最大数,对应系统路径为:/proc/sys/net/core/netdev_max_backlog,默认值为1000 net.core.netdev_max_backlog
#减少超时前的探测次数
net.ipv4.tcp_keepalive_probes=5
#优化网络设备接收队列
net.core.netdev_max_backlog=3000
关闭防火墙及selinux机制
CentOS 6.x
/etc/init.d/iptables stop # 关闭防火墙 chkconfig iptables off # 关闭开机自启 setenforce 0 # 临时关闭 selinux机制 sed -i \'/^SELINUX/ s/enforcing/disabled/\' /etc/selinux/config # 永久关闭selinux机制
CentOS 7.x
systemctl stop firewalld # 关闭防火墙 systemctl disable firewalld # 关闭开机启动; setenforce 0 # 临时关闭 selinux机制 sed -i \'/^SELINUX/ s/enforcing/disabled/\' /etc/selinux/config # 永久关闭selinux机制
精简开机启动
CentOS 6.x
# 5个必须保留的开机启动服务( sshd/rsyslog/network/crond/sysstat ) sshd # 远程连接Linux服务器需要的服务; rsyslog # 操作系统提供的一种机制,系统的守护程序通常会使用rsyslog将各种信息记录到系统日志中,Centos6以前服务为syslog network # 系统启动时,网络服务 crond # 用于周期性执行系统及用户配置的任务计划; sysstat # 是一个软件包,包含监测系统性能及效率的一组工具,此工具对系统性能数据很有帮助,硬盘和网络吞吐数据等,这些数据的分析, 有利于判断系统运行是否正常; 它是提高系统运行效率, 安全运行服务器的助手; for i in `chkconfig --list|grep 3:on|grep -Ev "sysstat|sshd|rsyslog|crond|network"|awk \'{print $1}\'`;do chkconfig $i off;done chkconfig --list|grep 3:on crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off sysstat 0:off 1:on 2:on 3:on 4:on 5:on 6:off
CentOS 7.x
# systemctl 是管制服务的主要工具, 它整合了chkconfig 与 service ; # 查看服务是否为开机启动, 以防火墙为例, 服务后面可不加 .service systemctl is-enabled firewalld.service # 查看所有服务的开机启动状态 systemctl list-unit-files # 查看并过滤开机启动的所有服务 systemctl list-unit-files |grep enable auditd.service enabled # 安全审计; autovt@.service enabled # 登录终端相关;与/etc/systmd/logind.conf配置文件中 NAutoVTs = 的数值(开启的终端数量)有关,开启终端就是自动从autovt@.service模板实例化; chronyd.service enabled # 保持系统时钟与时钟服务器(NTP)同步; crond.service enabled # 定时任务; dbus-org.freedesktop.NetworkManager.service enabled # 桌面网卡; 关闭 dbus-org.freedesktop.nm-dispatcher.service enabled getty@.service enabled # tty控制台; irqbalance.service enabled # 优化系统中断分配,自动收集系统数据以分析使用模式,并依据系统负载状况将工作状态置于 Performance mode 或 Power-save mode; 处于Performance mode 时,irqbalance 会将中断尽可能均匀地分发给各个 CPU core,以充分利用 CPU 多核,提升性能,在机器需要高并发时,建议开始该服务。处于Power-save mode 时,irqbalance 会将中断集中分配给第一个 CPU,以保证其它空闲 CPU 的睡眠时间,降低能耗; kdump.service enabled # 内核崩溃信息捕获; lvm2-monitor.service enabled # 系统支持逻辑分区; microcode.service enabled # 处理器稳定性增强; NetworkManager-dispatcher.service enabled # 网卡守护进程; 关闭 NetworkManager.service enabled postfix.service enabled # 邮件服务; 关闭 rsyslog.service enabled # 日志服务; sshd.service enabled # ssh登录服务; systemd-readahead-collect.service enabled # 内核调用--预读取; systemd-readahead-drop.service enabled systemd-readahead-replay.service enabled tuned.service enabled # 系统调优工具;tuned 是服务端程序,用来监控和收集系统各个组件的数据,并依据数据提供的信息动态调整系统设置,达到动态优化系统的目的;tuned-adm 是客户端程序,用来和 tuned 打交道,用命令行的方式管理和配置 tuned,tuned-adm 提供了一些预先配置的优化方案可供直接使用 vgauthd.service enabled vmtoolsd.service enabled dm-event.socket enabled lvm2-lvmetad.socket enabled lvm2-lvmpolld.socket enabled default.target enabled # multi-user.target软链; multi-user.target enabled # 启动用户命令环境; remote-fs.target enabled # 集合远程文件挂载点; runlevel2.target enabled # 运行级别,用于兼容6的SysV; runlevel3.target enabled runlevel4.target enabled
更改系统文件句柄数及用户连接数
# ulimit 控制shell程序的资源; Linux系统默认打开文件描述的最大值为 1024;需要修改文件句柄数;全局所有用户修改使用/etc/security/limits.d/90-nproc.conf; 针对用户的修改/etc/security/limits.conf(* - nofile 65535 表示软硬hard/soft两者)
重新登录生效
vim /etc/security/limits.d/90-nproc.conf ... ... * soft nproc 10240 * hard nproc 10240 * soft nofile 65535 * hard nofile 65535 vim /etc/security/limits.conf ... ... tian soft nofile 20480 # ulimit命令参数简介;使用命令是当前终端临时修改; # 参 数: -H 设置硬件资源限制,是管理员所设下的限制. -S 设置软件资源限制,是管理员所设下的限制. -a 显示当前所有的资源限制. -u 进程数目:用户最多可启动的进程数目. -c size:设置core文件的最大值.单位:blocks -d size:设置程序数据段的最大值.单位:kbytes -f size:设置shell创建文件的最大值.单位:blocks -l size:设置在内存中锁定进程的最大值.单位:kbytes -m size:设置可以使用的常驻内存的最大值.单位:kbytes -n size:设置内核可以同时打开的文件描述符的最大值.单位:n -p size:设置管道缓冲区的最大值.单位:kbytes -s size:设置堆栈的最大值.单位:kbytes -t size:设置CPU使用时间的最大上限.单位:seconds -v size:设置虚拟内存的最大值.单位:kbytes # 全局所有用户修改还可以修改 /etc/profile, 在文件中添加ulimit命令;例如 vim /etc/profile ... ... ulimit -n 65535 ulimit -u 10240 ... ... 等等
锁定关键系统文件
# 锁定文件,可以空格分开多个同时写; chattr +a /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab # 解锁文件 chattr -a /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab # 查看文件是否锁定 lsattr /etc/passwd -----a-------e- /etc/passwd 或者 ----i--------e- /etc/passwd # chattr加锁解锁选项 +a +i -a -i 选项"i": 文件: 允许对文件删除, 改名; 不能添加修改删除文件中的数据; 目录: 允许修改目录下文件的数据; 不能建立和删除文件; 选项"a": 文件: 只能使用>>追加数据;不能删除也不能修改数据; 目录: 允许在目录中建立和修改文件,但不允许删除;
(可选) 修改系统语言为中文
CentOS 6.x
# 查看系统所有的语言环境 及 查看当前的系统语言环境 locale -a echo $LANG # 若没有中文语言包,安装中文包 yum groupinstall chinese-support # 临时生效 LANG="zh_CN.UTF-8" # 永久生效, 重启系统; vim /etc/sysconfig/i18n LANG="zh_CN.UTF-8" SYSFONT="latarcyrheb-sun16"
CentOS 7.x
# 查看系统所有的语言环境 及 查看当前的系统语言环境 locale -a echo $LANG # 若是没有中文语言包进行安装 yum -y install kde-l10n-Chinese # 临时修改,重启后恢复原来系统语言 LANG=zh_CN.UTF-8 # 永久修改, 重启生效 localectl set-locale LANG=zh_CN.UTF-8 # 使用命令直接更改 或者 vim /etc/locale.conf # LANG="en_US.UTF-8" 注释掉此系统语言 LANG="zh_CN.UTF-8" # 重新定义系统语言为中文
隐藏登录界面的系统信息
# 去掉系统登录是提示的系统信息(系统版本,内核版本等) vim /etc/issue CentOS release 6.5 (Final) Kernel \r on an \m # 将以上两行删除,写上你想展现的内容;例如 vim /etc/issue localtime: \d users: \u tty: \l # 此文件中\r等代表的内容 \d //本地时间的日期; \l //显示当前tty的名字及第几个tty; \m //显示硬件的架构(i386/i486/i586...); \n //显示主机的网络名称; \o //显示domain name; \r //当前内核的版本; \t //显示本地端时间的时间; \u //当前有几个用户在线; \s //当前系统的名称; \v //当前系统的版本;
服务器禁ping
# 查看服务器允许 ping 的状态 cat /proc/sys/net/ipv4/icmp_echo_ignore_all 0 # "0" 表示开启状态, 能ping通; # 临时禁 ping, echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all # 永久禁 ping, 修改配置文件sysctl.conf vim /etc/sysctl.conf ... ... net.ipv4.icmp_echo_ignore_all= 1 # 立即生效 sysctl -p
******************************************************************* 防火墙禁 ping *********************************************************************************************
# -*- 禁止ping设置 -*-
iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
/etc/init.d/iptables save
/etc/init.d/iptables restart
# 防火墙命令解释
-A:添加防火墙规则.
INPUT:入站规则.
-p icmp:指定包检查的协议为ICMP协议.
--icmp-type 8:指定ICMP类型为8.
-s:指定IP和掩码,“0/0”表示此规则针对所有IP和掩码.
-j:指定目标规则,即包匹配则应到做什么,"DROP"表示丢弃.
用户登录及历史命令
// 记录用户的登录与操作(操作日志记录 /tmp/dbasky/root/192.168.10.108\)
# vim /etc/profile
USER_IP=`who -u am i 2>/dev/null| awk \'{print $NF}\'|sed -e \'s/[()]//g\'` if [ "$USER_IP" = "" ] then USER_IP=`hostname` fi if [ ! -d /tmp/dbasky ] then mkdir /tmp/dbasky chmod 755 /tmp/dbasky fi if [ ! -d /tmp/dbasky/${LOGNAME} ] then mkdir /tmp/dbasky/${LOGNAME} chmod 300 /tmp/dbasky/${LOGNAME} fi export HISTSIZE=4096 DT=`date "+%Y-%m-%d_%H-%M-%S"` export HISTFILE="/tmp/dbasky/${LOGNAME}/${USER_IP}-dbasky.$DT" export HISTTIMEFORMAT="[%Y.%m.%d %H:%M:%S]" chmod 600 /tmp/dbasky/${LOGNAME}/*dbasky* 2>/dev/null