目录
1.PXE原理
PXE是一种基于 TCP/IP、DHCP和 TFTP网络协议的技术,允许计算机在没有本地存储设备(如硬盘)或操作系统的情况下,从网络远程启动并加载操作系统。通过网络下载到本地运行。
1. dhcp #客户端机器在开机后会到服务器端的dhcp服务上获取ip,dhcp在接收客户端的请求后会根据自身的配置分配ip给客户端,并提供tftp服务器和引导文件pxelinux.02. tftp-server #提供tftp协议,令客户主机可以读取到预安装环境3. pxelinux.0 #引导文件,当客户端机器从服务端的tftp中获取后会加载此文件,客户端会从服务端拉取对应的配置文件(pxelinux.cfg),并加载启动菜单和内核参数4. syslinux #提供pxelinux.0文件5. httpd #提供后续客户端请求下载操作系统内核和根文件系统映像6. system-config-kickstart #若服务端安装了GUI界面,可以通过该软件使用图形化配置ks.cfg文件
2.前置配置
- 网络配置 && 关闭防火请与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用户登陆测试,能够成功登陆说明脚本执行成功

7216

被折叠的 条评论
为什么被折叠?



