1、操作的最小化原则
1)安装系统最小化
一般情况下安装OS时,软件安装包组(Package Group)的选择: base--------------------------基本环境 editors-----------------------编辑器 development librarys------开发库 development tools---------开发工具 x software development--图形界面开发软件 system tools----------------系统工具
2)开启程序服务最小化原则
for i in `chkconfig --list|grep 3:on|awk '{print $1}'`;do chkconfig --level 3 $i off;done for i in crond network syslog sshd;do chkconfig --level 3 $i on;done 只留:crond network syslog sshd;
useradd tom ; echo 123456 | passwd --stdin tom
2 、更改ssh服务默认端口及常规配置
vim /etc/ssh/sshd_config #ListenAddress 0.0.0.0 #监听ip Port 52113 #ssh连接默认的端口 PermitRootLogin no #禁止root远程登陆。 PermitEmptyPasswords no #禁止空密码登陆 UseDNS no #不使用DNS GSSAPIAuthentication no #连接慢时改为no
3、 Sudo的应用
让普通用户可以拥有指定root权限功能
1) 通过visudo配置sudo
注:当给普通用户全部root权限时,可通sudo su – 命令由当前普通用户切换到root用户环境变量中,而无需知道root的密码,只要知道当前用户密码即可切换成功。
2) 通过配置文件配置sudo
3) 配置文件的基本解释
通过visudo直接编辑,配置后可自动检查语法功能; 1)授权(授权组可用%开头) Wang ALL=(ALL) ALL 用户 机器=(授权哪个角色的权限) 授权的命令 %用户组 机器=(授权哪个角色的权限) 授权的命令
别名的意义
用户或组 |
主机(机器) |
授权角色权限 |
命令 |
Root |
ALL |
(ALL) |
ALL |
User_Alias Uers=wang, %mikem |
Host_Alias Hostname=lc1,lc2 |
Runas_Alias OP=root |
Cmnd_Alias CMd=/sbin.. |
4) 普通用户可通过sudo –l命令查看本身具有sudo的哪些权限
提示:
用户通过sudo提权时有时要输入的密码,有时不输入,其原因可在配置文件里配置密码超时时间;当通过sudo命令提权时,会先检查/var/db/sudo/目录下是否有相应用户的密码时间戳,如果没超时就直接通过,否则输入自己的密码才能执行。
5)Sudo配置注意事项
a) 命令别名下的成员必须是文件或目录的绝对路径
b) 别名名称是包含大写字母,数字,下划线,如果是字母都要大写
c) 一个别名下有多个成员,成员与成员之间,通过半角“,”号分隔;成员必须是有效实际存在的。
d) 别名成员受别名类型Host_Alias,User_Alias,Runas_Alias,Cmnd_Alias制约,定义什么类型的别名,就要有什么类型的成员相配。
e) 别名规则是每行算一个规则,如果一个别名规则一行容不下时,可以通过“”来续行;
f) 指定切换的用户要用()括号括起来,如果省略括号,则默认为root用户;如果括号里是ALL,则代表能切换到所有用户
g) 如果不需要密码直接运行命令的,应该加NOPASSWD:参数。
h) 禁止某类程序或命令执行,要在命令动作前面加上“!”号,并且放在允许执行命令的后面。
i) 用户组前面必须加%号。
4、linux系统登录用户的超时时间
echo "expert TMOUT=10" >>/etc/profile 超时时间 echo "export HISTSIZE=5" >>/etc/profile 历史命令数量 history –c 清空历史记录 history –d 4 清空指定的记录
5、系统字符集调整支持显示中文
建议更改字符集 (建议)
注:Source表示重新加载配置文件使其生效
6 服务器时间同步及更改
1) 通过date –s命令更改时间并通过hwclock命令将更改的时间更新的bash里
date -s "2014/10/15"hwclock date +%F %T
2) 通过ntpdate更新服务器时间
# ntpdate time.nist.gov
3) Ntp-sever服务器搭建
安装ntp-server(系统默认安装),也可通过yum安装。
rpm -qa ntp
编辑ntpd.conf配置文件
restrict 0.0.0.0 mask 0.0.0.0 nomodify notrap noquery #拒绝所有 restrict 192.168.166.0 mask 255.255.255.0 nomodify #只允许该网段更新时间 restrict 127.0.0.1 #本可有所有操作 server 210.72.145.44 prefer #perfer参数是优先到远端Ntpserver更新时间 server 127.127.1.0 fudge #如果远端服务器不能同步时间,则由本地时间提供给客户端 127.127.1.0 stratum 8 driftfile /var/lib/ntp/drift keys /etc/ntp/keys 1)说明:关于权限设定部分 权限的设定主要以 restrict 这个参数来设定,主要的语法为 restrict IP地址 mask 子网掩码 参数 注:其中 IP 可以是IP地址,也可以是 default ,default 就是指所有的IP。 2)参数有以下几个: ignore :关闭所有的 NTP 联机服务 nomodify:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。 notrust :客户端除非通过认证,否则该客户端来源将被视为不信任子网 noquery :不提供客户端的时间查询 注意:如果参数没有设定,那就表示该 IP (或子网)没有任何限制!
4) 通过cron任务计划定时更新服务器时间
echo “#time update by server” >>/var/spool/cron/root echo “*/5 * * * * /usr/sbin/ntpdate time.nist.gov” >>/var/spool/cron/root
7、加大服务器文件描述符
通过编辑ulimit配置文件使文件描述符增加永久生效
#vim /etc/syscurity/limits.conf #ulimit -n #ulimit –a 查看所有限制,以及设定参数 # man limits.conf
注:调整的数字不是越大越好,一句话够用就行,logout (或Ctrl+D) 退出登录(Ctrl+D = logout)生效
8、调整内核参数文件/etc/sysctl.conf
net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_synack_retries = 1 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_probes = 3 net.ipv4.tcp_keepalive_intvl =15 net.ipv4.tcp_retries2 = 5 net.ipv4.tcp_fin_timeout = 2 net.ipv4.tcp_max_tw_buckets = 36000 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_max_orphans = 32768 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 16384 net.ipv4.tcp_wmem = 8192 131072 16777216 net.ipv4.tcp_rmem = 32768 131072 16777216 net.ipv4.tcp_mem = 786432 1048576 1572864 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.ip_conntrack_max = 65536 net.ipv4.netfilter.ip_conntrack_max=65536 net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180 net.core.somaxconn = 16384 net.core.netdev_max_backlog = 16384 # sysctl –p ;通过命令使其生效
#vim /etc/sysctl.conf ; 进入文件后在最后行中添加
9 、锁定关键系统文件
通过chattr +i 进行加锁
# chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
10、 lvs/haproxy负载均衡代理内核参数配置
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.ipv4.ip_conntrack_max = 25000000 net.ipv4.netfilter.ip_conntrack_max=25000000
11、 nginx/apache生产内核参数优化案例
net.ipv4.tcp_max_syn_backlog = 65536 net.core.netdev_max_backlog = 32768 net.core.somaxconn = 32768 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_synack_retries = 1 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_mem = 94500000 915
12、CDN公司cache服务器内核/etc/sysctl.conf优化案例
net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 net.ipv4.tcp_max_tw_buckets = 1800000 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_retries1 = 22 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.tcp_fin_timeout = 10 net.ipv4.tcp_synack_retries = 3
13、 删除登录信息
(不显示内核版本,主机名,发行版本号及一些后台进程的版本号),防止探测。 cat /dev/null >/etc/issue 本地登录显示linux的版本号 cat /dev/null >/etc/issue.net 网络登录显示linux的版本号 cat /dev/null >/etc/motd 登录描述 #包括应用层 比如隐藏apache ,php等的版本。
14、设置/etc/hosts.deny、/etc/hosts.allow
可以控制外部IP对本机服务的访问 etc/hosts.allow 的设定优先于 /etc/hosts.deny 清除多余的系统虚拟账号(非必须) 1.关闭/etc/passwd中不必要的用户(可选优化项) 2.关闭/etc/group中不必要的用户组(可选优化项)
15、 Linux基础优化小结:
1)不用root,添加普通用户,通过sudo授权管理 2)更改默认的远程连接SSH服务端口及禁止root用户远程连接 3)定时自动更新服务器时间 4)配置yum更新源,从国内更新源下载安装rpm包 5)关闭selinux及iptables(暂时关闭,后面学到要开启并优化) 6)调整文件描述符数量,进程及文件的打开都会消耗文件描述符 7)定时自动清理/var/spool/clientmquene/目录垃圾文件,防止inodes节点被占满。 8)精简开机自启动服务 9)Linux内核参数优化 10)更改字符集,支持中文,但建议还是用英文字符集,防止乱码问题。 11)锁定关键系统文件 12)清空/etc/issue ,去除或更改系统及内核版本登陆前的屏幕显示
16、linux内核崩溃修复
1)重新安装系统,选择硬盘,不分区 2)选择旧分区的/boot,/分区,swap,并重新挂载和格式化 3)安装好系统后,重新挂载data分区 这样不会丢数据。
17、centos7优化
1、关闭selinux sed -i 's#SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config grep SELINUX=disabled /etc/selinux/config setenforce 0 getenforce 2、关闭firewalld防火墙服务 systemctl stop firewalld systemctl disable firewalld 3、设置普通用户提权操作(可选优化) useradd test echo 123456|passwd --stdin test cp /etc/sudoers{,.ori} echo "test ALL=(ALL) NOPASSWD: ALL " >> /etc/sudoers tail -1 /etc/sudoers visudo -c 4.设置系统中文UTF8字符集 cat /etc/locale.conf LANG="en_US.UTF-8" cp /etc/locale.conf{,.ori} echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf source /etc/locale.conf echo$LANG localectlset-locale LANG="zh_CN.UTF-8" cat/etc/locale.conf 5、时间同步设置 /usr/sbin/ntpdate ntp.aliyun.com echo '#time sync ' >> /var/spool/cron/root echo "*/5 * * * * /usr/sbin/ntpdate ntp.aliyun.com >/dev/null2>&1" >> /var/spool/cron/root crontab -l 6、提升命令行操作安全性(可选优化) echo 'export TMOUT=300' >> /etc/profile echo 'export HISTSIZE=5' >> /etc/profile echo 'export HISTFILESIZE=5' >> /etc/profile tail /etc/profile . /etc/profile 7、加大文件描述符 echo'* - nofile 65535 ' >>/etc/security/limits.conf tail -1 /etc/security/limits.conf ulimit -SHn 65535 ulimit -n 8、优化系统内核 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 9、iptables防火墙的优化 net.nf_conntrack_max = 25000000 net.netfilter.nf_conntrack_max =25000000 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 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.wmem_max = 16777216 net.core.rmem_max = 16777216 10、安装系统常用软件 CentOS6和CentOS7 yum install tree nmap dos2unix lrzsz nc lsof wget tcpdump htop iftop iotop sysstat nethogs -y CentOS7 yum install psmisc net-tools bash-completion vim-enhanced -y 11、优化SSH远程连接效率 cp /etc/ssh/sshd_config{,.ori} sed -rn '/#Port/s/#(.*)22/112345/p' /etc/ssh/sshd_config. sed -rn '/ListenAddress/s/#(.* )0.*/1192.168.1.2/p' /etc/ssh/sshd_config sed -rn '/#PermitRootLogin/s/#(.*)yes/1no/p' /etc/ssh/sshd_config sed -n '/PermitEmptyPasswords/s/^#//p' /etc/ssh/sshd_config sed -rn '/#UseDNS/s/#(.*)yes/1no/p' /etc/ssh/sshd_config sed -n '/GSSAPIAuthentication/s#yes#no#p' /etc/ssh/sshd_config 12、保留yum安装的软件包(可选优化) sed -n '/keepcache/s#0#1#p' /etc/yum.conf 13、 锁定关键系统文件 /etc/passwd、/etc/shadow、/etc/group、/etc/gshadow、/etc/inittab chattr +i /etc/passwd /etc/shadow /etc/group chattr +i /etc/inittab /etc/fstab /etc/sudoers lsattr /etc/passwd /etc/shadow /etc/group /etc/inittab /etc/fstab /etc/sudoers mv /usr/bin/chattr /opt/root cp /usr/bin/xargs /usr/bin/chattr 14、去除登录前的系统及内核版本显示。 > /etc/issue.net > /etc/issue 15、清除多余的系统虚拟用户账号。 userdel -r adm userdel -r lp userdel -r games userdel -r ftp groupdel adm groupdel lp groupdel games groupdel video groupdel ftp 16、grub引导菜单加密码 grub2-setpassword cat /boot/grub2/user.cfg 17、禁止主机被ping echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.conf sysctl -p 18、打补丁 yum update 19、精简开机自启动服务 systemctl list-unit-files | grep enable | egrep -v "sshd.service|crond.service|sysstat|rsyslog|^NetworkManager.service|irqbalance.service" | awk '{print "systemctl disable",$1}' | bash systemctl list-unit-files | grep enable #保留服务: sshd|crond|sysstat|rsyslog|NetworkManager|irqbalance 20、企业生产最小化原则: 1)安装软件包最小化。 2)用户权限最小化。 3)目录文件权限最小化。 4)自启动服务最小化。 5)服务运行用户最小化。