个人技术分享

集群学习的准备

重新安装linux系统

网卡设置

1.安装全新Centos7.6系统(VM环境),修改网卡为eth0及eth1命名模式,并添加两块网卡。
2.第一块网卡eth0配置为NAT模式[模拟公网环境],网段为10.0.0.0网段。
3.第二块网卡eth1配置为LAN区段模式[模拟局域环境],网段为172.16.1.0网段。
注意:此网段为内网网段,因此,无须配置默认网关和DNS

安装系统磁盘分区

/boot 设置1024mb 标准分区 xfs
swap 设置2048mb 标准分区 swap
/ 自动分配剩余空间 标准分区 xfs

1、添加一个普通用户oldboy

#新增用户oldboy
useradd oldboy 
# 设置密码为123456
echo 123456|passwd --stdin oldboy

2、加到sudo管理,oldboy就相当于管理员

使用 visudo 编辑 sudoers 文件:
打开终端,并输入以下命令来安全地编辑 sudoers 文件:

visudo

找到正确的位置添加条目:
在 sudoers 文件中,找到类似以下格式的部分,这通常位于文件的末尾部分:

# User privilege specification
root    ALL=(ALL:ALL) ALL

在 root 用户的条目之后,添加 oldboy 用户的条目。
添加 oldboy 用户的 sudo 权限:
添加以下行,给予 oldboy 用户所有权限:

oldboy ALL=(ALL:ALL) ALL

这里的 ALL 表示 oldboy 可以作为所有用户和组在所有主机上执行所有命令

3.禁止root远程登录,改用oldboy用户登录

PermitEmptyPasswords no:

这个指令用于控制是否允许使用空密码的账户通过 SSH 连接到服务器。设置为 no 意味着不允许没有密码的账户进行 SSH 登录。这是一个重要的安全设置,因为它可以防止攻击者使用没有密码的账户进行未经授权的访问。

UseDNS no:

UseDNS 配置项决定了 SSH 在验证用户身份之前是否查询 DNS。设置为 no 可以禁止 SSH 在验证过程中进行 DNS 查找。这通常用于防止在用户认证之前对 DNS 服务器的查询,这可能被用于某些类型的攻击,如 DNS 欺骗攻击。在某些情况下,如果内部网络配置不当或 DNS 服务器响应缓慢,禁用 DNS 查找也可以提高认证速度。

GSSAPIAuthentication no:

GSSAPIAuthentication 控制是否允许使用 GSSAPI 进行 SSH 认证。设置为 no 意味着禁用了 GSSAPI 认证。GSSAPI 是一种用于在两个进程间提供安全认证的机制,它可以支持 Kerberos 认证。在大多数 Linux 服务器上,这个选项默认是禁用的,因为 Kerberos 并不是普遍使用的认证方式。

PermitRootLogin no:

禁止 root 用户通过 SSH 登录。这是一种常见的安全措施,因为直接以 root 用户登录可能会带来安全风险。

编辑sshd_config 将上面的都修改为no

vi /etc/ssh/sshd_config

使配置生效,重启 SSH 服务:

sudo systemctl restart sshd

4、基础优化操作项:更新yum源信息

第一个:就近使用yum源地址,安装软件更快。

curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

第二个:安装RHEL/CentOS官方源不提供的软件包

curl -s -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

打补丁并升级有已知漏洞的软件

yum update -y

5、安装常用软件

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 ntpdate -y 

6、安全优化

关闭SELinux安全模块

关闭SELinux安全模块的两个方法

方法1
sed -i 's#SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config

sed 是流编辑器,用于对文本进行处理。
-i 选项允许 sed 直接修改文件,而不是输出到标准输出。
s#SELINUX=.#SELINUX=disabled#g 是一个替换命令,它查找所有匹配 SELINUX=.(SELINUX= 后面跟着任意内容)的行,并将它们替换为 SELINUX=disabled。
/etc/selinux/config 是 SELinux 的配置文件。

方法2
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

这个命令与第一个命令类似,但它只替换匹配 SELINUX=enforcing 的行。如果配置文件中 SELINUX 已经是 enforcing,则使用这个命令更精确。

验证是否修改成功

grep SELINUX=disabled /etc/selinux/config

这个命令将从 /etc/selinux/config 文件中查找所有包含 SELINUX=disabled 的行,并显示它们,以验证 SELinux 已被正确禁用。

立即更改 SELinux 的运行状态

setenforce 0

这个命令用于立即更改 SELinux 的运行状态。
0 表示禁用 SELinux 的强制模式。
请注意,这个命令需要具有适当权限的用户来执行,通常是 root 用户。

确认 SELinux 的状态

getenforce

这个命令用于查看当前 SELinux 的运行状态。
它会返回 SELinux 当前的模式,可以是 Enforcing、Permissive 或 Disabled。

2.暂时关闭firewalld防火墙服务

#停止 firewalld 服务
systemctl stop firewalld
#禁用 firewalld 服务
systemctl disable firewalld
#验证是否停止并禁用
systemctl status firewalld|grep inactive

8、设置系统中文UTF8字符集

方法1

cp /etc/locale.conf /etc/locale.conf.ori

这个命令将现有的 /etc/locale.conf 文件复制到 /etc/locale.conf.ori。这样做可以备份原始的区域性配置文件,以防需要恢复到之前的设置。

echo 'LANG="zh_CN.UTF-8"' >/etc/locale.conf

echo 命令用于输出字符串。
‘LANG=“zh_CN.UTF-8”’ 是要设置的区域性环境变量,这里指定了使用中文(中国)和 UTF-8 字符集。
> 是重定向操作符,它将 echo 命令的输出重定向到 /etc/locale.conf 文件中,这将创建一个新文件或覆盖现有文件的内容。

source /etc/locale.conf

source 命令用于读取指定文件中的命令并在当前 shell 会话中执行它们。在这个例子中,它将执行 /etc/locale.conf 文件中的 LANG=“zh_CN.UTF-8” 设置,这意味着当前 shell 会话的区域性设置将立即更新为中文(中国)和 UTF-8 字符集,而不需要重新启动 shell。

方法2

localectl set-locale LANG="zh_CN.UTF-8"

localectl 是一个用于管理和查询系统和用户级别的区域性设置的命令行工具。
set-locale 是 localectl 的一个选项,用于设置系统的区域性。
LANG=“zh_CN.UTF-8” 指定了要设置的区域性,其中 zh_CN 表示中文(中国),UTF-8 表示使用 UTF-8 字符集。
执行这个命令后,系统将被配置为使用中文(中国)和 UTF-8 字符集作为默认的区域性设置。这将影响语言显示、日期和时间格式、数字格式等。

9、基础优化操作项:时间同步设置

设置每5分钟 更新同步时间

echo "*/5 * * * * /usr/sbin/ntpdate ntp3.aliyun.com >/dev/null 2>&1">>/var/spool/cron/root

echo 命令用于输出字符串。
“*/5 * * * * /usr/sbin/ntpdate ntp3.aliyun.com >/dev/null 2>&1” 是要输出的字符串,它实际上是一个 crontab 条目,含义如下:
*/5 * * * * 是 crontab 的时间表达式,表示每5分钟执行一次命令。
/usr/sbin/ntpdate ntp3.aliyun.com 是要执行的命令,这里使用的是 ntpdate 命令来与 ntp3.aliyun.com 时间服务器同步时间。
“>”/dev/null 将命令的标准输出重定向到 /dev/null,这是一个特殊的设备文件,它会丢弃写入其中的所有数据,相当于忽略标准输出。
2>&1 将命令的标准错误重定向到标准输出(在这里也是 /dev/null),这意味着错误信息也会被忽略。

“>>” 是一个重定向操作符,它将前一个命令的输出追加到指定的文件末尾,而不是覆盖文件内容。
/var/spool/cron/root 是 root 用户的 crontab 文件的路径。所有在 root 用户的 crontab 中定义的定时任务都会存储在这个文件中。

验证是否配置成功

crontab -l

列出当前用户的所有 crontab 条目。这里的 -l 选项代表“列表”(list),它会将当前用户 crontab 文件中的内容输出到终端。

10、基础优化操作项:提升命令行操作安全性(可选优化)

控制终端在300秒(即5分钟)后如果没有活动就会自动关闭

echo 'export TMOUT=300' >>/etc/profile

设置了 HISTSIZE 环境变量的值为 5,这个变量控制着用户终端会话中保存的命令历史记录的数量。

echo 'export HISTSIZE=5' >>/etc/profile

设置 HISTFILESIZE 环境变量的值为 5。这个变量决定了 shell 命令历史记录文件 ~/.bash_history(对于使用 Bash shell 的用户)可以保存的命令条目数量。

echo 'export HISTFILESIZE=5' >>/etc/profile

11、基础优化操作项

系统将允许每个用户打开最多65535个文件。这可以提高系统的性能,特别是在需要处理大量文件的应用场景中。

echo '*               -       nofile          65535' >>/etc/security/limits.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 = 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
#以下参数是对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

##NFS共享存储优化
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.wmem_max = 16777216
net.core.rmem_max = 16777216
EOF

命令 cat >>/etc/sysctl.conf<<EOF … EOF 是一个 shell 命令,用于向 /etc/sysctl.conf 文件追加一系列的内核参数设置。这些设置用于优化 Linux 系统的网络性能和行为。以下是对这些设置的简要解释:

net.ipv4.tcp_fin_timeout: 减少 TCP 连接释放时等待 FIN 包的时间。

net.ipv4.tcp_tw_reuse: 允许重用 TIME_WAIT 状态的连接。

net.ipv4.tcp_tw_recycle: 启用快速回收 TIME_WAIT 状态的连接(不推荐在新版内核中使用,因为 tcp_tw_reuse 更安全)。

net.ipv4.tcp_syncookies: 启用 SYN Cookies,用于防止 SYN Flood 攻击。

net.ipv4.tcp_keepalive_time: 设置 TCP 保活探测的时间间隔。

net.ipv4.ip_local_port_range: 设置本地端口的取值范围。

net.ipv4.tcp_max_syn_backlog: 设置 TCP 套接字的 SYN 接收队列的最大长度。

net.ipv4.tcp_max_tw_buckets: 设置系统中允许的 TIME_WAIT 套接字的最大数量。

net.ipv4.route.gc_timeout: 设置路由表清理的超时时间。

net.ipv4.tcp_syn_retries: 设置连接尝试次数。

net.ipv4.tcp_synack_retries: 设置 SYN-ACK 重试次数。

net.core.somaxconn: 设置监听队列中允许的套接字数量。

net.core.netdev_max_backlog: 设置网络设备驱动的套接字队列的最大长度。

net.ipv4.tcp_max_orphans: 设置不与任何连接关联的 TCP 或 UDP 套接字的最大数量。

net.nf_conntrack_max 和 net.netfilter.nf_conntrack_max: 设置连接跟踪系统可以跟踪的最大连接数。

net.netfilter.nf_conntrack_tcp_timeout_*: 设置连接跟踪系统中 TCP 连接不同状态的超时时间。

net.core.wmem_default, net.core.rmem_default, net.core.wmem_max, net.core.rmem_max: 设置网络套接字的默认和最大内存使用量。

立即生效

sysctl -p

命令 sysctl -p 用于将 /etc/sysctl.conf 文件中的内核参数设置加载到当前运行的内核中。这个命令在修改了 sysctl.conf 文件后非常有用,因为它允许您立即应用这些更改,而不需要重新启动系统。

13、扩展优化操作项-修改yum.conf文件配置信息

sed -i.bak 's#keepcache=0#keepcache=1#gp' /etc/yum.conf

-i.bak:告诉 sed 命令直接修改文件,并且在修改之前创建一个备份文件,备份文件的扩展名为 .bak。

‘s#keepcache=0#keepcache=1#gp’:这是 sed 的命令模式,用于执行替换操作。

s:表示替换(substitute)。
#:在 sed 中用作分隔符,您可以使用任何字符作为分隔符,但这里使用了 #。
keepcache=0:这是要被替换的文本模式。
keepcache=1:这是替换后的文本模式。
g:表示全局替换,即在每一行中替换所有匹配的模式,而不是只有第一次出现的匹配。
p:表示打印,即打印替换后的行。
/etc/yum.conf:指定了要修改的文件路径,这是 YUM(Yellowdog Updater Modified)的配置文件。

执行该命令后,/etc/yum.conf 文件中所有的 keepcache=0 都将被替换为 keepcache=1。keepcache 参数控制 YUM 是否在事务完成后保留下载的包。设置为 1 可以让 YUM 保留这些包,这可以加快后续的安装和更新过程,因为 YUM 可以直接使用已下载的包,而不是重新从网络下载。

14、锁定关键系统文件

chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab

用了 chattr(change file attributes)工具来修改文件的不可变属性(immutable attribute)。具体来说,+i 参数将这些系统文件标记为不可变。

以下是您指定的每个文件的作用:

/etc/passwd:存储有关用户账户的信息。
/etc/shadow:存储加密的用户密码。
/etc/group:存储用户组信息。
/etc/gshadow:存储加密的用户组密码。
/etc/inittab:定义了系统的运行级别和启动进程。
将这些文件标记为不可变意味着即使在系统崩溃的情况下,这些文件也不会被修改或删除。这提供了额外的安全性,以防止恶意软件或攻击者篡改这些关键的系统文件。

lsattr /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab

命令 lsattr 用于列出文件的属性。在 Linux 系统中,文件属性可以控制文件的某些行为,比如是否可以被修改、移动或删除等。

当您执行 lsattr /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab 命令时,系统会显示这些关键系统文件的当前属性。这些属性通常包括:

-:没有特殊属性。
a:append only(只添加)模式,文件只能追加数据,不能删除或修改现有内容。
b:不可移动(immutable),文件不能被删除、重命名或修改。
c:compressed,文件被压缩。
d:no dump(不转储),文件在备份操作中不会被复制。
i:immutable(不可变),文件既不能被删除,也不能被写入或修改。
j:data journalling(数据日志),文件的目录项被写入日志。
s:secure deletion(安全删除),文件被删除时,数据会被立即擦除。
t:no tail-merging(不允许尾部合并)或top-posting(顶部发布)。
u:undelete(可恢复删除),文件被删除后,数据仍然保留,直到被覆盖。

15、精简开机自启动服务

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

您提供的两条命令用于管理系统中的服务单元(unit),这些服务单元是系统启动时配置的一部分。下面是每条命令的解释:

  1. 第一条命令:

    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:过滤出所有被启用(enabled)的服务单元。
    • egrep -v "sshd.service|crond.service|sysstat|rsyslog|^NetworkManager.service|irqbalance.service":使用 egrep-v 选项排除掉列表中的 sshd.servicecrond.servicesysstatrsyslogNetworkManager.serviceirqbalance.service 这些服务,即不在这些服务上执行禁用操作。
    • awk '{print "systemctl disable", $1}':对于每个剩余的启用的服务单元,使用 awk 生成 systemctl disable 命令,并将服务单元名称作为参数。
    • | bash:将 awk 命令的输出作为 bash shell 的输入,实际执行禁用操作。

    警告:此命令会禁用除了指定服务之外的所有已启用服务,这可能会对系统稳定性和安全性产生重大影响。在执行此操作前,请确保您完全理解其后果。

  2. 第二条命令:

    systemctl list-unit-files | grep enable
    

    这个命令相对简单,它列出所有当前被设置为启用的系统服务单元。它没有执行任何更改,只是显示当前的配置状态。

列出所有已启用的服务单元

systemctl list-unit-files |grep enable

停止 postfix 服务的命令。postfix 是 Linux 系统中常用的邮件传输代理(MTA),负责处理邮件的发送和接收

systemctl stop postfix

查看网络连接端口情况

netstat -lntup

命令 netstat -lntup 是一个用于显示网络连接、路由表、接口统计等网络信息的工具。下面是这个命令中每个参数的作用:

-l(listening): 显示监听中的服务器的套接字。
-n(numeric): 显示数字形式的地址和端口号,不进行域名解析。
-t(tcp): 仅显示 TCP 相关的选项。
-u(udp): 仅显示 UDP 相关的选项。
-p(program): 显示监听端口的进程信息,包括进程的程序名和进程号。
-4 或 -6(未在您的命令中指定): 可以选择只显示 IPv4 或 IPv6 的信息。

16、扩展优化操作项

优化系统提示符

echo  "PS1='\[\e[32;1m\][\u@\h \W]\\$ \[\e[0m\]'" >>/etc/profile
source /etc/profile

定义ls命令的长格式显示,是输出信息格列完全对齐显示

echo "alias ll='ls -l --color=auto --time-style=long-iso'" >>/etc/profile
source /etc/profile

自动快速配置改主机名和IP地址(前提第一台主机的最后ip为128 如10.0.0.128)

定义一个net.sh文件 使用方法 net node01 129

#!/bin/sh
if [ $# -ne 2 ];then
  echo "/bin/sh $0 hostname PartIP"
  exit 1
fi
hostnamectl set-hostname $1 #第一个参数 设置主机名
sed -i "/IPADDR/s#128#$2#g" /etc/sysconfig/network-scripts/ifcfg-eth0 #<==模板机IP最后8位默认是200。
sed -i "/IPADDR/s#128#$2#g" /etc/sysconfig/network-scripts/ifcfg-eth1
systemctl restart network
#check
hostname
ifconfig eth0
ifconfig eth1
exit

在运行脚本之前,您可能需要给予执行权限:

chmod +x net.sh

然后,您可以使用以下命令执行脚本:

sudo ./net.sh your_hostname your_ip_suffix

替换 your_hostname 和 your_ip_suffix 为实际的主机名和您想要设置的 IP 地址后缀。

17、基础优化:

1、规范目录
路径规划:
/server/scripts 服务器本地存放脚本程序的目录
/server/tools 服务器本地存放软件安装包的目录
/application/ 软件名 服务器本地软件安装的根目录,软件名不带版本号,例如:
/application/nginx,/application/mysql
/application/nginx/html Web服务器站点目录(bbs,blog,www,edu)
/application/nginx/logs Web服务器日志{bbs|blog|www}_access.log
/backup 服务器本地数据备份目录,也是备份服务器Rsync的备份目录
/data NFS共享存储共享文件目录

2.规划集群服务器配置
服务器说明 eth0外网IP(NAT) eth1内网IP(NAT) 主机名称规划
A1-负载服务器01 10.0.0.5/24 172.16.1.5/16 lb01
A2-负载服务器02 10.0.0.6/24 172.16.1.6/16 lb02
B1-web服务器1 10.0.0.7/24 172.16.1.7/16 web01
B2-web服务器2 10.0.0.8/24 172.16.1.8/16 web02
SB1-web服务器1 10.0.0.9/24 172.16.1.9/16 sweb01
SB2-web服务器2 10.0.0.10/24 172.16.1.10/16 sweb02
C1-NFS存储服务器 10.0.0.31/24 172.16.1.31/16 nfs01
C2-rsync备份服务器 10.0.0.41/24 172.16.1.41/16 backup
C3-mysql数据库服务器 10.0.0.51/24 172.16.1.51/16 db01
X-管理服务器 10.0.0.61/24 172.16.1.61/16 m01

3、配置所有主机域名解析

cat >/etc/hosts<<EOF
127.0.0.1    localhost localhost.localdomain localhost4 localhost4.localdomain4
::1          localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.1.5 lb01
172.16.1.6 lb02
172.16.1.7 web01
172.16.1.8 web02
172.16.1.9 sweb01
172.16.1.10 sweb02
172.16.1.31 nfs01
172.16.1.41 backup
172.16.1.51 db01 db01.etiantian.org
172.16.1.61 m01
EOF