优化说明:
一. 关闭 selinux
二. 更改为阿里 yum 源
三. 提权 dm 用户可以使用 sudo
四. 优化 ssh 远程登录配置
五. 设置中文字符集
六. 设置时间同步
七. 历史记录数及登录超时环境变量设置
八. 调整 linux 描述符
九. 定时清理邮件服务临时目录垃圾文件
十. 锁定关键系统文件, 防止被提权篡改
十一. ssh 限制 ip 登录
十二. 为 grub 菜单加密
十三. 优化开机自启服务
十四. 内核优化
十四. 更新系统到最新
一. 关闭 selinux
- # 修改配置文件可使配置文件生效, 但必须要重启系统, 此步骤是 sed 快速修改方法, 也可以通过 vim 编辑 / etc/selinux/config 来修改此文件.
- sed -i '/^SELINUX/s/enforcing/disabled/g' /etc/selinux/config
检查替换结果为 disabled 就表示成功了.
- grep SELINUX=disabled /etc/selinux/config
- SELINUX=disabled
- #临时关闭
- setenforce
- usage: setenforce [Enforcing | Permissive | 1 | 0]
0 表示 Permissive, 即给出警告, 但不会阻止操作, 相当于 disabled.
1 表示 Enforcing, 即表示 SELinux 为开启状态.
- setenforce 0 #临时将 SELinux 调为 Permissive 状态.
- getenforce #查看 SELinux 当前状态.
二. 更改为阿里 yum 源
- mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
- wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
- yum makecache
三. 提权 dm 用户可以使用 sudo
备份 / etc/sudoers 文件
- cp /etc/sudoers /etc/sudoers.2018-08-20.bak
sudo 提权配置说明
用户或组 机器 = 授权角色 可以执行的命令
- user MACHINA= COMMANDS
- dm ALL=(ALL) /usr/sbin/useradd,/usr/sbin/userdel
- useradd dm
- echo 123456|passwd --stdin dm
- echo "dm ALL=(ALL) NOPASSWD: ALL">>/etc/sudoers #结尾的 ALL 表示 dm 可拥有完全的系统管理权限, NOPASSSWD 表示提权执行命令时不提示密码;
- grep dm /etc/sudoers
- visudo -c &>/dev/null
四. 优化 ssh 远程登录配置
备份 / etc/ssh/sshd_conf
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.2018-08-20.bak
不允许基于 GSSAPI 的用户认证
sed -i 's/^GSSAPIAuthentication yes$/GSSAPIAuthentication no/' /etc/ssh/sshd_config
不允许 sshd 对远程主机名进行反向解析
sed -i 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
禁止 root 用户登录
sed -i 's%#PermitRootLogin yes%PermitRootLogin no%' /etc/ssh/sshd_config
不允许空密码登录
- sed -i 's%#PermitEmptyPasswords no%PermitEmptyPasswords no%' /etc/ssh/sshd_config
- systemctl restart sshd
五. 设置中文字符集
- localectl set-locale LANG=zh_CN.UTF-8
- localectl status
六. 设置时间同步
检查是否安装 ntpdate
- rpm -qa|grep ntpdate
- ntpdate-4.2.6p5-28.el7.centos.x86_64
如果没有安装, 则使用 yum 安装
- yum install -y ntpdate
添加计划任务, 每 5 分钟同步一次时间;
- echo '#time sync by dm at 2018-8-20'>>/var/spool/cron/root
- echo '*/5 * * * */usr/sbin/ntpdate -u ntp.api.bz>/dev/null 2>$1'>>/var/spool/cron/root
- crontab -l
七. 历史记录数及登录超时环境变量设置
设置闲置超时时间为 300s
- echo 'export TMOUT=300'>>/etc/profile
设置历史记录文件的命令数量为 100
- echo 'export HISTFILESIZE=100'>>/etc/profile
设置命令行的历史记录数量
- echo 'export HISTSIZE=100'>>/etc/profile
格式化输出历史记录(以年月日分时秒的格式输出)
- echo 'export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S"'>>/etc/profile
- source /etc/profile
- tail -4 /etc/profile
八. 调整 linux 描述符
1 文件描述符是由无符号整数表示的句柄, 进程使用它来标识打开的文件. 文件描述符与包括相关信息 (如文件的打开模式, 文件的位置类型, 文件的初始类型等) 的文件对象相关联, 这些信息被称作文件的上下文. 文件描述符的有效范围是 0 到 OPEN_MAX.
2 对于内核而言, 所有打开的文件都是通过文件的描述符引用的. 当打开一个现有文件或创建一个新文件时, 内核向进程返回一个文件描述符, 当读或写一个文件时, 使用 open 或 create 返回的文件描述符标识该文件, 并将其作为参数传递给 read 或 write.
4 查看系统文件描述符设置的情况可以使用下面的命令, 文件描述符大小默认是 1024.
5 ulimit -n
6 对于高并发的业务 Linux 服务器来说, 这个默认的设置值是不够的, 需要调整.
8 调整方法一:
9 调整系统文件描述符为 65535
- echo '* - nofile 65535'>>/etc/security/limits.conf
- tail -l /etc/security/limits.conf
13 调整方法二:
14 直接把 ulimit -SHn 65535 命令加入 / etc/rc.d/rc.local, 用以设置每次开机启动时配置生效, 命令如下:
- echo "ulimit -HSn 65535">>/etc/rc.d/rc.local
- echo "ulimit -s 65535">>/etc/rc.d/rc.local
九. 定时清理邮件服务临时目录垃圾文件
1 centos7 默认是安装了 Postfix 邮件服务的, 因此邮件临时存放地点的路径为 / var/spool/postfix/maildrop, 为了防止目录被垃圾文件填满, 导致系统额 inode 数量不够用, 需要定期清理.
2 定时清理的方法为: 将清理命令写成脚本, 然后做成定时任务, 每日凌晨 0 点执行一次.
- #创建存放脚本的目录
- 3 [ -d /server/scripts/shell ] && echo "directory already exists." || mkdir /server/scripts/shell -p
- #编写脚本文件
- 4 echo 'find /var/spool/postfix/maildrop/ -type f|xargs rm -f'>/server/scripts/shell/del_mail_file.sh
- #查看
- 5 cat /server/scripts/shell/del_mail_file.sh
- #加入计划任务
- 6 echo "00 00 * * */bin/bash /server/scripts/shell/del_mail_file.sh>/dev/null &1">>/var/spool/cron/root
- 7 crontab -l
十. 锁定关键系统文件, 防止被提权篡改
要锁定关键系统文件, 必须对账号密码我那件及启动文件加锁, 防止被篡改, 加锁命令如下:
- chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
- lsattr /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
上锁后, 所有用户都不能对文件进行修改删除. 如果需要修改, 可以执行下面的命令解锁后, 再进行修改.
- chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
- lsattr /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
如果想要更加安全, 可以把 chattr 改名转移, 防止被黑客利用.
mv /usr/bin/chattr /usr/bin/dm1
十一. ssh 限制 ip 登录
- # 允许 192.168.200.0 段的 IP 登录
- echo "sshd:192.168.200.0/24:allow">>/etc/hosts.allow
- #禁止所有的其他 IP 段的 IP 登录
- echo "sshd:all:deny">>/etc/hosts.allow
- tail -2 /etc/hosts.allow
十二. 为 grub 菜单加密
1 为 grub 菜单加密的目的是防止他人修改 grub 进行内核等启动设置, 以及用单用户模式启动进行破解 root 密码等操作, 实际上此步骤可以在安装系统的过程中设定.
2 安装系统后的具体设定步骤如下:
设置密码:
- grub2-setpassword
7 查看设置的密码:
- 8 cat /boot/grub2/user.cfg
- #在 / etc/grub.d/01_users 文件中可以看到 grub 用户名为 root, 然后通过 grub2-setpassword 来设置 grub 的密码, 密码设置成功后会生成 / boot/grub2/user.cfg 文件, 可以通过 / boot/grub2/user.cfg 文件查看设置的密码, 查看到的密码为加密的密码.
十三. 优化开机自启服务
十四. 内核优化
Linux 服务器内核参数优化, 主要是指在 Linux 系统中针对业务服务应用而进行的系统内核参数调整, 优化并无一定的标准. 下面是生产环境下 Linux 常见的内核优化:
- cat>>/etc/sysctl.conf<<EOF
- #kernel_flag
- #关闭 ipv6
- net.ipv6.conf.all.disable_ipv6 = 1
- net.ipv6.conf.default.disable_ipv6 = 1
- #决定检查过期多久邻居条目
- net.ipv4.neigh.default.gc_stale_time=120
- #使用 arp_announce / arp_ignore 解决 ARP 映射问题
- net.ipv4.conf.default.arp_announce = 2
- net.ipv4.conf.all.arp_announce=2
- net.ipv4.conf.lo.arp_announce=2
- # 避免放大攻击
- net.ipv4.icmp_echo_ignore_broadcasts = 1
- # 开启恶意 icmp 错误消息保护
- net.ipv4.icmp_ignore_bogus_error_responses = 1
- #关闭路由转发
- #net.ipv4.ip_forward = 0
- #net.ipv4.conf.all.send_redirects = 0
- #net.ipv4.conf.default.send_redirects = 0
- #开启反向路径过滤
- net.ipv4.conf.all.rp_filter = 1
- net.ipv4.conf.default.rp_filter = 1
- #处理无源路由的包
- net.ipv4.conf.all.accept_source_route = 0
- net.ipv4.conf.default.accept_source_route = 0
- #关闭 sysrq 功能
- kernel.sysrq = 0
- #core 文件名中添加 pid 作为扩展名
- kernel.core_uses_pid = 1
- # 开启 SYN 洪水攻击保护
- net.ipv4.tcp_syncookies = 1
- #定义了系统中每一个端口最大的监听队列的长度, 对于一个经常处理新连接的高负载 web 服务环境来说, 默认的 128 太小了.
- net.core.somaxconn=1280
- #修改消息队列长度
- kernel.msgmnb = 65536
- kernel.msgmax = 65536
- #设置最大内存共享段大小 bytes
- kernel.shmmax = 68719476736
- kernel.shmall = 4294967296
- #timewait 的数量, 默认 180000
- net.ipv4.tcp_max_tw_buckets = 6000
- net.ipv4.tcp_sack = 1
- net.ipv4.tcp_window_scaling = 1
- net.ipv4.tcp_rmem = 4096 87380 4194304
- net.ipv4.tcp_wmem = 4096 16384 4194304
- net.core.wmem_default = 8388608
- net.core.rmem_default = 8388608
- net.core.rmem_max = 16777216
- net.core.wmem_max = 16777216
- #每个网络接口接收数据包的速率比内核处理这些包的速率快时, 允许送到队列的数据包的最大数目
- net.core.netdev_max_backlog = 262144
- #限制仅仅是为了防止简单的 DoS 攻击
- net.ipv4.tcp_max_orphans = 3276800
- #未收到客户端确认信息的连接请求的最大值
- net.ipv4.tcp_max_syn_backlog = 262144
- net.ipv4.tcp_timestamps = 0
- #内核放弃建立连接之前发送 SYNACK 包的数量
- net.ipv4.tcp_synack_retries = 1
- #内核放弃建立连接之前发送 SYN 包的数量
- net.ipv4.tcp_syn_retries = 1
- #启用 timewait 快速回收
- net.ipv4.tcp_tw_recycle = 1
- #开启重用. 允许将 TIME-WAIT sockets 重新用于新的 TCP 连接
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_mem = 94500000 915000000 927000000
- net.ipv4.tcp_fin_timeout = 1
- #当 keepalive 起用的时候, TCP 发送 keepalive 消息的频度. 缺省是 2 小时
- net.ipv4.tcp_keepalive_time = 30
- #允许系统打开的端口范围
- net.ipv4.ip_local_port_range = 1024 65000
- #修改防火墙表大小, 默认 65536
- #net.netfilter.nf_conntrack_max=655350
- #net.netfilter.nf_conntrack_tcp_timeout_established=1200
- # 确保无人能修改路由表
- #net.ipv4.conf.all.accept_redirects = 0
- #net.ipv4.conf.default.accept_redirects = 0
- #net.ipv4.conf.all.secure_redirects = 0
- #net.ipv4.conf.default.secure_redirects = 0
- EOF
- /sbin/sysctl -p
十四. 更新系统到最新
- # 更新补丁并升级系统版本
- yum update -y
- #只更新安全补丁, 不升级系统版本
- yum --security check-update #检查是否有安全补丁
- yum update --security #更新安全补丁
来源: http://www.bubuko.com/infodetail-2735691.html