VMware workstation配置PXE&KickStart工具自动安装Centos并执行脚本配置

CentOS 运维避坑实战

CentOS7.9 安装 Python3.8.16 后 yum 报错,快速修复方案

目录

1.PXE原理

2.前置配置

3.配置dhcp服务

4.配置tftp服务

5.配置ks.cfg预设文件

6.创建客户端虚拟机


1.PXE原理

PXE是一种基于 TCP/IP、DHCP和 TFTP网络协议的技术,允许计算机在没有本地存储设备(如硬盘)或操作系统的情况下,从网络远程启动并加载操作系统。通过网络下载到本地运行。

1. dhcp #客户端机器在开机后会到服务器端的dhcp服务上获取ip,dhcp在接收客户端的请求后会根据自身的配置分配ip给客户端,并提供tftp服务器和引导文件pxelinux.0
2. tftp-server #提供tftp协议,令客户主机可以读取到预安装环境
3. pxelinux.0 #引导文件,当客户端机器从服务端的tftp中获取后会加载此文件,客户端会从服务端拉取对应的配置文件(pxelinux.cfg),并加载启动菜单和内核参数
4. syslinux #提供pxelinux.0文件
5. httpd #提供后续客户端请求下载操作系统内核和根文件系统映像
6. system-config-kickstart #若服务端安装了GUI界面,可以通过该软件使用图形化配置ks.cfg文件
2.前置配置
  1. 网络配置 && 关闭防火请与selinux 
    nmcli connection modify ens33 ipv4.addresses 172.25.0.11/24 ipv4.gateway 172.25.0.254 ipv4.dns 114.114.114.114 ipv4.method manual autoconnect yes
    
    nmcli connection up ens33
    
    systemctl stop firewalld && setenforce 0
    
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

      2.下载对应的软件包

yum provides */pxelinux.0 yum install -y {dhcp,httpd,syslinux,system-config-kickstart,tftp-server}
3.配置dhcp服务
vim /etc/dhcp/dhcpd.conf
#从/usr/share/doc/dhcp*/dhcpd.conf.example 获取模板
subnet 172.25.0.0 netmask 255.255.255.0 #指定网段和子网掩码
{
range 172.25.0.12 172.25.0.20; #地址池范围
option domain-name-servers 172.25.0.11; #dns服务器地址
option domain-name ""; #客户机域名
option routers 172.25.0.254; #网关地址
option broadcast-address 172.25.0.255; #广播地址
filename "pxelinux.0"; #指定pxe引导文件名
next-server 172.25.0.11; #指定tftp服务地址,让客户端获取pxe引导文件
default-lease-time 600; #默认租约期
max-lease-time 7200; #最长租约期
}
保存退出后重启dhcp服务
systemctl restart dhcpd && systemctl enable dhcpd
4.配置tftp服务
#启用tftp服务
vim /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = yes #修改为no
per_source = 11
cps = 100 2
flags = IPv4
}
systemctl restart tftp.socket
#挂载本地镜像
mkdir /var/www/html/centos && cd /var/www/html/centos
echo "/dev/sr0 /var/www/html/centos iso9660 defaults 0 0" >> /etc/fstab
mount -a
ls /var/www/html/centos
cp isolinux/* /var/lib/tftpboot/ && cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
ls /var/lib/tftpboot/ && mkdir /var/lib/tftpboot/pxelinux.cfg && cd /var/lib/tftpboot/
cp isolinux.cfg pxelinux.cfg/default vim pxelinux.cfg/default
#更改超时时间为50
#指定从/var/www/html/centos中获取系统镜像文件,从/var/www/html/ks.cfg获取对应安装预设
5.配置ks.cfg预设文件
system-config-kickstart
#看需求是否需要安装图形化界面
#CTRL+S保存ks.cfg文件到/var/www/html/
ls /var/www/html && vim ks.cfg
#配置加密脚本,使客户端能够在安装完操作系统后自动执行
systemctl start httpd && systemctl enable httpd
touch jiaoben.sh    #在html目录
vim jiaoben.sh
##以下为脚本内容
 #!/bin/bash
if [ "$EUID" -ne 0 ]; then

    echo "请以root用户身份运行此脚本"
    exit 1
fi

#设置首次登陆root用户时修改密码
echo "设置首次登陆root用户时修改密码"
chage -d 0 root
echo "设置完成"

#开启防火墙
systemctl start firewalld  && systemctl enable firewalld --now

#开启selinux
setenforce 1 && sed -i 's/SELINUX=disable/SELINUX=enforcing/' /etc/selinux/config

#配置sshd文件
#定义要修改的配置文件路径
config_file="/etc/ssh/sshd_config"

#需要修改的参数数组
parameters=(
        "#PermitRootLogin"
        "#Port"
        "#MaxAuthTries"
        "#PrintLastLog"
        "#PermitEmptyPasswords"
)
#数组相对应的值
new_values=("no" "3350" "5" "yes" "no")
# 备份原始配置文件
backup_file="${config_file}.bak"
cp "$config_file" "$backup_file"
echo "已备份原始配置文件到 $backup_file"

index=0
# 遍历参数数组,进行交互式修改
for param in "${parameters[@]}"; do
    new_value="${new_values[$index]}"
    # 如果用户输入了新值,则进行修改
    if [ -n "$new_value" ]; then
        # 使用 sed 命令替换文件中的参数值
        clean_param="${param#\#}"  # 去掉参数前面的 #
        sed -i "s/^$param.*/$clean_param\t$new_value/" "$config_file"
        echo "$clean_param 已更新为 $new_value。"
        if [ "$clean_param" = "Port" ]; then
           firewall-cmd --add-port="$new_value/tcp" --permanent --zone=public && firewall-cmd --reload && semanage port --add -t ssh_port_t -p tcp "$new_value"
           echo "防火墙与selinux策略更新ssh访问端口$new_value"
        fi
    ((index++))
    else
        echo "$clean_param 保持不变。"
    fi
done
echo "配置修改完成,重启sshd服务"
systemctl restart sshd

#配置内核参数优化
echo "配置内核参数"
 cat >> /etc/sysctl.conf<<EOF
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2 
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1     
EOF

sysctl -p 

echo "配置已完成"

#配置允许进行使用和拒绝访问sshd服务的IP/网段
echo "配置允许进行使用和拒绝访问sshd服务的IP/网段"

echo "sshd:172.25.0.11:allow" >> /etc/hosts.allow
echo "sshd:all" >> /etc/hosts.deny
echo "配置完成"

#配置只有root可以使用cron
echo "限制只有root可以使用cron"
rm -rf /etc/allow.deny
echo "root"  >> /etc/cron.allow
chmod 400 /etc/cron.allow
chown root:root /etc/cron.allow
echo "cron配置完成"

#配置特定用户进行sudo提权
echo "正在配置特定用户进行sudo提权"
echo "执行sudo账户创建"
user=sudouser
password=centos
useradd $user
echo "$password" | passwd --stdin $user &> /dev/null
echo "用户创建成功,用户名$user,密码$password"

echo "%$user  ALL=(ALL)       NOPASSWD: ALL" >> /etc/sudoers
echo
echo "sudo提权完成"

#登陆密码有效日期修改

#定义要修改的配置文件路径
config_file="/etc/login.defs"

#需要修改的参数数组
parameters=("PASS_MAX_DAYS" "PASS_MIN_DAYS" "PASS_WARN_AGE")
new_values=("180" "0" "7")
# 备份原始配置文件
backup_file="${config_file}.bak"
cp "$config_file" "$backup_file"
echo "已备份原始配置文件到 $backup_file"
index=0
# 遍历参数数组
for param in "${parameters[@]}"; do
    # 获取当前参数的值
    new_value="${new_values[$index]}"
    sed -i "s/^$param.*/$param\t$new_value/" "$config_file"
    echo "$param 已更新为 $new_value。"
    ((index++))
done
echo "配置修改完成"

#配置densec
sed -i 's/dnssec-enable no/dnssec-enable yes/g' /etc/named.conf

#添加文件权限
chmod 644 /etc/passwd
chmod 600 /etc/shadow
chmod 644 /etc/group
chmod 440 /etc/sudoers
chmod 600 /etc/ssh/sshd_config
chmod 644 /etc/fstab
chmod 644 /etc/hosts
chmod 600 /etc/crontab
chmod 644 /etc/resolv.conf

echo "已完成文件权限修改"
echo

#添加文件保护
files1=(

        "/etc/passwd"
        "/etc/shadow"
        "/etc/hosts"
        "/etc/sudoers"
        "/etc/ssh/sshd_config"
        "/etc/fstab"
        "/etc/crontab"
        "/etc/group"
)

files2=(
        "/var/log/secure"
        "/var/log/auth.log"
        "/var/log/audit/audit.log"
        "/var/log/messages"
)
for file in "${files1[@]}"; do
    if [ -f "$file" ]; then
        chattr +i "$file"
        echo "已加固: $file(不可变属性)"
    else
        echo "警告: $file 不存在"
    fi
done

for file in "${files2[@]}"; do
    if [ -f "$file" ]; then
        chattr +a "$file"
        echo "已加固: $file(追加属性)"
    fi
done

#grub加密
grub_password=centos

# 生成加密后的密码字符串
encrypted_password=$(echo -e "$grub_password\n$grub_password" | grub2-mkpasswd-pbkdf2 2>/dev/null | awk '/grub.pbkdf2/ {print $NF}')
# 检查是否成功生成加密密码
if [ $? -ne 0 ]; then
    echo "生成加密密码失败"
    exit 1
fi

# 将加密后的密码添加到GRUB配置文件中
echo "设置GRUB密码..."
{
    echo 'set superusers="root"'
    echo "password_pbkdf2 root $encrypted_password"
} >> /etc/grub.d/40_custom

# 更新GRUB配置
echo "更新GRUB配置..."
grub2-mkconfig -o /boot/grub2/grub.cfg

# 提示用户完成
echo "GRUB密码设置成功,密码为Bw-t@906,请重启系统以生效。"
 
  
6.创建客户端虚拟机
#选择对应的初始化安装后开始安装
#使用sudouser用户登陆测试,能够成功登陆说明脚本执行成功

CentOS 运维避坑实战

CentOS7.9 安装 Python3.8.16 后 yum 报错,快速修复方案

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值