Linux安全加固--系统相关
一、系统相关
1、系统关键文件设置
1.1、设置文件初始权限
设置默认的umask值,增强安全性。
- [root@localhost ~]# umask
- 0022
/etc/profile最下面添加一行:
- [root@localhost ~]# vim /etc/profile
- umask 027
上面的设置,即新创建的文件属主拥有读写执行权限,同组用户拥有读和执行权限,其他用户无权限。
1.2、锁定关键文件
用chattr命令防止系统中的一些关键文件被修改
+i表示文件不允许新增、删除、修改、改名、设定链接关系等。
- [root@localhost ~]# chattr +i /etc/passwd
- [root@localhost ~]# chattr +i /etc/inittab
- [root@localhost ~]# chattr +i /etc/group
- [root@localhost ~]# chattr +i /etc/shadow
- [root@localhost ~]# chattr +i /etc/gshadow
如果需要修改的话,需要root用户通过chattr -i /etc/passwd来解锁。
1.3、禁止非root用户执行/etc/init.d/*的系统命令
- [root@localhost ~]# chmod -R 700 /etc/rc.d/init.d/*
仅仅root可以读,写,执行上述所有script file.
Centos7以后,只有自己安装的服务启动脚本会放这里,系统默认的服务启动脚本已经不放这里了。
恢复默认:
- [root@localhost ~]# chmod -R 755 /etc/rc.d/init.d/*
2、命令alias别名
2.1、命令别名
定义命令别名的作用:
1、简化一些经常使用又很长的命令。
2、设置别名变相提醒,防止误操作。
别名设置参考:https://www.jb51.net/article/143426.htm
2.2、改造rm
rm -rf命令非常容易产生误操作,很难恢复,建议设置别名。
2.2.1、方案一:(直接禁止rm)
将rm别名为一个字符串,提示用户不要使用rm,使用mv。
- [root@localhost ~]# alias rm='echo "do not use rm"'
当我们使用rm删除文件的时候就会有提示如下:
- [root@localhost ~]# rm -rf bb/test3
- do not use rm -rf bb/test3
- [root@localhost ~]#
当然了,直接使用alias定义别名只在当前环境有效,退出就没用了。要想永久有效,可以在/etc/profile或者用户家目录的.bashrc里面加入这一行。
- [root@localhost ~]# vim /etc/profile
- alias rm='echo "do not use rm"'
- [root@localhost ~]# source /etc/profile
注释root下的.bashrc里面的rm别名设置
- [root@localhost ~]# vim /root/.bashrc
- #alias rm='rm -i'
- alias cp='cp -i'
- alias mv='mv -i'
在定义了别名之后,还想使用rm的话,可以这样:
使用绝对路径:
- [root@localhost ~]# /usr/bin/rm bb/test3
- [root@localhost ~]# ls bb/
- [root@localhost ~]#
或者使用反斜杠\
- [root@localhost ~]# \rm -f aa/test2
2.2.2、方案二:自定义rm删除脚本(推荐)
参考:https://blog.csdn.net/liyunlong41/article/details/77102930
思路:所以很多人建议用alias将rm替换成mv,也就是设置一个自己的垃圾桶,在rm的时候将文件移动到垃圾桶中而不是直接删除了。这样就相当于有了备份。而这个垃圾桶可以crontab设置定时任务一周清除一次,通过这种方式就可以避免手残带来的损失。
2.2.2.1、建立回收站(默认隐藏):
可以单独在家目录下创建回收站:mkdir -p ~/.trash
- [root@localhost ~]# mkdir -p ~/.trash #创建一个目录作为回收站,这里使用的是用户家目录下的.trash目录
也可以单独指定一个目录作为回收站:
- [root@localhost ~]# mkdir -p /data/.trash
创建回收站,一定要注意磁盘分区大小,建议把回收站放到空间最大的那个分区。
2.2.2.2、定制trash脚本
删除脚本trash.sh
- [root@localhost ~]# vim /trunkout/shellscripts/trash.sh
- #!/bin/bash
- date=`date +%F` #当前日期
- #path="/data/.trash/"$date
- path="/data/.trash/" # 自定义回收站目录
- if [ ! -d $path ]; then
- mkdir -p $path #创建回收站目录
- fi
- str=$1 #第一个参数
- first_char=${str:0:1}
- if [ $first_char = '-' ];then #第一个参数是-f或者-rf,略过,直接shift到第二个参数
- shift
- fi
- while [ $# != 0 ]; #遍历所有的参数,mv到指定path
- do
- mv -f $1 $path
- shift
- done
- echo "Delete success. You can find the files in $path within 7 days."
清空回收站脚本cleartrash.sh
- [root@localhost ~]# vim /doubles/shellscript/cleartrash.sh
- #!/bin/bash
- path="/data/.trash/"
- read -p "clear trash files?[y/N]" confirm
- [ $confirm == 'y' ] || [ $confirm == 'Y' ] && /usr/bin/rm -rf $path/*
很多人可能会写一个找回删除文件的脚本,如下方式:
- mv -i ~/.trash/\$@ ./
这个方式,强烈不建议,因为它是把trash里面的所有文件移动到当前目录,如果要找回,自己去回收站单独找回即可。
2.2.2.3、定义命令别名:
- [root@localhost ~]# alias rm='bash /trunkout/shellscripts/trash.sh'
- [root@localhost ~]# alias cltrash='bash /trunkout/shellscripts/cleartrash.sh'
由于以上脚本都非常短,我选择直接把脚本内容跟命令别名都写进/etc/profile里面去。
- [root@localhost ~]# vim /etc/profile
- # trash
- trash()
- {
- date=`date +%F`
- #path="/data/.trash/"$date
- path="/data/.trash/" # 自定义回收站目录
- if [ ! -d $path ]; then
- mkdir -p $path # 不存在则创建
- fi
- str=$1
- first_char=${str:0:1}
- if [ $first_char = '-' ];then #第一个参数是-f或者-rf,略过,直接shift到第二个参数
- shift
- fi
- while [ $# != 0 ]; #遍历所有的参数,mv到指定path
- do
- mv -f $1 $path
- shift
- done
- echo "Delete success. You can find the files in $path within 7 days."
- }
- ClearTrash()
- {
- path="/data/.trash/"
- read -p "clear trash files?[y/N]" confirm
- [ $confirm == 'y' ] || [ $confirm == 'Y' ] && /usr/bin/rm -rf $path/*
- }
- alias rm=trash
- alias lstrash='ls /data/.trash/'
- alias cltrash=ClearTrash
设定定时任务,定时清理回收站:
- [root@localhost ~]# crontab -e
- 0 4 * * 1 /usr/bin/rm -rf /data/.trash/*
2.2.2.4、测试
能支持类似于rm -f test.c 、rm -rf dir、rm test.c、rm -f test*、rm -rf dir/*等删除命令,但是不支持参数分开写的比如 rm -f -r dir等。
文件别名:
3、防止误使用Ctrl+Alt+Del重启系统
centos6.x的系统中,
注释这一行:如下
- [root@localhost ~]# vim /etc/init/control-alt-delete.conf
- start on control-alt-delete
- # exec /sbin/shutdown -r now "Control-Alt-Delete pressed"
Centos7.x系统中:
修改ctrl-alt-del.target文件,注释掉如下行:
- [root@localhost ~]# vim /usr/lib/systemd/system/ctrl-alt-del.target
- #[Unit]
- #Description=Reboot
- #Documentation=man:systemd.special(7)
- #DefaultDependencies=no
- #Requires=systemd-reboot.service
- #After=systemd-reboot.service
- #AllowIsolate=yes
- #JobTimeoutSec=30min
- #JobTimeoutAction=reboot-force
- #[Install]
- #Alias=ctrl-alt-del.target
4、内核参数优化
4.1、内核参数解释
参考:https://www.cnblogs.com/bodhitree/p/5756719.html
https://blog.csdn.net/sinat_38015804/article/details/72675514
https://blog.csdn.net/Rebel_Yangke/article/details/60961764
sysctl命令参数:
-w 临时改变某个指定参数的值
-a 显示所有的系统参数,可使用grep来查看设置系统默认值和修改的值是否生效
-p 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载
- #【net】
- ######################## cat /proc/sys/net/ipv4/tcp_syncookies
- # 默认值:1
- # 作用:1是开启SYN Cookie功能,当出现SYN 等待队列溢出时,启用Cookies来处理,该功能可以防止部分SYN攻击
- net.ipv4.tcp_syncookies = 1
- ######################## cat /proc/sys/net/ipv4/ip_forward
- # 默认值:0
- # 作用:0表示关闭,1表示开启路由转发功能。NAT必须开启IP转发支持,把该值写1。
- # 默认建议关闭
- net.ipv4.ip_forward=0
- ######################## cat /proc/sys/net/ipv6/conf/all/disable_ipv6
- # 默认值:0
- # 作用:关闭ipv6
- net.ipv6.conf.all.disable_ipv6 = 1
- net.ipv6.conf.default.disable_ipv6 = 1
- # 禁用特定的网卡的ipv6
- net.ipv6.conf.ens33.disable_ipv6 = 1
- net.ipv6.conf.lo.disable_ipv6 = 1
- ############################# cat /proc/sys/net/ipv4/icmp_echo_ignore_all
- # 默认值:0
- # 作用:禁止ping
- net.ipv4.icmp_echo_ignore_all = 1
- ############################# cat /proc/sys/net/ipv4/tcp_slow_start_after_idle
- # 默认值:1
- # 作用:关闭tcp的连接传输的慢启动,一个tcp连接在空闲后不进入slow start阶段,即每次收发数据都直接使用高速通道
- net.ipv4.tcp_slow_start_after_idle = 0
- ############################# cat /proc/sys/net/ipv4/tcp_syn_retries
- # 默认值:6
- # 作用:对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。不应该大于255,默认值是6 ,对于大负载而物理通信良好的网络而言,这个值偏高,可修改为2.这个值仅仅是针对对外的连接,对进来的连接,是由tcp_retries1 决定的
- net.ipv4.tcp_syn_retries = 2
- ############################# cat /proc/sys/net/ipv4/tcp_synack_retries
- # 默认值:5
- # 作用:tcp_synack_retries 显示或设定 Linux 核心在回应 SYN 要求时会尝试多少次重新发送初始 SYN,ACK 封包后才决定放弃。这是三次握手 (threeway handshake) 的第二个步骤。即是说系统会尝试多少次去建立由远端启始的 TCP 连线。tcp_synack_retries 的值必须为正整数,并不能超过 255。因为每一次重新发送封包都会耗费约 30 至 40 秒去等待才决定尝试下一次重新发送或决定放弃。tcp_synack_retries 的缺省值为 5,即每一个连线要在约 180 秒 (3 分钟) 后才确定逾时。
- net.ipv4.tcp_synack_retries = 1
- ############################# cat /proc/sys/net/ipv4/tcp_retries2
- # 默认值:15
- # 作用:在丢弃激活(已建立通讯状况)的TCP连接之前﹐需要进行多少次重试。默认值为15,根据RTO的值来决定,相当于13-30分钟(RFC1122规定,必须大于100秒).(这个值根据目前的网络设置,可以适当地改小,我的网络内修改为了5)
- net.ipv4.tcp_retries2 = 5
- ############################# cat /proc/sys/net/ipv4/neigh/default/tcp_synack_retries
- # 默认值:60
- # 作用:ARP参数,检查一次相邻层记录的有效性的周期。当相邻层记录失效时,将在给它发送数据前,再解析一次。
- net.ipv4.neigh.default.gc_stale_time = 120
- net.ipv4.neigh.lo.gc_stale_time = 120
- net.ipv4.neigh.eth0.gc_stale_time = 120
- ############################ cat /proc/sys/net/ipv4/conf/all/rp_filter
- # 默认值:1
- # 作用:rp_filter(reverse-pathfiltering),反向过滤技术,系统在接收到一个IP包后,检查该IP是不是合乎要求,不合要求的IP包会被系统丢弃。该技术就称为rpfilter。
- 怎么样的包才算不合要求呢?例如:网卡1为默认路由,用户在网卡2上收到一个IP包,检查其IP为B。然后考查:对于B这个IP,在发送时应该用哪个网口,如果在不应该接收到该包的网口上接收到该IP包,例如网卡2,丢弃该包。
- net.ipv4.conf.all.rp_filter = 0
- net.ipv4.conf.default.rp_filter = 0
- net.ipv4.conf.lo.rp_filter = 0
- net.ipv4.conf.eth0.rp_filter = 0
- ############################ cat /proc/sys/net/ipv4/conf/all/arp_announce
- # 默认值:0
- # 作用:对网络接口上,本地IP地址的发出的ARP回应,作出相应级别的限制, 确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口
- # 0 - (默认) 在任意网络接口(eth0,eth1,lo)上的任何本地地址
- # 1 -尽量避免不在该网络接口子网段的本地地址做出arp回应. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果该来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.
- # 2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.
- net.ipv4.conf.all.arp_announce = 2
- net.ipv4.conf.default.arp_announce = 2
- net.ipv4.conf.lo.arp_announce = 2
- net.ipv4.conf.eth0.arp_announce = 2
- ######################## cat /proc/sys/net/ipv4/ip_local_port_range
- # 默认值:32768 61000
- # 作用:可用端口的范围,系统上的动态端口号范围。(表示用于向外连接的端口范围。缺省情况下很小:32768到61000 注意:这里不要将最低值设的太低,否则可能会占用掉正常的端口! )
- net.ipv4.ip_local_port_range = 20480 65535
- ######################## cat /proc/sys/net/ipv4/tcp_fin_timeout 82 # 默认值:60
- # 作用:TCP时间戳,表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
- # SERVER由于某种原因关闭连接,如keepalive超时,这样,作为主动关闭的SERVER一方就会进入 FIN_WAIT2状态,但TCP/IP协议栈有个问题,FIN_WAIT2状态是没有超时的(不象TIME_WAIT状态),所以如果CLIENT不关闭,这个FIN_WAIT_2状态将保持到系统重新启动,越来越多的FIN_WAIT_2状态会致使内核crash。
- net.ipv4.tcp_fin_timeout = 2
- ######################## cat /proc/sys/net/ipv4/tcp_timestamps 88 # 默认值:1
- # 作用:TCP时间戳,时间戳可以避免序列号的卷绕。一个1Gbps 的链路肯定会遇到以前用过的序列号。该文件表示是否启用以一种比超时重发更精确的方法(RFC 1323)来启用对 RTT 的计算;为了实现更好的性能应该启用这个选项。
- net.ipv4.tcp_timestamps = 1
- ######################## cat /proc/sys/net/ipv4/tcp_tw_recycle
- # 默认值:0
- # 作用:针对TIME-WAIT,不要开启。不少文章提到同时开启tcp_tw_recycle和tcp_tw_reuse,会带来C/S在NAT方面的异常
- # 个人接受的做法是,开启tcp_tw_reuse,增加ip_local_port_range的范围,减小tcp_max_tw_buckets和tcp_fin_timeout的值
- # 参考:http://ju.outofmemory.cn/entry/91121, http://www.cnblogs.com/lulu/p/4149312.html
- # 解释二:表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。在nat环境中,建议关闭
- tw_reuse,tw_recycle 必须在客户端和服务端timestamps 开启时才管用(默认打开)
- # 注:它用来快速回收TIME_WAIT连接,不过如果在NAT环境下会引发问题。现在很多公司都用LVS做负载均衡,通常是前面一台LVS,后面多台后端服务器,这其实就是NAT,当请求到达LVS后,它修改地址数据后便转发给后端服务器,但不会修改时间戳数据,对于后端服务器来说,请求的源地址就是LVS的地址,加上端口会复用,所以从后端服务器的角度看,原本不同客户端的请求经过LVS的转发,就可能会被认为是同一个连接,加之不同客户端的时间可能不一致,所以就会出现时间戳错乱的现象,于是后面的数据包就被丢弃了,具体的表现通常是是客户端明明发送的SYN,但服务端就是不响应ACK,大概意思是说TCP有一种行为,可以缓存每个连接最新的时间戳,后续请求中如果时间戳小于缓存的时间戳,即视为无效,相应的数据包会被丢弃。
- # http://blog.csdn.net/caianye/article/details/38540867
- # http://www.cnblogs.com/lulu/p/4149312.html
- # (除非得到技术专家的建议或要求﹐请不要随意修改这个值。)
- net.ipv4.tcp_tw_recycle = 0
- ######################## cat /proc/sys/net/ipv4/tcp_tw_reuse
- # 默认值:0
- # 作用:开启TIME-WAIT sockets重用,做为客户端可以启用(例如,作为nginx-proxy前端代理,要访问后端的服务)表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接(这个对快速重启动某些服务,而启动后提示端口已经被使用的情形非常有帮助)
- net.ipv4.tcp_tw_reuse = 1
- ######################## cat /proc/sys/net/ipv4/tcp_max_tw_buckets 111 # 默认值:4096
- # 作用:针对TIME-WAIT,配置其上限。如果降低这个值,可以显著的发现time-wait的数量减少,但系统日志中可能出现如下记录:
- # kernel: TCP: time wait bucket table overflow
- # 对应的,如果升高这个值,可以显著的发现time-wait的数量增加。
- # 综合考虑,保持默认值。
- net.ipv4.tcp_max_tw_buckets = 5000
- ######################## cat /proc/sys/net/ipv4/tcp_max_orphans 119 # 默认值:4096
- # 作用:系统所能处理不属于任何进程的TCP sockets最大数量。假如超过这个数量﹐那么不属于任何进程的连接会被立即reset,并同时显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS 攻击﹐千万不要依赖这个或是人为的降低这个限制。如果内存大更应该增加这个值。(这个值Redhat AS版本中设置为32768,但是很多防火墙修改的时候,建议该值修改为2000)
- net.ipv4.tcp_max_orphans = 32768
- ######################## cat /proc/sys/net/ipv4/tcp_max_syn_backlog
- # 默认值:1024
- # 作用:增大SYN队列的长度,容纳更多连接。对于那些依然还未获得客户端确认的连接请求﹐需要保存在队列中最大数目。对于超过 128Mb 内存的系统﹐默认值是 1024 ﹐低于 128Mb 的则为 128。如果服务器经常出现过载﹐可以尝试增加这个数字。警告﹗假如您将此值设为大于 1024﹐最好修改include/net/tcp.h里面的TCP_SYNQ_HSIZE﹐以保持TCP_SYNQ_HSIZE*16(SYN Flood攻击利用TCP协议散布握手的缺陷,伪造虚假源IP地址发送大量TCP-SYN半打开连接到目标系统,最终导致目标系统Socket队列资源耗尽而无法接受新的连接。为了应付这种攻击,现代Unix系统中普遍采用多连接队列处理的方式来缓冲(而不是解决)这种攻击,是用一个基本队列处理正常的完全连接应用(Connect()和Accept() ),是用另一个队列单独存放半打开连接。这种双队列处理方式和其他一些系统内核措施(例如Syn-Cookies/Caches)联合应用时,能够比较有效的缓解小规模的SYN Flood攻击(事实证明)
- # (为了抵御syn攻击,我们设置大一点,建议不要超过65535)
- net.ipv4.tcp_max_syn_backlog = 32000
- ######################## cat /proc/sys/net/ipv4/tcp_keepalive_intvl 130 # 默认值:75
- # 作用:探测消息未获得响应时,重发该消息的间隔时间(秒)。默认值为75秒。 (对于普通应用来说,这个值有一些偏大,可以根据需要改小.特别是web类服务器需要改小该值,15是个比较合适的值)
- net.ipv4.tcp_keepalive_intvl = 15
- ######################## cat /proc/sys/net/ipv4/tcp_keepalive_probes 135 # 默认值:9
- # 作用:探测失败后,最多尝试探测几次。TCP发送keepalive探测以确定该连接已经断开的次数。(注意:保持连接仅在SO_KEEPALIVE套接字选项被打开是才发送.次数默认不需要修改,当然根据情形也可以适当地缩短此值.设置为5比较合适)
- net.ipv4.tcp_keepalive_probes = 5
- ######################## cat /proc/sys/net/ipv4/tcp_keepalive_time 140 # 默认值:7200
- # 作用:间隔多久发送1次keepalive探测包。TCP发送keepalive探测消息的间隔时间(秒),用于确认TCP连接是否有效。防止两边建立连接但不发送数据的攻击。
- net.ipv4.tcp_keepalive_time = 600
- 以下两个参数需要打开防火墙才会存在:
- net.netfilter.nf_conntrack_tcp_timeout_established = 600
- net.netfilter.nf_conntrack_max = 65535
- 所处目录/proc/sys/net/ipv4/netfilter/
- ######################## cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established
- # 默认值:432000
- # 作用:设置 conntrack tcp 状态的超时时间,如果系统出现下述异常时要考虑调整:
- # ping: sendmsg: Operation not permitted
- # kernel: nf_conntrack: table full, dropping packet.
- # 参考:http://www.linuxidc.com/Linux/2012-11/75151.htm, http://blog.csdn.net/dog250/article/details/9318843
- # 注解:已建立的tcp连接的超时时间,默认432000,也就是5天。影响:这个值过大将导致一些可能已经不用的连接常驻于内存中,占用大量链接资源,从而可能导致NAT ip_conntrack: table full的问题。建议:对于NAT负载相对本机的 NAT表大小很紧张的时候,可能需要考虑缩小这个值,以尽早清除连接,保证有可用的连接资源;如果不紧张,不必修改
- net.netfilter.nf_conntrack_tcp_timeout_established = 600
- ######################## cat /proc/sys/net/netfilter/nf_conntrack_max
- # 默认值:31248
- # 作用:设置 conntrack 的上限,如果系统出现下述异常时要考虑调整:
- # ping: sendmsg: Operation not permitted
- # kernel: nf_conntrack: table full, dropping packet.
- # 参考:https://blog.yorkgu.me/2012/02/09/kernel-nf_conntrack-table-full-dropping-packet/, http://www.cnblogs.com/mydomain/archive/2013/05/19/3087153.html
- # 注解:系统支持的最大ipv4连接数,默认65536(事实上这也是理论最大值),同时这个值和你的内存大小有关,如果内存128M,这个值最大8192,1G以上内存这个值都是默认65536,这个值受/proc/sys/net/ipv4/ip_conntrack_max限制
- net.netfilter.nf_conntrack_max = 65535
- ######################## cat /proc/sys/net/core/netdev_max_backlog
- # 默认值:1000
- # 作用:网卡设备将请求放入队列的长度。每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目,对重负载服务器而言,该值需要调高一点。
- net.core.netdev_max_backlog = 65535
- ######################## cat /proc/sys/net/core/somaxconn
- # 默认值:128
- # 作用:已经成功建立连接的套接字将要进入队列的长度。定义了系统中每一个端口最大的监听队列的长度, 超过这个数量就会导致链接超时或者触发重传机制,这是个全局的参数,默认值为128, 限制了接收新 TCP 连接侦听队列的大小。对于一个经常处理新连接的高负载 web服务环境来说,默认的 128 太小了。大多数环境这个值建议增加到 1024 或者更多。 服务进程会自己限制侦听队列的大小(例如 sendmail(8) 或者 Apache),常常在它们的配置文件中有设置队列大小的选项。大的侦听队列对防止拒绝服务 DoS 攻击也会有所帮助。
- net.core.somaxconn = 16384
- ######################## cat /proc/sys/net/core/rmem_default
- # 默认值:212992
- # 作用:默认的TCP数据接收窗口大小(字节)
- net.core.rmem_default = 8388608
- ######################## cat /proc/sys/net/core/wmem_default
- # 默认值:212992
- # 作用:默认的TCP数据发送窗口大小(字节)
- net.core.wmem_default = 8388608
- ######################## cat /proc/sys/net/core/rmem_max
- # 默认值:212992
- # 作用:最大的TCP数据接收窗口大小(字节)
- net.core.rmem_max = 16777216
- ######################## cat /proc/sys/net/core/wmem_max
- # 默认值:212992
- # 作用:最大的TCP数据发送窗口大小(字节)
- net.core.wmem_max = 16777216
- ######################## cat /proc/sys/net/ipv4/tcp_mem
- # 默认值:21813 29084 43626
- # 作用:内存使用的下限 警戒值 上限。
- #low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。即低于此值没有内存压力。(理想情况下,这个值应与指定给 tcp_wmem 的第 2 个值相匹配 - 这第 2 个值表明,最大页面大小乘以最大并发请求数除以页大小 (131072 * 300 / 4096)。 )
- #pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。(理想情况下这个值应该是 TCP 可以使用的总缓冲区大小的最大值 (204800 * 300 / 4096)。 )
- #high:允许所有tcp sockets用于排队缓冲数据报的页面量。(如果超过这个值,TCP 连接将被拒绝,这就是为什么不要令其过于保守 (512000 * 300 / 4096) 的原因了。 在这种情况下,提供的价值很大,它能处理很多连接,是所预期的 2.5 倍;或者使现有连接能够传输 2.5 倍的数据。 我的网络里为192000 300000 732000)
- # 一般情况下这些值是在系统启动时根据系统内存数量计算得到的。
- net.ipv4.tcp_mem = 786432 1048576 1572864
- ######################## cat /proc/sys/net/ipv4/tcp_wmem
- # 默认值:4096 16384 4194304
- # 作用:socket发送缓冲区内存使用的下限 警戒值 上限。
- #min:为TCP socket预留用于发送缓冲的内存最小值。每个tcp socket都可以在建议以后都可以使用它。默认值为4096(4K)。
- #default:为TCP socket预留用于发送缓冲的内存数量,默认情况下该值会影响其它协议使用的net.core.wmem_default 值,(该值会被wmen_default覆盖)一般要低于net.core.wmem_default的值。默认值为16384(16K)。
- #max: 用于TCP socket发送缓冲的内存最大值。该值不会影响net.core.wmem_max,"静态"选择参数SO_SNDBUF则不受该值影响。默认值为131072(128K)。(对于服务器而言,增加这个参数的值对于发送数据很有帮助,在我的网络环境中,修改为了51200 131072 204800)(该值会被wmen_max覆盖)
- net.ipv4.tcp_wmem = 8192 131072 16777216
- ######################## cat /proc/sys/net/ipv4/tcp_rmem
- # 默认值:4096 87380 6291456
- # 作用:socket接收缓冲区内存使用的下限 警戒值 上限。与tcp_wmen类似,不过它表示的是为自动调优所使用的接收缓冲区的值
- net.ipv4.tcp_rmem = 32768 131072 16777216
- ####################################################################################################### cat /proc/sys/net/ipv4/tcp_thin_dupack
- # 默认值:0
- # 作用:收到dupACK时要去检查tcp stream是不是 thin ( less than 4 packets in flight) 。触发快速重传
- net.ipv4.tcp_thin_dupack = 1
- ######################## cat /proc/sys/net/ipv4/tcp_thin_linear_timeouts
- # 默认值:0
- # 作用:重传超时后要去检查tcp stream是不是 thin ( less than 4 packets in flight) 230 net.ipv4.tcp_thin_linear_timeouts = 1
- ######################## cat /proc/sys/net/unix/max_dgram_qlen
- # 默认值:10
- # 作用:UDP队列里数据报的最大个数。如果请求量很大,需要调整此参数。系统默认为10,可以设置为100或者更大。或者增加worker进程的数量,减少单个worker进程分配的请求量。
- net.unix.max_dgram_qlen = 30000
- ####################################################################################################### 针对lvs,关闭网卡LRO/GRO功能
- # 现在大多数网卡都具有LRO/GRO功能,即网卡收包时将同一流的小包合并成大包 (tcpdump抓包可以看到>MTU 1500bytes的数据包)交给 内核协议栈;LVS内核模块在处理>MTU的数据包时,会丢弃;
- # 因此,如果我们用LVS来传输大文件,很容易出现丢包,传输速度慢;
- # 解决方法,关闭LRO/GRO功能,命令:
- # ethtool -k eth0 查看LRO/GRO当前是否打开
- # ethtool -K eth0 lro off 关闭GRO(默认是关闭的)
- # ethtool -K eth0 gro off 关闭GRO
- 【kernel】
- ######################## cat /proc/sys/kernel/randomize_va_space
- # 默认值:2
- # 作用:内核的随机地址保护模式。Linux Kernel引入了地址空间布局随机化的概念,该概念的提出是出于安全考虑。试想如果堆栈空间的地址都是确定的,那么恶意代码就很容易
- 通过内存溢出的代码来访问堆栈空间的内容,地址空间布局随机化就是使得进程虚拟空间的布局(主要是各个部分的起始地址)位于随机的位置,以此来降低被攻击的可能性。在/proc/sys/kernel/randomize_va_space中的值如果为0则表示关闭所有的随机化,如果为1,表示打开mmap base、栈、VDSO页面随机化,如果为2则表示在1的基础上进一步打开堆地址随机化。在打开堆地址随机化之前,堆的起始位置是紧接着应用程序bss段之后的。
- #(为了安全,不建议更改)
- kernel.randomize_va_space = 2
- ######################## cat /proc/sys/kernel/panic
- # 默认值:0
- # 作用:内核panic时,1秒后自动重启。
- kernel.panic = 1
- ######################## cat /proc/sys/kernel/core_pattern
- # 默认值:|/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e
- # 作用:程序生成core时的文件名格式
- # %p - insert pid into filename 添加pid
- # %u - insert current uid into filename 添加当前uid
- # %g - insert current gid into filename 添加当前gid
- # %s - insert signal that caused the coredump into the filename 添加导致产生core的信号
- # %t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
- # %h - insert hostname where the coredump happened into filename 添加主机名
- # %e - insert coredumping executable name into filename 添加命令名
- # 格式如下:core.WorldSrv.1536975578.19309,可以添加路径。
- kernel.core_pattern = core.%e.%t.%p
- ######################## cat /proc/sys/kernel/sysrq
- # 默认值:16
- # 作用:是否启用sysrq功能。SysRq代表的是Magic System Request Key。开启了这个功能以后,只要内核没有挂掉,它就会响应你要求的任何操作。但是这需要内核支持(CONFIG_MAGIC_SYSRQ选项)。使用sysrq组合键是了解系统目前运行情况, 允许按住Alt + PrtSc键打印内核信息,除非是调试,一般要关闭此功能。
- kernel.sysrq = 0
- ######################## cat /proc/sys/kernel/msgmnb
- # 默认值:16384
- # 作用:每个消息队列的最大字节限制
- kernel.msgmnb = 65536
- ######################## cat /proc/sys/kernel/msgmax
- # 默认值:8192
- # 作用:从一个进程发送到另一个进程的消息的最大长度(bytes)。进程间的消息传递是在内核的内存中进行的,不会交换到磁盘上,所以如果增加该值,则将增加操作系统所使用的内存数量
- kernel.msgmax = 65536
- ######################## cat /proc/sys/kernel/shmmax
- # 默认值:18446744073692774399
- # 作用:表示内核所允许的最大共享内存段的大小(bytes)
- kernel.shmmax = 68719476736
- ######################### cat /proc/sys/kernel/shmall
- # 默认值:18446744073692774399
- # 作用:系统上可以使用的共享内存的总量(bytes)
- kernel.shmall = 4294967296
- 【vm】
- (以下vm值谨慎修改,容易引起系统异常,没把握建议不动。)
- ######################## cat /proc/sys/vm/min_free_kbytes
- # 默认值:45056
- # 作用:保留内存的最低值。该文件表示强制Linux VM最低保留多少空闲内存(Kbytes)。当可用内存低于这个参数时,系统开始回收cache内存,以释放内存,直到可用内存大于这个值。
- #对于线上128G的内存的机器,可以考虑将min设置为512M左右。因为,太大了,可能会导致内存的浪费;当然如果只有40G的物理机,更不要考虑把min设置超过1G了,这样会导致频繁的触发内存回收;具体优化也要根据业务来看。
- # 关键是在于调整内存的内核参数的时候! 调大的风险远大于调小的风险! 如果有人想将vm.min_free_kbytes 调大,千万要注意当前的水位,如果一旦调大vm.min_free_kbytes 立刻触发direct reclaim,可能会导致机器hang住,ping的通,ssh不上,影响业务!hang住的原因是当vm.min_free_kbytes 是512M的时候,此时 free只有1G,此时正常运行,此时如果调大vm.min_free_kbytes 到5G,将会direct reclaim失败。
- (谨慎,修改不当容易宕机,不建议修改此值)
- vm.min_free_kbytes=67584
- ######################## cat /proc/sys/vm/panic_on_oom
- # 默认值:0
- # 作用:发生oom时,自动转换为panic。
- #默认为0开启 为1时表示关闭此功能 为2表示一定触发panic
- #等于0时,表示当内存耗尽时,内核会触发OOM killer杀掉最耗内存的进程。
- #当OOM Killer被启动时,通过观察进程自动计算得出各当前进程的得分 /proc/<PID>/oom_score,分值越高越容易被kill掉。
- vm.panic_on_oom=1
- ######################## cat /proc/sys/vm/swappiness
- # 默认值:30
- # 作用:数值(0-100)越高,越可能发生swap交换。swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。也就是说,如果此值为30,你的内存在使用到100-30=70%的时候,就开始出现有交换分区的使用。大家知道,内存的速度会比磁盘快很多,这样子会加大系统io,同时造的成大量页的换进换出,严重影响系统的性能,所以我们在操作系统层面,要尽可能使用内存,对该参数进行调整。
- vm.swappiness=0
- 【fs】
- ######################## cat /proc/sys/fs/inotify/max_user_watches
- # 默认值:8192
- # 作用:inotify的watch数量。表示同一用户同时可以添加的watch数目(watch一般是针对目录,决定了同时同一用户可以监控的目录数量)。太小容易引起too many open files错误。按照自己监控的文件数量级进行调整。(建议值:65536或者8192000)
- fs.inotify.max_user_watches=8192000
- ######################## cat /proc/sys/fs/aio-max-nr
- # 默认值:65536
- # 作用:aio最大值。此参数限制并发未完成的异步请求数目,应该设置避免I/O子系统故障。
- fs.aio-max-nr=1048576
- ######################## cat /proc/sys/fs/file-max
- # 默认值:96124
- # 作用:文件描述符的最大值。max-file 表示系统级别的能够打开的文件句柄的数量。是对整个系统的限制,并不是针对用户的。ulimit -n 控制进程级别能够打开的文件句柄的数量。提供对shell及其启动的进程的可用文件句柄的控制。这是进程级别的。对于服务器来说,file-max和ulimit都需要设置,否则会出现文件描述符耗尽的问题。 ulimit -n 65535。
- fs.file-max = 1048575
- 内核参数解释
- 内核参数解释
内核参数解释
4.2、优化项整理
- [root@localhost ~]# vim /etc/sysctl.conf
末尾追加如下参数:
- # 关闭ip路由转发
- net.ipv4.ip_forward = 0
- # 关闭ipv6
- net.ipv6.conf.all.disable_ipv6 = 1
- net.ipv6.conf.default.disable_ipv6 = 1
- net.ipv6.conf.lo.disable_ipv6 = 1
- # 禁止ping
- net.ipv4.icmp_echo_ignore_all = 1
- # 关闭tcp慢启动
- net.ipv4.tcp_slow_start_after_idle = 0
- # ARP缓存存活时间
- net.ipv4.neigh.default.gc_stale_time = 120
- net.ipv4.neigh.lo.gc_stale_time = 120
- # 反向过滤
- net.ipv4.conf.all.rp_filter=0
- net.ipv4.conf.default.rp_filter=0
- # ARP回应级别
- net.ipv4.conf.default.arp_announce = 2
- net.ipv4.conf.lo.arp_announce=2
- net.ipv4.conf.all.arp_announce=2
- # SYN设置(防DDOS)
- # 启用cookie,防syn攻击
- net.ipv4.tcp_syncookies = 1
- # syn重传设置
- net.ipv4.tcp_syn_retries = 2
- net.ipv4.tcp_synack_retries = 2
- # 加大syn队列,缓解syn洪水攻击
- net.ipv4.tcp_max_syn_backlog = 32000
- # TCP/UDP协议允许使用的本地端口号(使用默认值,有需要再修改)
- # net.ipv4.ip_local_port_range = 15000 65000
- # 禁用所有IP源路由
- net.ipv4.conf.default.accept_source_route = 0
- ### 应对timewait过高,tcp连接断开设置
- # 启用时间戳,避免序列号卷绕
- net.ipv4.tcp_timestamps = 1
- # 是否启用timewait快速回收,保持默认
- # net.ipv4.tcp_tw_recycle = 0
- # 开启timewait sockets重用
- net.ipv4.tcp_tw_reuse = 1
- # 减少处于FIN-WAIT-2连接状态的时间,使系统可以处理更多的连接
- net.ipv4.tcp_fin_timeout = 2
- # 设置timewait值
- net.ipv4.tcp_max_tw_buckets = 5000
- ## keepalive设置
- # 间隔多久,发送一次keepalive探测
- net.ipv4.tcp_keepalive_time = 600
- # 探测失败后,间隔几秒发送探测
- net.ipv4.tcp_keepalive_intvl = 15
- # 探测失败,最多尝试几次
- net.ipv4.tcp_keepalive_probes = 5
- # 系统能处理的不属于任何进程的socket数量(建议>32768,可以抵御ddos)
- net.ipv4.tcp_max_orphans = 3276800
- # 每个端口可以监听的soket队列最大长度
- net.core.somaxconn = 262144
- # 网络接口比内核快时,允许队列的最大长度
- net.core.netdev_max_backlog = 262144
- ## TCP窗口
- net.core.rmem_default = 8388608
- net.core.wmem_default = 8388608
- net.core.rmem_max = 16777216
- net.core.wmem_max = 16777216
- # 支持更大的TCP窗口. 如果TCP窗口最大超过65535(64K), 必须设置该数值为1
- net.ipv4.tcp_window_scaling = 1
- # TCP缓冲区(根据需要设置)
- # net.ipv4.tcp_wmem = 8192 131072 16777216
- # net.ipv4.tcp_rmem = 32768 131072 16777216
- # net.ipv4.tcp_mem = 786432 1048576 1572864
- ## kernel设置
- # 控制core文件名是否添加pid作为扩展
- kernel.core_uses_pid = 1
- # 修改core文件名格式
- kernel.core_pattern = core.%e.%t.%p
- # 关闭Magic System Request Key调试
- kernel.sysrq = 0
- # 每个消息队列最大字节限制
- kernel.msgmnb = 65536
- # 整个系统最大消息队列数量限制
- kernel.msgmax = 65536
- # 单个共享内存段大小限制
- kernel.shmmax = 68719476736
- # 系统所有共享内存总量
- kernel.shmall = 4294967296
- ## vm设置
- # 最大限度使用物理内存
- vm.swappiness = 0
- ## fs设置
- # inotify监控的目录数量
- fs.inotify.max_user_watches=8192000
- # aio最大值,避免i/o异常
- fs.aio-max-nr=1048576
- # 系统文件描述符限制
- fs.file-max = 1048575
刷新配置,立即生效
- [root@localhost ~]# sysctl -p
4.3、修改系统文件描述符限制
修改文件描述符限制,可以避免因为这个值太小而引起的Too many open files 的错误。
4.3.1、用户级的文件描述符
查看LINUX默认的文件描述符:
- [root@localhost ~]# ulimit -n
- 1024
- [root@localhost ~]#
用命令修改。该值要小于系统最大限制file-max
- [root@localhost ~]# ulimit -HSn 65536
- [root@localhost ~]# ulimit -n
- 65536
- [root@localhost ~]#
但这个变更只对当前的session有效当断开连接重新连接后更改就失效了
如果想永久变更需要修改/etc/security/limits.conf 文件
- [root@localhost ~]# vim /etc/security/limits.conf
- # 追加下面几行
- root soft nofile 65535
- root hard nofile 65535
- * soft nofile 65535
- * hard nofile 65535
保存退出后重新登录,其最大文件描述符已经被永久更改了。
这只是修改用户级的最大文件描述符限制,也就是说每一个用户登录后执行的程序占用文件描述符的总数不能超过这个限制。
4.3.2、系统级的文件描述符
查看当前系统文件描述符:
- [root@localhost ~]# sysctl -a|grep file-max
- fs.file-max = 387188
或者:
- [root@localhost ~]# cat /proc/sys/fs/file-max
- 387188
它是限制所有用户打开文件描述符的总和,可以通过修改内核参数来更改该限制:
- [root@localhost ~]# sysctl -w fs.file-max=1048575
或者:
- [root@localhost ~]# echo "1048575" > /proc/sys/fs/file-max
两者作用是相同的,前者改内核参数,后者直接作用于内核参数在虚拟文件系统(procfs, psuedo file system)上对应的文件而已。
使用sysctl命令更改也是临时的,如果想永久更改需要在/etc/sysctl.conf添加
- [root@localhost ~]# vim /etc/sysctl.conf
- fs.file-max=1048575
保存退出后使用sysctl -p 命令使其生效。
- [root@localhost ~]# sysctl -p
与file-max参数相对应的还有file-nr,这个参数是只读的,可以查看当前文件描述符的使用情况。
- [root@localhost ~]# sysctl -a|grep file-nr
- fs.file-nr = 1408 0 1048575
5、Yum源配置(ECS可不设置)
5.1、修改Yum源为国内镜像
有时候CentOS默认的yum源不一定是国内镜像,导致yum在线安装及更新速度不是很理想。这时候需要将yum源设置为国内镜像站点。国内主要开源的开源镜像站点应该是网易和阿里云了。这里我们选择阿里云的。
备份原有配置:
- [root@localhost ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载阿里云镜像配置(针对自己系统下载对应的)
- [root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
清空缓存
- [root@localhost ~]# yum clean all
重新生成缓存,它会选择最快的源。
- [root@localhost ~]# yum makecache
更新yum
- [root@localhost ~]# yum -y update
可以看到源地址已经变成阿里云的了,等他自己更新完毕,下次yum就是使用阿里云的源了。
注意:
1、如果yum makecache的时候,出现以下错误:
[Errno 14] HTTPS Error 404 - Not Found
[Errno 14] curl#7 - "Failed connect to ftp.yzu.edu.tw:443; Connection refused"
[Errno 12] Timeout on
Trying other mirror.
是本地仓库缓存问题。
- [root@localhost ~]# yum clean all
- [root@localhost ~]# rpm --rebuilddb
- [root@localhost ~]# yum makecache
清除缓存,重建本地仓库,然后再重新生成缓存就好了。
5.2、搭建本地Yum源
参考:https://www.cnblogs.com/nidey/p/6200685.html
有的时候,我们的环境可能是在局域网里面,没办法使用网上的yum源,那么我们可以自己搭建一个本地/局域网的yum源。
5.2.1、查看当前系统版本
- [root@localhost ~]# cat /etc/redhat-release
- CentOS Linux release 7.3.1611 (Core)
- [root@localhost ~]#
可以看到,我们的系统是CentOS 7.3,我们等下也要准备一个CentOS 7.x的ISO镜像
5.2.2、挂载ISO镜像
下载一个ISO镜像CentOS-7-x86_64-DVD-1611.iso
- [root@localhost ~]# mkdir /mnt/yum-iso
- [root@localhost ~]# mount /dev/cdrom /mnt/yum-iso/
- mount: /dev/sr0 is write-protected, mounting read-only
为了避免影响ISO镜像本身,我们将其中的内容拷贝出来。
- [root@localhost ~]# mkdir /yum/
- [root@localhost ~]# cp -a /mnt/yum-iso/ /yum/
- [root@localhost ~]# ll /yum/
- total 0
- drwxr-xr-x. 8 root root 254 Dec 5 2016 yum-iso
- [root@localhost ~]# ll /yum/yum-iso/
- total 308
- -rw-r--r--. 1 root root 14 Dec 5 2016 CentOS_BuildTag
- drwxr-xr-x. 3 root root 35 Dec 5 2016 EFI
- -rw-r--r--. 1 root root 215 Dec 10 2015 EULA
- -rw-r--r--. 1 root root 18009 Dec 10 2015 GPL
- drwxr-xr-x. 3 root root 57 Dec 5 2016 images
- drwxr-xr-x. 2 root root 198 Dec 5 2016 isolinux
- drwxr-xr-x. 2 root root 43 Dec 5 2016 LiveOS
- drwxrwxr-x. 2 root root 212992 Dec 5 2016 Packages
- drwxrwxr-x. 2 root root 4096 Dec 5 2016 repodata
- -rw-r--r--. 1 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-7
- -rw-r--r--. 1 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-Testing-7
- -r--r--r--. 1 root root 2883 Dec 5 2016 TRANS.TBL
- [root@localhost ~]#
5.2.3、备份移除其它镜像源
- [root@localhost ~]# cd /etc/yum.repos.d/
- [root@localhost yum.repos.d]# mkdir bak
- [root@localhost yum.repos.d]# mv * ./bak/
- mv: cannot move ‘bak’ to a subdirectory of itself, ‘./bak/bak’
- [root@localhost yum.repos.d]# ls
- bak
- [root@localhost yum.repos.d]#
5.2.4、编辑本地yum源local.repo
- [root@localhost yum.repos.d]# vim local.repo
- [local]
- name=local-media
- baseurl=file:///yum/yum-iso/
- gpgcheck=1
- enabled=1
- gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
5.2.5、清除缓存
- [root@localhost yum.repos.d]# yum clean all
- [root@localhost yum.repos.d]# yum makecache
5.2.6、测试:
接下来就可以直接使用本地yum来安装软件了
6、时钟同步(ECS可不设置)
6.1、时间查看
查看系统当前时间,HKT表示香港时区
- [root@localhost ~]# date
- Thu Sep 27 18:30:53 HKT 2018
顺便查看时区,+800表示东8区
- [root@localhost ~]# date -R
- Thu, 27 Sep 2018 18:30:57 +0800
查看bios时间
- [root@localhost ~]# hwclock
- Fri 28 Sep 2018 03:29:34 AM HKT -0.793109 seconds
查看时区
- [root@localhost ~]# timedatectl
- Local time: Thu 2018-09-27 19:32:14 HKT
- Universal time: Thu 2018-09-27 11:32:14 UTC
- RTC time: Thu 2018-09-27 19:31:51
- Time zone: Asia/Hong_Kong (HKT, +0800)
- NTP enabled: n/a
- NTP synchronized: no
- RTC in local TZ: no
- DST active: n/a
或者
- [root@localhost ~]# date +"%Z %z"
- HKT +0800
# %Z是字符时区,%z是数字时区
Centos6.x可以这样看时区
- [root@localhost ~]# cat /etc/timezone
- Asia/Shanghai
看日历
- [root@localhost ~]# cal
- September 2018
- Su Mo Tu We Th Fr Sa
- 1
- 2 3 4 5 6 7 8
- 9 10 11 12 13 14 15
- 16 17 18 19 20 21 22
- 23 24 25 26 27 28 29
- 30
- [root@localhost ~]#
6.2、手动修改时间
6.2.1、使用date修改系统时间
(手动修改会有一点误差)
修改系统时间为20:00:00
- [root@localhost ~]# date
- Thu Sep 27 19:42:50 HKT 2018
- [root@localhost ~]# date -s 20:00:00
- Thu Sep 27 20:00:00 HKT 2018
修改系统时间为2018年9月28日
- [root@localhost ~]# date -s 09/28/2018
- Fri Sep 28 00:00:00 HKT 2018
修改系统时间为2018年9月28日20:00:00
- [root@localhost ~]# date -s "2018-09-28 20:00:00"
- Fri Sep 28 20:00:00 HKT 2018
6.2.2、修改硬件时间
系统启动的时候,会从BIOS里面读取时间,所以硬件时间是个很重要的依据。
- [root@localhost ~]# hwclock -w
- [root@localhost ~]# hwclock
- Fri 28 Sep 2018 08:02:23 PM HKT -0.991277 seconds
命令hwclock -w是将系统当前时间写入bios。
6.2.3、修改时区
如果服务器是为美国那边的用户服务的,那么可能就需要将时区改为美国东部那边。美国东部时区为西五区。根据需要设置。中国是东八区。
查看时区文件
- [root@localhost ~]# ll /etc/localtime
- lrwxrwxrwx. 1 root root 36 Jul 26 2017 /etc/localtime -> ../usr/share/zoneinfo/Asia/Hong_Kong
方法一(修改ln指向)
这是一个链接文件,不建议直接cp覆盖,建议也用ln修改指向。
- [root@localhost ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- [root@localhost ~]# ll /etc/localtime
- lrwxrwxrwx 1 root root 33 Sep 28 20:11 /etc/localtime -> /usr/share/zoneinfo/Asia/Shanghai
方法二(timedatectl修改,推荐)
- [root@localhost ~]# timedatectl set-timezone Asia/Hong_Kong
- [root@localhost ~]# timedatectl
- Local time: Fri 2018-09-28 20:13:45 HKT
- Universal time: Fri 2018-09-28 12:13:45 UTC
- RTC time: Fri 2018-09-28 12:13:45
- Time zone: Asia/Hong_Kong (HKT, +0800)
- NTP enabled: n/a
- NTP synchronized: no
- RTC in local TZ: no
- DST active: n/a
- [root@localhost ~]# ll /etc/localtime
- lrwxrwxrwx 1 root root 36 Sep 28 20:13 /etc/localtime -> ../usr/share/zoneinfo/Asia/Hong_Kong
方法三(tzselect选择,不建议)
Tzselect只是设置TZ变量的值。这是设置时区为台北的时区。
- [root@localhost ~]# tzselect
- Please identify a location so that time zone rules can be set correctly.
- Please select a continent or ocean.
- 1) Africa
- 2) Americas
- 3) Antarctica
- 4) Arctic Ocean
- 5) Asia
- 6) Atlantic Ocean
- 7) Australia
- 8) Europe
- 9) Indian Ocean
- 10) Pacific Ocean
- 11) none - I want to specify the time zone using the Posix TZ format.
- #? 5
- Please select a country.
- 1) Afghanistan 18) Israel 35) Palestine
- 2) Armenia 19) Japan 36) Philippines
- 3) Azerbaijan 20) Jordan 37) Qatar
- 4) Bahrain 21) Kazakhstan 38) Russia
- 5) Bangladesh 22) Korea (North) 39) Saudi Arabia
- 6) Bhutan 23) Korea (South) 40) Singapore
- 7) Brunei 24) Kuwait 41) Sri Lanka
- 8) Cambodia 25) Kyrgyzstan 42) Syria
- 9) China 26) Laos 43) Taiwan
- 10) Cyprus 27) Lebanon 44) Tajikistan
- 11) East Timor 28) Macau 45) Thailand
- 12) Georgia 29) Malaysia 46) Turkmenistan
- 13) Hong Kong 30) Mongolia 47) United Arab Emirates
- 14) India 31) Myanmar (Burma) 48) Uzbekistan
- 15) Indonesia 32) Nepal 49) Vietnam
- 16) Iran 33) Oman 50) Yemen
- 17) Iraq 34) Pakistan
- #? 43
- The following information has been given:
- Taiwan
- Therefore TZ='Asia/Taipei' will be used.
- Local time is now: Fri Sep 28 20:16:13 CST 2018.
- Universal Time is now: Fri Sep 28 12:16:13 UTC 2018.
- Is the above information OK?
- 1) Yes
- 2) No
- #? 1
- You can make this change permanent for yourself by appending the line
- TZ='Asia/Taipei'; export TZ
- to the file '.profile' in your home directory; then log out and log in again.
- Here is that TZ value again, this time on standard output so that you
- can use the /bin/tzselect command in shell scripts:
- Asia/Taipei
- [root@localhost ~]# ll /etc/localtime
- lrwxrwxrwx 1 root root 36 Sep 28 20:13 /etc/localtime -> ../usr/share/zoneinfo/Asia/Hong_Kong
- [root@localhost ~]# TZ='Asia/Taipei'; export TZ
发现系统时区localtime等并没有变,只是$TZ值变了。
退出重新登录, 发现时间变了,而且TZ值也变了,但是timedatectl与/etc/localetime并没有改变。
6.3、配置时间同步
手动设置时间有误差,建议设置时间自动同步。
6.3.1、设置时区
首先,必须保证服务器上的时区是正确的。可以根据6.2上面的设置时区。
6.3.2、用ntpdate从时间服务器更新时间
使用ntpdate是进行断点更新,适用于新购买的服务器。如果服务器上已有程序在运行,并且非常依赖时间,不建议用ntpdate修改。
- [root@localhost doubles]# yum install ntpdate -y
- [root@localhost doubles]# date #(当前时间之前手动改过,不准的)
- 2018年 09月 28日 星期五 21:07:39 HKT
- [root@localhost doubles]# ntpdate ntp1.aliyun.com
- 27 Sep 20:54:38 ntpdate[109231]: step time server 120.25.115.20 offset -87263.329116 sec
- [root@localhost doubles]# cd
- [root@localhost ~]# date # (与服务器上时间同步后,时间正确)
- 2018年 09月 27日 星期四 20:54:45 HKT
- [root@localhost ~]#
- 加入计划任务,定时自动同步
- [root@localhost ~]# crontab -e
- */10 * * * * ntpdate ntp1.aliyun.com
ntp常用服务器有:
中国国家授时中心:210.72.145.44
NTP服务器(上海) :ntp.api.bz
美国:time.nist.gov
复旦:ntp.fudan.edu.cn
微软公司授时主机(美国) :time.windows.com
台警大授时中心(台湾):asia.pool.ntp.org
阿里云服务器:ntp1.aliyun.com
6.3.3、搭建ntp时间服务器
ntpd是逐渐的调整时间。已经运行的业务建议用ntpd去调整时间。
- [root@localhost doubles]# systemctl list-unit-files|grep ntp
- [root@localhost doubles]# yum install ntpd -y
修改配置(可参考ecs的ntp配置。)
- [root@localhost ~]# vim /etc/ntp.conf
- server ntp1.aliyun.com iburst
- # 允许内网中其他机器同步时间
- restrict 192.168.188.0 mask 255.255.255.0 nomodify notrap
- # local clock
- server 127.127.1.0
- fudge 127.127.1.0 stratum 10
nomodify 客户端不能修改服务器时间,但是可以从服务器获取时间
notrap 客户端不能使用trap(远端事件登录功能remote event logging)
noquery 其他客户端不能从本机获取时间
server后面加prefer表示优先
默认不允许查询,不允许修改。如果需要放开作为源给其他服务器同步,则可以放开restrict权限。Server优先级默认从上到下,可以把不需要的server注释掉。
配置完就启动ntpd服务
- [root@localhost ~]# systemctl start ntpd
服务器启动后,ntp就会自动去同步时间。
加入开机启动项
- [root@localhost ~]# systemctl enable ntpd
- Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.
查看ntp进程
- [root@localhost ~]# netstat -anplut|grep ntpd
- udp 0 0 192.168.188.128:123 0.0.0.0:* 109969/ntpd
- udp 0 0 127.0.0.1:123 0.0.0.0:* 109969/ntpd
- udp 0 0 0.0.0.0:123 0.0.0.0:* 109969/ntpd
- udp6 0 0 fe80::20c:29ff:fe02:123 :::* 109969/ntpd
- udp6 0 0 ::1:123 :::* 109969/ntpd
- udp6 0 0 :::123 :::* 109969/ntpd
- [root@localhost ~]#
确保本机123端口在防火墙是放开的,否则无法同步。
- [root@localhost ~]# /sbin/iptables -I INPUT -p udp --dport 123 -j ACCEPT
查看本ntpd服务器与上游服务器的连接状态。
- [root@localhost ~]# ntpq -pn
- remote refid st t when poll reach delay offset jitter
- ==============================================================================
- *193.228.143.23 77.40.226.114 2 u 32 64 377 312.107 -46.633 67.015
- +209.97.168.88 255.254.0.31 2 u 28 64 373 352.398 -35.452 14.016
- +108.59.2.24 130.133.1.10 2 u 30 64 367 249.543 -23.319 37.869
- -193.228.143.24 194.58.202.148 2 u 28 64 371 372.893 -2.522 20.685
- -120.25.115.20 10.137.53.7 2 u 25 64 377 7.256 -23.520 10.701
- [root@localhost ~]#
查看与上游服务器连接状态:
- [root@localhost ~]# ntpstat
- synchronised to NTP server (209.97.168.88) at stratum 3 # 表示在第三层
- time correct to within 1209 ms
- polling server every 64 s # 下次更新时间
- [root@localhost ~]#
remote:即NTP主机的IP或主机名称。注意最左边的符号,如果由“+”则代表目前正在作用钟的上层NTP,如果是“*”则表示也有连上线,不过是作为次要联机的NTP主机。
refid:参考的上一层NTP主机的地址
st:即stratum阶层
when:几秒前曾做过时间同步更新的操作
poll:下次更新在几秒之后
reach:已经向上层NTP服务器要求更新的次数
delay:网络传输过程钟延迟的时间
offset:时间补偿的结果
jitter:Linux系统时间与BIOS硬件时间的差异时间
/etc/ntp/step-tickers是用于ntpdate同步时会查找的上源服务器,可以不设置,以ntp.conf为准。
要注意的是,ntpd 有一个自我保护设置:如果本机与上源时间相差太大(比如1000秒),ntpd 不运行。所以新设置的时间服务器一定要先ntpdate 从上源取得时间初值。然后启动ntpd 服务。
在本机服务器192.168.188.128上搭好ntp服务器后,它就可以自动去上游服务器同步时间,前提是时间差别不能太大,如果太大的话,需要用ntpdate校正。
客户端也可以去这台ntp服务器取时间
在另一台机器192.168.188.129
- [root@localhost doubles]# ntpdate 192.168.188.128
- 27 Sep 23:34:24 ntpdate[52393]: step time server 192.168.188.128 offset -28835.317639 sec
- [root@localhost ~]# crontab -e
- */10 * * * * ntpdate 192.168.188.128
同步硬件时间:
ntp服务,默认只会同步系统时间。如果想要让ntp同时同步硬件时间,可以设置/etc/sysconfig/ntpd文件,在/etc/sysconfig/ntpd文件中,添加 SYNC_HWCLOCK=yes 这样,就可以让硬件时间与系统时间一起同步。
#允许BIOS与系统时间同步,也可以通过hwclock -w 命令
SYNC_HWCLOCK=yes
Ntpd与ntpdate的区别:
1、ntpdate是立即调整当前时间,立即生效,容易产生时间的跃变,调整不当程序容易混乱。
2、Ntpd是进行时钟的校准,是平滑的,一点点的校准,往往需要3-4min,需要立即启动的可能也会有问题。
3、一般开机的时候才会用ntpdate去调整时间,其余都是用ntpd去同步的。
7、系统字符集设置(可不设置)
Linux默认字符集是英文,如果想要显示中文的话,就需要修改字符集。CentOS6.x字符集设置是修改/etc/sysconfig/i18n,CentOS7.x字符集设置是修改/etc/locale.conf。
查看系统当前字符集设置:
- [root@localhost ~]# locale
- LANG=en_US.UTF-8
- LC_CTYPE="en_US.UTF-8"
- LC_NUMERIC="en_US.UTF-8"
- LC_TIME="en_US.UTF-8"
- LC_COLLATE="en_US.UTF-8"
- LC_MONETARY="en_US.UTF-8"
- LC_MESSAGES="en_US.UTF-8"
- LC_PAPER="en_US.UTF-8"
- LC_NAME="en_US.UTF-8"
- LC_ADDRESS="en_US.UTF-8"
- LC_TELEPHONE="en_US.UTF-8"
- LC_MEASUREMENT="en_US.UTF-8"
- LC_IDENTIFICATION="en_US.UTF-8"
- LC_ALL=
- [root@localhost ~]#
修改字符集:
临时修改字符集:
- [root@localhost ~]# LANG="zh_CN.UTF-8";export=LANG
永久修改字符集:
- [root@localhost ~]# vim /etc/locale.conf # (CentOS6.x是修改/etc/sysconfig/i18n)
- #LANG="en_US.UTF-8"
- LANG="zh_CN.UTF-8"
- SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
- SYSFONT="latarcyrheb-sun16"
Source配置使立即生效
- [root@localhost ~]# source /etc/locale.conf
Xshell终端也要设置相应的字符集
至此,系统字符集设置完毕。
Linux安全加固--系统相关的更多相关文章
- Linux sysinfo获取系统相关信息
Linux中,可以用sysinfo来获取系统相关信息. #include <stdio.h> #include <stdlib.h> #include <errno.h& ...
- CentOS Ubantu linux中实用系统相关常用命令
系统信息相关命令 本节内容主要是为了方便通过远程终端维护服务器时,查看服务器上当前 系统日期和时间 / 磁盘空间占用情况 / 程序执行情况 本小结学习的终端命令基本都是查询命令,通过这些命令对系统资源 ...
- Linux基础知识第八讲,系统相关操作命令
目录 Linux基础知识第八讲,系统相关操作命令 一丶简介命令 2.磁盘信息查看. 3.系统进程 Linux基础知识第八讲,系统相关操作命令 一丶简介命令 时间和日期 date cal 磁盘和目录空间 ...
- Linux下使用fstatfs/statfs查询系统相关信息
Linux下使用fstatfs/statfs查询系统相关信息 1. 功能 #include < sys/statfs.h > int statfs(const char *path, ...
- 深度剖析Linux与Windows系统的区别
当我们每个人接触Linux之前,应该先接触的都是windows吧?但我们一般接触Linux后,习惯linux的管理和使用方法后,我们再回过头再来使用windows的时候,内心其实是拒绝的.我们会觉得图 ...
- 深度剖析Linux与Windows系统的区别,新手必读!
当我们每个人接触Linux之前,应该先接触的都是windows吧?但我们一般接触Linux后,习惯linux的管理和使用方法后,我们再回过头再来使用windows的时候,内心其实是拒绝的.我们会觉得图 ...
- 使用kvm虚拟出Centos6.5系统相关步骤
使用kvm虚拟出Centos6.5系统相关步骤 kvm是啥东西,亲们自行百度哇,一两句话也说不清楚,直接进主题使用宿主机虚拟出一台centos6.5的系统,当然其他系统也可以的,考虑到企业常用服务器系 ...
- Linux中exec命令相关
Linux中exec命令相关 exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. b ...
- 浅析 Linux 初始化 init 系统,第 1 部分: sysvinit 第 2 部分: UpStart 第 3 部分: Systemd
浅析 Linux 初始化 init 系统,第 1 部分: sysvinit 第 2 部分: UpStart 第 3 部分: Systemd http://www.ibm.com/developerw ...
随机推荐
- MongoDB中的查询
MongoDB中文文档:http://docs.mongoing.com/manual-zh/contents.html 这里以集合名称为test为例,数据库通过for循环插入一些测试数据,键分别为: ...
- Mediaplayer
Mediaplayer报错 prepareAsync called in state 1 是因为在setDataSource之前调用了prepare.因为setDataSource放到了线程里 ...
- mock SpringMVC 测试控制器方法
从Spring3.2开始 Spring包含了一种mockSpringMVC并针对controller执行http请求的机制 如(该代码选自spring实战4): public void shouldS ...
- Struts2框架07 Struts2 + Spring + Mybatis 整合
1 导包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.o ...
- IFC标准 IFCWALLSTANDARDCASE参数说明
例如: #229= IFCWALLSTANDARDCASE('3_ydjarPr1s9tRASGqIAUD',#41,'\X2\57FA672C5899\X0\:\X2\78165899\X0\240 ...
- noi.ac day1t1 candy
传送门 分析 我们知道如果设A,B分别为将两家店从大到小排序之后各自的前缀和,则 Ans=Max{Min{A[i],B[j]}-W*(i+j)}. 为了得到这个Ans我们可以枚举两个数的Min,然后剩 ...
- Luogu 3267 [JLOI2016/SHOI2016]侦察守卫
以后要记得复习鸭 BZOJ 4557 大佬的博客 状态十分好想,设$f_{x, i}$表示以覆盖完$x$为根的子树后还能向上覆盖$i$层的最小代价,$g_{x, i}$表示以$x$为根的子树下深度为$ ...
- Entity Framework Tutorial Basics(13):Database First
Database First development with Entity Framework: We have seen this approach in Create Entity Data M ...
- Java_枚举类
枚举类 枚举类不出来的时候只能如下写代码 //Student.java package cn.itcast.enumeration; public class Student { private St ...
- java全栈day11----构造方法 综合案例
构造方法 在开发中经常需要在创建对象的同时明确对象的属性值,比如员工入职公司就要明确他的姓名.年龄等属性信息. 那么,创建对象就要明确属性值,那怎么解决呢?也就是在创建对象的时候就要做的事情,当使用n ...