linux学习第七周总结

本周起,开始学习综合型的各种服务,不再是一条一条的单个命令,对于我这种小白来说难度加大了许多,综合性试验各种配置,都需要良好的理解和执行,这个时间也是提升最快的时间,所以,继续坚持,保持良好的的学习生活习惯,坚持下去。本周内容

  • 加密和安全
  • 网络时间服务和chrony
  • 运维自动化之系统安装

一、加密和安全

1.安全机制

信息安全防护的目标  
保密性 Confidentiality  
完整性 Integrity  
可用性 Usability  
可控制性 Controlability  
不可否认性 Non-repudiation   
安全防护环节
物理安全:各种设备/主机、机房环境
系统安全:主机或设备的操作系统
应用安全:各种网络服务、应用程序
网络安全:对网络访问的控制、防火墙规则
数据安全:信息的备份与恢复、加密解密
管理安全:各种保障性的规范、流程、方法  
安全攻击: STRIDE
Spoofing 假冒
Tampering 篡改
Repudiation 否认
Information Disclosure 信息泄漏
Denial of Service 拒绝服务
Elevation of Privilege 提升权限  
安全设计基本原则
使用成熟的安全系统
以小人之心度输入数据
外部系统是不安全的
最小授权
减少外部接口
缺省使用安全模式
安全不是似是而非
从STRIDE思考
在入口处检查
从管理上保护好你的系统

2.加密算法

对称加密算法  
    对称加密:加密和解密使用同一个密钥
    DES:Data Encryption Standard,56bits
    3DES:
    AES:Advanced (128, 192, 256bits)
    Blowfish,Twofish
    IDEA,RC6,CAST5  
    特性:
    1、加密、解密使用同一个密钥,效率高
    2、将原始数据分割成固定大小的块,逐个进行加密
    缺陷:
    1、密钥过多
    2、密钥分发
    3、数据来源无法确认  
非对称加密算法
    公钥加密:密钥是成对出现
    公钥:公开给所有人;public key
    私钥:自己留存,必须保证其私密性;secret key
    特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
    功能:
    数字签名:主要在于让接收方确认发送方身份
    对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方
    数据加密:适合加密较小数据
    缺点:密钥长,加密解密效率低下
    算法:
    RSA(加密,数字签名)
    DSA(数字签名)
    ELGamal 
基于一对公钥/密钥对
    用密钥对中的一个加密,另一个解密    
实现加密:
    • 接收者
    生成公钥/密钥对:P和S
    公开公钥P,保密密钥S
    • 发送者
    使用接收者的公钥来加密消息M
    将P(M)发送给接收者
    • 接收者
    使用密钥S来解密:M=S(P(M))
单向散列
将任意数据缩小成固定大小的“指纹”
    • 任意长度输入
    • 固定长度输出
    • 若修改数据,指纹也会改变(“不会产生冲突”)
    • 无法从指纹中重新生成数据(“单向”)
功能:数据完整性
常见算法
    md5: 128bits、sha1: 160bits、sha224 、sha256、sha384、sha512
常用工具
    • md5sum | sha1sum [ --check ] file
    • openssl、gpg
    • rpm -V
密钥交换
密钥交换:IKE( Internet Key Exchange )
公钥加密:
    DH (Deffie-Hellman):生成会话密钥,由惠特菲尔德·迪菲(BaileyWhitfield Diffie)和马丁·赫尔曼(Martin Edward Hellman)在1976年发表
DH:
    A: g,p 协商生成公开的整数g, 大素数p
    B: g,p
    A:生成隐私数据 :a (a<p ),计算得出 g^a%p,发送给B
    B:生成隐私数据 :b,计算得出 g^b%p,发送给A
    A:计算得出 [(g^b%p)^a] %p = g^ab%p,生成为密钥
    B:计算得出 [(g^a%p)^b] %p = g^ab%p,生成为密钥

3.CA和证书

PKI: Public Key Infrastructure
    签证机构:CA(Certificate Authority)
    注册机构:RA
    证书吊销列表:CRL
    证书存取库:
X.509:定义了证书的结构以及认证协议标准  
    版本号       主体公钥
    序列号       CRL分发点
    签名算法     拓展信息
    颁发者       发行者签名
    有效期限
    主体名称
证书获取
证书类型:
    证书授权机构的证书
    服务器
    用户证书
获取证书两种方法:
    • 使用证书授权机构
        生成证书请求(csr)
        将证书请求csr发送给CA
        CA签名颁发证书
    • 自签名的证书
        自已签发自己的公钥
安全协议  
SSL:Secure Socket Layer,TLS: Transport Layer Security
    1995:SSL 2.0 Netscape
    1996:SSL 3.0
    1999:TLS 1.0
    2006:TLS 1.1 IETF(Internet工程任务组) RFC 4346
    2008:TLS 1.2 当前使用
    2015:TLS 1.3
    功能:机密性,认证,完整性,重放保护
两阶段协议,分为握手阶段和应用阶段
    握手阶段(协商阶段):客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。后续通信使
    用的所有密钥都是通过MasterSecret生成。应用阶段:在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信
Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身
份认证可选)、密钥交换
ChangeCipherSpec 协议:一条消息表明握手协议已经完成
Alert 协议:对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,
fatal类型错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告
Record 协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等
HTTPS 协议:就是“HTTP 协议”和“SSL/TLS 协议”的组合。HTTP over
SSL”或“HTTP over TLS”,对http协议的文本数据进行加密处理后,成为二进制形式传输

4.openssl

OpenSSL:开源项目
    三个组件:
        openssl:多用途的命令行工具,包openssl
        libcrypto:加密算法库,包openssl-libs
        libssl:加密模块应用库,实现了ssl及tls,包nss
    openssl命令:
        两种运行模式:交互模式和批处理模式
        openssl version:程序版本号
        标准命令、消息摘要命令、加密命令
            标准命令:enc, ca, req, ...
对称加密:
    工具:openssl enc, gpg
    算法:3des, aes, blowfish, twofish
enc命令:
    帮助:man enc
    加密:
    openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher
    解密:
    openssl enc -d -des3 -a -salt –in testfile.cipher -out testfile openssl ?
生成用户密码:
    passwd命令:
    帮助:man sslpasswd
    openssl passwd -1 -salt SALT(最多8位)
    openssl passwd -1 –salt centos
生成随机数:
    帮助:man sslrand
    openssl rand -base64|-hex NUM
    NUM: 表示字节数,使用-hex,每个字符为十六进制,相当于4位二进制,
    出现的字符数为NUM*2
生成私钥
    openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
    (umask 077; openssl genrsa –out test.key –des 2048)
    openssl rsa -in test.key –out test2.key 将加密key解密
从私钥中提取出公钥
    openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE
    openssl rsa –in test.key –pubout –out test.key.pub

5.证书管理

建立私有CA:
证书申请及签署步骤:
    1、生成申请请求
    2、RA核验
    3、CA签署
    4、获取证书
    openssl的配置文件:/etc/pki/tls/openssl.cnf
    三种策略:match匹配、optional可选、supplied提供
    match:要求申请填写的信息跟CA设置信息必须一致
    optional:可有可无,跟CA设置信息可不一致
    supplied:必须填写这项申请信息
1、创建所需要的文件
    touch /etc/pki/CA/index.txt 生成证书索引数据库文件
    echo 01 > /etc/pki/CA/serial 指定第一个颁发证书的序列号
2、 CA自签证书
    生成私钥
    cd /etc/pki/CA/
    (umask 066; openssl genrsa -out private/cakey.pem 2048)
    生成自签名证书
    openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem
3、颁发证书
    在需要使用证书的主机生成证书请求
    给web服务器生成私钥
    (umask 066; openssl genrsa –out /data/test.key 2048)
    生成证书申请文件
    openssl req -new -key /data/test.key -out /data/test.csr
    将证书请求文件传输给CA
    CA签署证书,并将证书颁发给请求者
    openssl ca -in /tmp/test.csr –out /etc/pki/CA/certs/test.crt -days 100
    注意:默认要求 国家,省,公司名称三项必须和CA一致
    查看证书中的信息:
    openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|issuer|subject|serial|datesopenssl ca -status SERIAL 查看指定编号的证书状态
    4、吊销证书
    在客户端获取要吊销的证书的serial
    openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject
     在CA上,根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致,
    吊销证书:
    openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
     指定第一个吊销证书的编号,注意:第一次更新证书吊销列表前,才需要执行
    echo 01 > /etc/pki/CA/crlnumber
     更新证书吊销列表
    openssl ca -gencrl -out /etc/pki/CA/crl.pem
    查看crl文件:
    openssl crl -in /etc/pki/CA/crl.pem -noout -text

6.ssh服务和dropbear

ssh: secure shell, protocol, 22/tcp, 安全的远程登录
 具体的软件实现:
    OpenSSH: ssh协议的开源实现,CentOS默认安装
    dropbear:另一个开源实现
SSH协议版本
    v1: 基于CRC-32做MAC,不安全;man-in-middle
    v2:双方主机协议选择安全的MAC方式
基于DH算法做密钥交换,基于RSA或DSA实现身份认证
 两种方式的用户登录认证:
    基于password
    基于key
Openssh软件组成
相关包:
    openssh
    openssh-clients
    openssh-server
工具:
    基于C/S结构
    Client: ssh, scp, sftp,slogin
    Windows客户端:
    xshell, putty, securecrt, sshsecureshellclient
    Server: sshd
配置文件:/etc/ssh/ssh_config
ssh服务登录验证方式:
    用户/口令
    基于密钥
基于用户和口令登录验证
    1 客户端发起ssh请求,服务器会把自己的公钥发送给用户
    2 用户会根据服务器发来的公钥对密码进行加密
    3 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功
基于密钥的登录方式
    1 首先在客户端生成一对密钥(ssh-keygen)
    2 并将客户端的公钥ssh-copy-id 拷贝到服务端
    3 当客户端再次发送一个连接请求,包括ip、用户名
    4 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:magedu
    5 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
    6 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
    7服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录
基于密钥的认证:
    (1) 在客户端生成密钥对
    ssh-keygen -t rsa [-P ''] [-f “~/.ssh/id_rsa"]
    (2) 把公钥文件传输至远程服务器对应用户的家目录
    ssh-copy-id [-i [identity_file]] [user@]host
    (3) 测试
    (4) 在SecureCRT或Xshell实现基于key验证
    (5)重设私钥口令:
    ssh-keygen –p
    (6)验证代理(authentication agent)保密解密后的密钥
    •这样口令就只需要输入一次
    •在GNOME中,代理被自动提供给root用户
    •否则运行ssh-agent bash
    (7)钥匙通过命令添加给代理
    ssh-add
scp命令
两种方式:
scp [options] [user@]host:/sourcefile /destpath
scp [options] /sourcefile [user@]host:/destpath
rsync命令
基于ssh和rsh服务实现高效率的远程系统之间复制文件
使用安全的shell连接做为传输方式
    •rsync -av /etc server1:/tmp 复制目录和目录下文件
    •rsync -av /etc/ server1:/tmp 只复制目录下文件
比scp更快,只复制不同的文件
sftp命令
交互式文件传输工具
用法和传统的ftp工具相似
利用ssh服务实现安全的文件上传和下载
使用ls cd mkdir rmdir pwd get put等指令,可用?或help获取帮助信息
sftp [user@]host
sftp> help
pslurp命令
pslurp功能是将远程主机的文件批量复制到本地
批量下载目标服务器的passwd文件至/app下,并更名为user
pslurp -H 192.168.1.10 -L /app /etc/passwd user
ssh服务器
    服务器端:sshd, 配置文件: /etc/ssh/sshd_config
ssh服务的最佳实践
    建议使用非默认端口
    禁止使用protocol version 1
    限制可登录用户
    设定空闲会话超时时长
    利用防火墙设置ssh访问策略
    仅监听特定的IP地址
    基于口令认证时,使用强密码策略
    tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12| xargs
    使用基于密钥的认证
    禁止使用空密码
    禁止root用户直接登录
    限制ssh的访问频度和并发在线数
    经常分析日志

7.dropbear

源码编译安装:
•1、安装开发包组:yum groupinstall “Development tools”
•2、下载dropbear-2017.75.tar.bz2
•3、tar xf dropbear-2017.75.tar.bz2
•4、less INSTALL README
•5、./configure
•6、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"
•7、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install
启动ssh服务:
•8、ls /usr/local/sbin/ /usr/local/bin/
•9、/usr/local/sbin/dropbear -h
•10、mkdir /etc/dropbear
•11、dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048
•12、dropbearkey -t dss -f /etc/dropbear/dropbear_dsa_host_key
•13、dropbear -p :2222 -F –E #前台运行
dropbear -p :2222 #后台运行
客户端访问:
•14、ssh -p 2222 root@127.0.0.1
•15、dbclient -p 2222 root@127.0.0.1

8..aide
当一个入侵者进入了你的系统并且种植了木马,通常会想办法来隐蔽这个木马(除了木马自身的一些隐蔽特性外,他会尽量给你检查系统的过程设置障碍),通常入侵者会修改一些文件,比如管理员通常用ps -aux来查看系统进程,那么入侵者很可能用自己经过修改的ps程序来替换掉你系统上的ps程序,以使用ps命令查不到正在运行的木马程序。如果入侵者发现管理员正在运行crontab作业,也有可能替换掉crontab程序等等。所以由此可以看出对于系统文件或是关键文件的检查是很必要的。目前就系统完整性检查的工具用的比较多的有两款:Tripwire和AIDE,前者是一款商业软件,后者是一款免费的但功能也很强大的工具

AIDE(Advanced Intrusion Detection Environment)
•高级入侵检测环境)是一个入侵检测工具,主要用途是检查文件的完整性,审计计算机上的那些文件被更改过了
•AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件。AIDE数据库能够保存文件的各种属性,包括:权限(permission)、索引节点序号(inode number)、所属用户(user)、所属用户组(group)、文件大小、最后修改时间(mtime)、创建时间(ctime)、最后访问时间(atime)、增加的大小以及连接数。AIDE还能够使用下列算法:sha1、md5、rmd160、tiger,以密文形式建立每个文件的校验码或散列号
•这个数据库不应该保存那些经常变动的文件信息,例如:日志文件、邮件、/proc文件系统、用户起始目录以及临时目录
安装
yum install aide
配置文件:/etc/aide.conf
初始化默认的AIDE的库:
/usr/local/bin/aide --init
生成检查数据库(建议初始数据库存放到安全的地方)
cd /var/lib/aide
mv aide.db.new.gz aide.db.gz
检测: /usr/local/bin/aide --check
更新数据库
aide --update

9..sudo

su 切换身份:su –l username –c ‘command’
sudo
•来自sudo包,man 5 sudoers
•sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
•sudo可以提供日志,记录每个用户使用sudo操作
•sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机
•sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”
•通过visudo命令编辑配置文件,具有语法检查功能
visudo -c 检查语法
visudo -f /etc/sudoers.d/test
配置文件:/etc/sudoers, /etc/sudoers.d/
时间戳文件:/var/db/sudo
日志文件:/var/log/secure
授权规则格式:
    用户 登入主机=(代表用户) 命令
    root ALL=(ALL) ALL
别名
四种类型:User_Alias, Runas_Alias, Host_Alias ,Cmnd_Alias
别名格式:[A-Z]([A-Z][0-9]_)*
别名定义:
Alias_Type NAME1 = item1, item2, item3 : NAME2 = item4, item5
sudo –i –u wang 切换身份

10.TCP

作者:Wieste Venema,IBM,Google
工作在第四层(传输层)的TCP协议
对有状态连接的特定服务进行安全检测并实现访问控制
以库文件形式实现
某进程是否接受libwrap的控制取决于发起此进程的程序在编译时是否针对libwrap进行编译的
判断服务程序是否能够由tcp_wrapper进行访问控制的方法:
    ldd /PATH/TO/PROGRAM|grep libwrap.so
    strings PATH/TO/PROGRAM|grep libwrap.so
配置文件:/etc/hosts.allow, /etc/hosts.deny
帮助参考:man 5 hosts_access,man 5 hosts_options
检查顺序:hosts.allow,hosts.deny(默认允许)
注意:一旦前面规则匹配,直接生效,将不再继续
基本语法:
daemon_list@host: client_list [ :options :option… ]
Daemon_list@host格式
    单个应用程序的二进制文件名,而非服务名,例如vsftpd
    以逗号或空格分隔的应用程序文件名列表,如:sshd,vsftpd
    ALL表示所有接受tcp_wrapper控制的服务程序
    主机有多个IP,可用@hostIP来实现控制
    如:in.telnetd@192.168.0.254
EXCEPT用法:
    vsftpd: 172.16. EXCEPT 172.16.100.0/24 EXCEPT 172.16.100.1

二、网络时间服务器

时间同步:多主机协作工作时,各个主机的时间同步很重要,时间不一致会造成很多重要应用的故障,如:加密协议,日志,集群等, 利用NTP(Network Time Protocol) 协议使网络中的各个计算机时间达到同步。目前NTP协议属于运维基础架构中必备的基本服务之一  
时间同步实现:ntp,chrony  
ntp:将系统时钟和世界协调时UTC同步,精度在局域网内可达0.1ms,在互联网上绝大多数的地方精度可以达到1-50ms,项目官网:http://www.ntp.org  
chrony:实现NTP协议的的自由软件。可使系统时钟与NTP服务器,参考时钟(例如GPS接收器)以及使用手表和键盘的手动输入进行同步。还可以作为NTPv4(RFC 5905)服务器和对等体运行,为网络中的计算机提供时间服务。设计用于在各种条件下良好运行,包括间歇性和高度拥挤的网络连接,温度变化(计算机时钟对温度敏感),以及不能连续运行或在虚拟机上运行的系统。通过Internet同步的两台机器之间的典型精度在几毫秒之内;在LAN上,精度通常为几十微秒。利用硬件时间戳或硬件参考时钟,可实现亚微秒的精度  
chrony 的优势:
更快的同步只需要数分钟而非数小时时间,从而最大程度减少了时间和频率误差,对于并非全天 24 小时运行的虚拟计算机而言非常有用
能够更好地响应时钟频率的快速变化,对于具备不稳定时钟的虚拟机或导致时钟频率发生变化的节能技术而言非常有用
在初始同步后,它不会停止时钟,以防对需要系统时间保持单调的应用程序造成影响
在应对临时非对称延迟时(例如,在大规模下载造成链接饱和时)提供了更好的稳定性
无需对服务器进行定期轮询,因此具备间歇性网络连接的系统仍然可以快速同步时钟
两个主要程序:chronyd和chronyc
服务unit 文件: /usr/lib/systemd/system/chronyd.service
监听端口: 323/udp,123/udp
配置文件: /etc/chrony.conf
server - 可用于时钟服务器,iburst 选项当服务器可达时,发送一个八个数据包而不是通常的一个数据包。 包间隔通常为2秒,可加快初始同步速度
driftfile - 根据实际时间计算出计算机增减时间的比率,将它记录到一个文件中,会在重启后为系统时钟作出补偿
rtcsync - 启用内核模式,系统时间每11分钟会拷贝到实时时钟(RTC)
allow / deny - 指定一台主机、子网,或者网络以允许或拒绝访问本服务器
cmdallow / cmddeny - 可以指定哪台主机可以通过chronyd使用控制命令
bindcmdaddress - 允许chronyd监听哪个接口来接收由chronyc执行的命令
makestep - 通常chronyd将根据需求通过减慢或加速时钟,使得系统逐步纠正所有时间偏差。在某些特定情况下,系统时钟可能会漂移过快,导致该调整过程消耗很长的时间来纠正系统时钟。该指令强制chronyd在调整期大于某个阀值时调整系统时钟
local stratum 10 - 即使server指令中时间服务器不可用,也允许将本地时间作为标准时间授时给其它客户端
公共NTP服务
pool.ntp.org:项目是一个提供可靠易用的NTP服务的虚拟集群cn.pool.ntp.org,0-3.cn.pool.ntp.org
阿里云公共NTP服务器
Unix/linux类:ntp.aliyun.com,ntp1-7.aliyun.com
windows类: time.pool.aliyun.com
210.72.145.44 (国家授时中心服务器IP地址)
大学ntp服务
s1a.time.edu.cn 北京邮电大学 s1b.time.edu.cn 清华大学 s1c.time.edu.cn 北京大学
时间工具
timedatectl
    查看日期时间、时区及NTP状态:timedatectl
    查看时区列表:timedatectl list-timezones
    修改时区:timedatectl set-timezone Asia/Shanghai
    修改日期时间:timedatectl set-time "2017-01-23 10:30:00"
    开启NTP: timedatectl set-ntp true/flase
system-config-date:图形化配置chrony服务的工具

三、运维自动化之系统安装

1.CentOS系统安装

系统启动流程:  
bootloader-->kernel(initramfs)-->rootfs-->/sbin/init
MBR:isolinux/boot.cat
stage2: isolinux/isolinux.bin
配置文件:isolinux/isolinux.cfg
    每个对应的菜单选项:
    加载内核:isolinuz/vmlinuz
    向内核传递参数:append initrd=initrd.img
装载根文件系统,并启动anaconda
    默认启动GUI接口
    若是显式指定使用TUI接口:向内核传递text参数即可
    (1)按tab键,在后面增加text
    (2)按ESC键:boot: linux text
Anaconda安装系统分成三个阶段:
安装前配置阶段
    安装过程使用的语言
    键盘类型
    安装目标存储设备
        Basic Storage:本地磁盘
        特殊设备:iSCSI
    设定主机名
    配置网络接口
    时区
    管理员密码
    设定分区方式及MBR的安装位置
    创建一个普通用户
    选定要安装的程序包
安装阶段
    在目标磁盘创建分区,执行格式化操作等
    将选定的程序包安装至目标位置
    安装bootloader和initramfs
启动安装过程一般应位于引导设备;后续的anaconda及其安装用到的程序包等
可来自下面几种方式:
    本地光盘
    本地硬盘
    NFS
    URL:
        ftp server: yum repository
        http server: yum repostory
anaconda的配置方式:
    (1) 交互式配置方式
    (2) 通过读取事先给定的配置文件自动完成配置
            按特定语法给出的配置选项
            kickstart文件
安装boot引导选项:boot:
    text: 文本安装方式
    askmethod: 手动指定使用的安装方法
与网络相关的引导选项:
    ip=IPADDR
    netmask=MASK
    gateway=GW
    dns=DNS_SERVER_IP
    ifname=NAME:MAC_ADDR
与远程访问功能相关的引导选项:
    vnc
    vncpassword='PASSWORD'
命令段:指明各种安装前配置,如键盘类型等
程序包段:指明要安装的程序包组或程序包,不安装的程序包等
    %packages
    @group_name
    package
    -package
    %end
脚本段:
    %pre: 安装前脚本
    运行环境:运行于安装介质上的微型Linux环境
    %post: 安装后脚本
    运行环境:安装完成的系统
kickstart文件创建
    创建kickstart文件的方式
    直接手动编辑
    依据某模板修改
    可使用创建工具:system-config-kickstart
    依据某模板修改并生成新配置
    /root/anaconda-ks.cfg
检查ks文件的语法错误:ksvalidator
    ksvalidator /PATH/TO/KICKSTART_FILE
系统光盘中isolinux目录列表
    solinux.bin:光盘引导程序,在mkisofs的选项中需要明确给出文件路径,这个文件属于SYSLINUX项目
    isolinux.cfg:isolinux.bin的配置文件,当光盘启动后(即运行isolinux.bin),会自动去找isolinux.cfg文件
    vesamenu.c32:是光盘启动后的安装图形界面,也属于SYSLINUX项目,menu.c32版本是纯文本的菜单
    Memtest:内存检测,这是一个独立的程序
    splash.jgp:光盘启动界面的背景图
    vmlinuz是内核映像
    initrd.img是ramfs (先cpio,再gzip压

2.pxe自动化安装centos

DHCP服务
网络配置
    静态指定
    动态获取: bootp:boot protocol MAC与IP一一静态对应
    dhcp:增强的bootp,动态
DHCP: (Dynamic Host Configuration Protocol)
    动态主机配置协议
    局域网协议,UDP协议
主要用途:
    用于内部网络和网络服务供应商自动分配IP地址给用户
    用于内部网络管理员作为对所有电脑作集中管理的手段
使用场景
    自动化安装系统
    解决IPV4资源不足问题
配置dhcpd.conf示例
    option domain-name "magedu.com";
    option domain-name-servers 192.168.0.1,8.8.8.8;
    default-lease-time 86400;
    max-lease-time 86400;
    subnet 192.168.100.0 netmask 255.255.255.0 {
    range 192.168.100.1 192.168.100.200;
    option routers 192.168.100.1;
    }
httpd服务
配置文件共享服务:
    systemctl enable httpd
    systemctl start httpd
    mkdir /var/www/html/centos/7
    mount /dev/sr0 /var/www/html/centos/7
准备kickstart文件
    /var/www/html/ks/centos7.cfg 注意:权限
配置tftp服务
    systemctl enable tftp.socket
    systemctl start tftp.socket
1  HTTP
yum install httpd 
systemctl start httpd 
systemctl enable httpd

/dev/sr0    /var/www/html/centos/7/os/x86_64
/dev/sr1    /var/www/html/centos/6/os/x86_64

2 准备KS文件
/var/www/html/ks7_mini.cfg
url --url="http://192.168.36.7/centos/7/os/x86_64/"
/var/www/html/ks6_mini.cfg
url --url="http://192.168.36.7/centos/6/os/x86_64/"

3 tftp 
yum install tftp-server
systemctl start tftp
systemctl enable  tftp

4 DHCP服务
yum install dhcp
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf

vim  /etc/dhcp/dhcpd.conf
option domain-name "magedu.com";
option domain-name-servers 114.114.114.114, 223.5.5.5;
default-lease-time 86400 ;
max-lease-time 864000;
subnet 192.168.36.0 netmask 255.255.255.0 {
range 192.168.36.10 192.168.36.100;
option routers 192.168.36.254;
next-server 192.168.36.7;
filename "pxelinux.0";
}

systemctl start dhcpd
systemctl enable dhcpd

5 准备启动文件
yum install syslinux 
cp /usr/share/syslinux/pxelinux.0  /var/lib/tftpboot 
cp /usr/share/syslinux/menu.c32    /var/lib/tftpboot
cp /misc/cd/isolinux/vmlinuz  /var/lib/tftpboot/
cp /misc/cd/isolinux/initrd.img  /var/lib/tftpboot/
mkdir /var/lib/tftpboot/pxelinux.cfg/
cp /misc/cd/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
tree /var/lib/tftpboot/
/var/lib/tftpboot/
├── initrd.img
├── menu.c32
├── pxelinux.0
├── pxelinux.cfg
│?? └── default
└── vmlinuz

1 directory, 5 files

6 准备启动菜单文件
vim /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
timeout 60
menu title Auto Install CentOS 
label centos7 
menu label Install CentOS ^Mini 7
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.36.7/ksdir/ks7_mini.cfg
label local
menu default
menu label Boot from ^local drive
localboot 0xffff

7 修改为支持多系统
mkdir /var/lib/tftpboot/kernel{6,7}
cd /var/lib/tftpboot/
mv vmlinuz initrd.img kernel7/
cp /var/www/html/centos/6/os/x86_64/isolinux/vmlinuz kernel6
cp /var/www/html/centos/6/os/x86_64/isolinux/initrd.img kernel6/
[root@centos7 tftpboot]#tree /var/lib/tftpboot/
/var/lib/tftpboot/
├── kernel6
│?? ├── initrd.img
│?? └── vmlinuz
├── kernel7
│?? ├── initrd.img
│?? └── vmlinuz
├── menu.c32
├── pxelinux.0
└── pxelinux.cfg
    └── def
3 directories, 7 files

3.cobbler自动安装

1 安装包和配置服务
yum install cobbler  dhcp -y
systemctl enable tftp dhcpd httpd cobblerd
systemctl start tftp  httpd cobblerd

2 修改cobbler 配置文件
vim /etc/cobbler/settings
server: cobblerIP  384
next_server: cobblerIP 272 
default_password_crypted: "$1$VBqc7U0W$F2qhI5oZwR8chJBU.mAly1"   101
manage_dhcp: 1    242

systemctl restart cobblerd 
cobbler get-loaders
cobbler sync

3 配置dhcp服务
vim /etc/cobbler/dhcp.template
subnet 192.168.36.0 netmask 255.255.255.0 {
    option routers             192.168.36.254;
    option domain-name-servers 1.1.1.1;
    option subnet-mask         255.255.255.0;
    range dynamic-bootp        192.168.36.100 192.168.36.254;

cobbler sync

4导入安装源文件
cobbler import --path=/misc/cd --name=Centos-6.10 --arch=x86_64

5 生成ks文件
vim /var/lib/cobbler/kickst