0%

使用各种服务和部署


使用ssh服务管理远程主机

配置网卡服务

配置网卡参数

使用nmtui命令来配置网络, 执行nmtui命令运行网络配置工具.
第1步:执行命令“nmtui"

选中Edit a connection并按下回车键
第2步:选择要编辑的网卡

选中要编辑的网卡名称, 然后按下Edit(编辑)按钮.
第3步:编辑网卡信息

把网络IPv4的配置方式改成Manual(手动)
第4步:将网卡的IPv4配置项设置成手动

按下Show(显示)按钮, 显示信息配置框.
第5步:敲击Ipv4配置项右侧的Show

在服务器主机的网络配置信息中填写IP地址192.168.10.10/24
第6步:填入IP地址信息

单击OK按钮保存配置
第7步:敲击最下面的OK

单击Quit按钮退出
第8步:确认信息填写正确后退出

用Vim编辑器将网卡配置文件中的ONBOOT参数修改成yes, 没有激活的网卡会在系统重启后就被激活.
vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
systemctl restart network

创建网络会话

RHEL和CentOS系统默认使用NetworkManager来提供网络服务, 这是一种动态管理网络配置的守护进程, 能够让网络设备保持连接状态. 可以使用nmcli命令来管理Network Manager服务.
nmcli是一款基于命令行的网络配置工具, 功能丰富, 参数众多. 它可以轻松地查看网络信息或网络状态:
nmcli connection show
nmcli con show eno16777736

RHEL7系统支持网络会话功能, 允许用户在多个配置文件中快速切换(非常类似于firewalld防火墙服务中的区域技术).
使用nmcli命令并按照”connection add con-name type ifname”的格式来创建网络会话.

假设将公司网络中的网络会话称之为company, 将家庭网络中的网络会话称之为house, 现在依次创建各自的网络会话:

使用con-name参数指定公司所使用的网络会话名称company, 然后依次用ifname参数指定本机的网卡名称, 用autoconnect no参数设置该网络会话默认不被自动激活, 以及用ip4及gw4参数手动指定网络的IP地址:
nmcli connection add con-name company ifname eno16777736 autoconnect no type ethernet ip4 192.168.10.10/24 gw4 192.168.10.1

使用con-name参数指定家庭所使用的网络会话名称house. 因为我们想从外部DHCP服务器自动获得IP地址, 因此这里不需要进行手动指定.
nmcli connection add con-name house type ethernet ifname eno16777736

使用nmcli命令查看创建的所有网络会话:
nmcli connection show

使用nmcli命令配置过的网络会话是永久生效的, 启用house网络会话, 网卡就能自动通过DHCP获取到IP地址.
nmcli connection up house

把虚拟机系统的网卡(网络适配器)切换成桥接模式, 然后重启虚拟机系统.
设置虚拟机网卡的模式

绑定两块网卡

一般来讲, 生产环境必须提供7×24小时的网络传服务. 借助于网卡绑定技术, 不仅可以提高网络传输速度, 更重要的是, 还可以确保在其中一块网卡出现故障时, 依然可以正常提供网络服务.

第1步: 在虚拟机系统中再添加一块网卡设备, 请确保两块网卡都处在同一个网络连接中(即网卡模式相同), 处于相同模式的网卡设备才可以进行网卡绑定, 否则这两块网卡无法互相传送数据.
编辑虚拟机设置,添加网络适配器
保证两块网卡的连接类型都是相同的

第2步: 使用Vim文本编辑器来配置网卡设备的绑定参数, 需要注意的是, 这些原本独立的网卡设备此时需要被配置成为一块”从属”网卡, 服务于”主”网卡, 不应该再有自己的IP地址等信息. 在进行了初始设置之后, 它们就可以支持网卡绑定.
vim /etc/sysconfig/network-scripts/ifcfg-eno

 TYPE=Ethernet
 BOOTPROTO=none
 ONBOOT=yes
 USERCTL=no
 DEVICE=eno
 MASTER=bond0
 SLAVE=yes

还需要将绑定后的设备命名为bond0并把IP地址等信息填写进去, 这样当用户访问相应服务的时候, 实际上就是由这两块网卡设备在共同提供服务.
vim /etc/sysconfig/network-scripts/ifcfg-bond0

 TYPE=Ethernet
 BOOTPROTO=none
 ONBOOT=yes
 USERCTL=no
 DEVICE=bond0
 IPADDR=192.168.10.10
 PREFIX=24
 DNS=192.168.10.1
 NM_CONTROLLED=no

第3步: 让Linux内核支持网卡绑定驱动. 常见的网卡绑定驱动有三种模式—mode0、mode1和mode6.

 mode0(平衡负载模式): 平时两块网卡均工作, 且自动备援, 但需要在与服务器本地网卡相连的交换机设备上进行端口聚合来支持绑定技术.
 mode1(自动备援模式): 平时只有一块网卡工作, 在它故障后自动替换为另外的网卡.
 mode6(平衡负载模式): 平时两块网卡均工作, 且自动备援, 无须交换机设备提供辅助支持.

使用Vim文本编辑器创建一个用于网卡绑定的驱动文件, 使得绑定后的bond0网卡设备能够支持绑定技术(bonding); 同时定义网卡以mode6模式进行绑定, 且出现故障时自动切换的时间为100毫秒.
vim /etc/modprobe.d/bond.conf

 alias bond0 bonding
 options bond0 miimon=100 mode=6 

第4步: 重启网络服务后网卡绑定操作即可成功. 正常情况下只有bond0网卡设备才会有IP地址等信息:
systemctl restart network

注: 出现该信息时, 无视即可.
重启网络服务后的提示

可以在本地主机执行ping 192.168.10.10命令检查网络的连通性. 为了检验网卡绑定技术的自动备援功能, 在虚拟机硬件配置中随机移除一块网卡设备, 可以非常清晰地看到网卡切换的过程(一般只有1个数据丢包). 然后另外一块网卡会继续为用户提供服务.
ping -t 192.168.10.10

远程控制服务

配置sshd服务

SSH(Secure Shell)是一种能够以安全的方式提供远程登录的协议, 也是目前远程管理Linux系统的首选方式. 想要使用SSH协议来远程管理Linux系统, 则需要部署配置sshd服务程序.
sshd是基于SSH协议开发的一款远程管理服务程序, 不仅使用起来方便快捷, 而且能够提供两种安全验证的方法:

 基于口令的验证—用账户和密码来验证登录
 基于密钥的验证—需要在本地生成密钥对, 然后把密钥对中的公钥上传至服务器并与服务器中的公钥进行比较. 该方式相较来说更安全.

sshd服务的配置信息保存在/etc/ssh/sshd_config文件中. 运维人员一般会把保存着最主要配置信息的文件称为主配置文件, 而配置文件中有许多以井号开头的注释行, 要想让这些配置参数生效, 需要在修改参数后再去掉前面的井号.

Port 22默认的sshd服务端口
ListenAddress 0.0.0.0设定sshd服务器监听的IP地址
Protocol 2SSH协议的版本号
HostKey /tc/ssh/ssh_host_keySSH协议版本为1时, DES私钥存放的位置.
HostKey /etc/ssh/ssh_host_rsa_keySSH协议版本为2时, RSA私钥存放的位置.
HostKey /etc/ssh/ssh_host_dsa_keySSH协议版本为2时, DSA私钥存放的位置.
PermitRootLogin yes设定是否允许root管理员直接登录
StrictModes yes当远程用户的私钥改变时直接拒绝连接
MaxAuthTries 6最大密码尝试次数
MaxSessions 10最大终端数
PasswordAuthentication yes是否允许密码验证
PermitEmptyPasswords no是否允许空密码登录(很不安全)

使用ssh命令进行远程连接, 其格式为ssh [参数] 主机IP地址. 要退出登录则执行exit命令.

想让新配置文件生效, 则需要手动重启相应的服务程序. 最好也将这个服务程序加入到开机启动项中, 这样系统在下一次启动时, 该服务程序便会自动运行, 继续为用户提供服务.
systemctl restart sshd  systemctl enable sshd

安全密钥验证

加密是对信息进行编码和解码的技术, 它通过一定的算法(密钥)将原本可以直接阅读的明文信息转换成密文形式. 密钥即是密文的钥匙, 有私钥和公钥之分. 在传输数据时, 如果担心被他人监听或截获, 就可以在传输前先使用公钥对数据加密处理, 然后再行传送.

第1步: 在客户端主机中生成”密钥对”

 ssh-keygen
 按回车键或设置密钥的存储路径
 再次按回车键或设置密钥的密码

第2步: 把客户端主机中生成的公钥文件传送至远程主机

 ssh-copy-id 192.168.10.10
 yes
 输入远程服务器密码

第3步: 对服务器进行设置, 使其只允许密钥验证, 拒绝传统的口令验证方式. 记得在修改配置文件后保存并重启sshd服务程序.

 vim /etc/ssh/sshd_config
 PasswordAuthentication no
 systemctl restart sshd

第4步: 在客户端尝试登录到服务器, 此时无须输入密码也可成功登录.
ssh 192.168.10.10

远程传输命令

scp(secure copy)是一个基于SSH协议在网络之间进行安全传输的命令, 其格式为scp [参数] 本地文件 远程帐户@远程IP地址:远程目录. 与cp命令不同, cp命令只能在本地硬盘中进行文件复制, 而scp不仅能够通过网络传送数据, 而且所有的数据都将进行加密处理.

参数作用
-v显示详细的连接进度
-P指定远程主机的sshd端口号
-r用于传送文件夹
-6使用IPv6协议

使用scp命令把文件从本地复制到远程主机时, 首先需要以绝对路径的形式写清本地文件的存放位置.

 echo "Welcome to LinuxProbe.Com" > readme.txt
 scp /root/readme.txt 192.168.10.20:/home
 输入远程服务器中root管理员的密码

使用scp命令把远程主机上的文件下载到本地主机, 其命令格式为scp [参数] 远程用户@远程IP地址:远程文件 本地目录.

 scp 192.168.10.20:/etc/redhat-release /root
 输入远程服务器中root管理员的密码

不间断会话服务

screen是一款能够实现多窗口远程控制的开源服务程序, 简单来说就是为了解决网络异常中断或为了同时控制多个远程终端窗口而设计的程序. 用户还可以使用screen服务程序同时在多个远程会话中自由切换, 能够做到实现如下功能:

 会话恢复: 即便网络中断, 也可让会话随时恢复, 确保用户不会失去对远程会话的控制.
 多窗口: 每个会话都是独立运行的, 拥有各自独立的输入输出终端窗口, 终端窗口内显示过的信息也将被分开隔离保存, 以便下次使用时依然能看到之前的操作记录.
 会话共享: 当多个用户同时登录到远程服务器时, 便可以使用会话共享功能让用户之间的输入输出信息共享.

在RHEL 7系统中, 没有默认安装screen服务程序, 因此需要配置Yum仓库来安装它. 首先将虚拟机的CD/DVD光盘选项设置为”使用ISO镜像文件”, 并选择已经下载好的系统镜像.
确认光盘已被选中

然后, 把光盘设备中的系统镜像挂载到/media/cdrom目录.

 mkdir -p /media/cdrom
 mount /dev/cdrom /media/cdrom

最后, 使用Vim文本编辑器创建Yum仓库的配置文件.

 vim /etc/yum.repos.d/rhel7.repo
 [rhel7]
 name=rhel7
 baseurl=file:///media/cdrom
 enabled=1
 gpgcheck=0

使用Yum仓库来安装screen服务程序
yum install screen

管理远程会话

screen命令可以用-S参数创建会话窗口; 用-d参数将指定会话进行离线处理; 用-r参数恢复指定会话; 用-x参数一次性恢复所有的会话; 用-ls参数显示当前已有的会话; 以及用-wipe参数把目前无法使用的会话删除, 等等.

创建一个名称为backup的会话窗口
screen -S backup

可以查看到当前的会话正在工作中
screen -ls

退出一个会话
exit

可以直接使用screen命令执行要运行的命令, 这样在命令中的一切操作也都会被记录下来, 当命令执行结束后screen会话也会自动结束.
screen vim memo.txt

来创建一个名为linux的会话, 然后强行把窗口关闭掉(这与进行远程连接时突然断网具有相同的效果):

 screen -S linux
 tail -f /var/log/messages

查看一下刚刚离线的会话名称, 然后尝试恢复回来就可以继续工作了:

 screen -ls
 screen -r linux

可以多创建几个会话窗口放在一起使用. 如果这段时间内不再使用某个会话窗口, 可以把它设置为临时断开(detach)模式, 随后在需要时再重新连接(attach)回来即可.

会话共享功能

screen命令不仅可以确保用户在极端情况下也不丢失对系统的远程控制, 保证了生产环境中远程工作的不间断性, 而且它还具有会话共享、分屏切割、会话锁定等实用的功能.

screen会话共享
首先, 使用ssh服务程序将终端A远程连接到服务器, 并创建一个会话窗口.

 ssh 192.168.10.10
 screen -S linuxprobe

然后, 使用ssh服务程序将终端B远程连接到服务器, 并执行获取远程会话的命令.

 ssh 192.168.10.10
 screen -x

使用Apache服务部署静态网站

网站服务程序

Web网络服务是一种被动访问的服务程序, 即只有接收到互联网中其他主机发出的请求后才会响应, 最终用于提供服务程序的Web服务器会通过HTTP(超文本传输协议)或HTTPS(安全超文本传输协议)把请求的内容传送给用户.
页面请求过程

第1步: 把光盘设备中的系统镜像挂载到/media/cdrom目录

 mkdir -p /media/cdrom
 mount /dev/cdrom /media/cdrom

第2步: 使用Vim文本编辑器创建Yum仓库的配置文件

 vim /etc/yum.repos.d/rhel7.repo
 [rhel7]
 name=rhel7
 baseurl=file:///media/cdrom
 enabled=1
 gpgcheck=0

第3步: 动手安装Apache服务程序, 注意: Apache服务的软件包名称为httpd.
yum install httpd

第4步: 启用httpd服务程序并将其加入到开机启动项中, 使其能够随系统开机而运行, 从而持续为用户提供Web服务:

 systemctl start httpd
 systemctl enable httpd

 firefox
 输入网址: 127.0.0.1

配置服务文件参数

httpd服务程序的主要配置文件及存放位置
服务目录/etc/httpd
主配置文件/etc/httpd/conf/httpd.conf
网站数据目录/var/www/html
访问日志/var/log/httpd/access_log
错误日志/var/log/httpd/error_log

httpd服务程序的主配置文件中, 存在三种类型的信息:注释行信息、全局配置、区域配置.

 注释行信息
 # ----------

 全局配置
 ServerRoot "/etc/httpd"
 ServerName www.linuxprobe.com

 区域配置
 <Directory />
 </Directory>

全局配置参数就是一种全局性的配置参数, 可作用于对所有的子站点, 既保证了子站点的正常访问, 也有效减少了频繁写入重复参数的工作量. 区域配置参数则是单独针对于每个独立的子站点进行设置的.

在httpd服务程序主配置文件中, 最为常用的参数:
ServerRoot服务目录
ServerAdmin管理员邮箱
User运行服务的用户
Group运行服务的用户组
ServerName网站服务器的域名
DocumentRoot网站数据目录
Listen监听的IP地址与端口号
DirectoryIndex默认的索引页页面
ErrorLog错误日志文件
CustomLog访问日志文件
Timeout网页超时时间, 默认为300秒.

在默认情况下, 网站数据是保存在/var/www/html目录中, 把保存网站数据的目录修改为/home/wwwroot目录:
第1步: 建立网站数据的保存目录, 并创建首页文件.

 mkdir /home/wwwroot
 echo "The New Web Directory" > /home/wwwroot/index.html

第2步: 打开httpd服务程序的主配置文件, 将用于定义网站数据保存路径的参数DocumentRoot修改为/home/wwwroot, 同时还需要将用于定义目录权限的参数Directory后面的路径也修改为/home/wwwroot. 配置文件修改完毕后即可保存并退出.

 vim /etc/httpd/conf/httpd.conf

 DocumentRoot "/home/wwwroot"
 <Directory "/home/wwwroot">

第3步: 重新启动httpd服务程序并验证效果

 systemctl restart httpd

 firefox
 输入网址: 127.0.0.1

只有在网站的首页面文件不存在或者用户权限不足时, 才显示httpd服务程序的默认首页面. 这时则要配置SELinux安全子系统:setenforce 0.

SELinux安全子系统

SELinux(Security-Enhanced Linux)是美国国家安全局在Linux开源社区的帮助下开发的一个强制访问控制(MAC, Mandatory Access Control)的安全子系统. RHEL 7系统使用SELinux技术的目的是为了让各个服务进程都受到约束, 使其仅获取到本应获取的资源.

SELinux服务有三种配置模式:
enforcing强制启用安全策略模式, 将拦截服务的不合法请求.
permissive遇到服务越权访问时, 只发出警告而不强制拦截.
disabled对于越权的行为不警告也不拦截

在生产环境中相当不推荐, 查看SELinux服务主配置文件中定义的默认状态. 如果是permissive或disabled, 建议赶紧修改为enforcing.

 vim /etc/selinux/config
 SELINUX=enforcing

SELinux服务的主配置文件中, 定义的是SELinux的默认运行状态, 可以将其理解为系统重启后的状态, 因此它不会在更改后立即生效. 可以用setenforce [0|1]命令修改SELinux当前的运行模式(0为禁用, 1为启用), 使用getenforce命令获得当前SELinux服务的运行模式. 注意, 这种修改只是临时的, 在系统重启后就会失效.

 setenforce 0
 getenforce

把SELinux服务恢复到强制启用安全策略模式, 然后分别查看原始网站数据的保存目录与当前网站数据的保存目录是否拥有不同的SELinux安全上下文值:

 setenforce 1
 ls -Zd /var/www/html
 ls -Zd /home/wwwroot

 drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
 drwxrwxrwx. root root unconfined_u:object_r:home_root_t:s0 /home/wwwroot

在文件上设置的SELinux安全上下文是由用户段、角色段以及类型段等多个信息项共同组成的. 其中,
用户段system_u代表系统进程的身份,
角色段object_r代表文件目录的角色,
类型段httpd_sys_content_t代表网站服务的系统文件.

semanage命令用于管理SELinux的策略, 不仅能够像传统chcon命令那样—设置文件、目录的策略, 还可以管理网络端口、消息接口. 使用时, 经常用到的几个参数及其功能:

 semanage [选项] [文件]
 |__ -l --用于查询
 |__ -a --用于添加
 |__ -m --用于修改
 |__ -d --用于删除

例: 可以向新的网站数据目录中新添加一条SELinux安全上下文, 让这个目录以及里面的所有文件能够被httpd服务程序所访问到:

 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/*

使用restorecon命令将设置好的SELinux安全上下文立即生效. 在使用restorecon命令时, 可以加上-Rv参数对指定的目录进行递归操作, 以及显示SELinux安全上下文的修改过程.
restorecon -Rv /home/wwwroot/

个人用户主页功能

该功能可以让系统内所有的用户在自己的家目录中管理个人的网站, 而且访问起来也非常容易.

第1步: 在httpd服务程序中, 默认没有开启个人用户主页功能. 编辑配置文件, 然后在UserDir disabled参数前面加上井号(#), 表示让httpd服务程序开启个人用户主页功能; 同时再把UserDir public_html参数前面的井号(#)去掉. 最后, 在修改完毕后保存并退出.
(UserDir参数表示网站数据在用户家目录中的保存目录名称, 即public_html目录)

 vim /etc/httpd/conf.d/userdir.conf

 # UserDir disabled
 UserDir public_html

第2步: 在用户家目录中建立用于保存网站数据的目录及首页面文件. 另外, 还需要把家目录的权限修改为755, 保证其他人也有权限读取里面的内容.

 su - linuxprobe
 mkdir public_html
 echo "This is linuxprobe's website" > public_html/index.html
 chmod -Rf 755 /home/linuxprobe

第3步: SELinux域确保服务程序不能执行违规的操作, 只能本本分分地为用户提供服务, 使用getsebool命令查询并过滤出所有与HTTP协议相关的安全策略. 其中, off为禁止状态, on为允许状态.

 getsebool -a | grep http

 httpd_enable_homedirs --> off

使用setsebool命令来修改SELinux策略中各条规则的布尔值. 在setsebool命令后面加上-P参数, 让修改后的SELinux策略规则永久生效且立即生效.
setsebool -P httpd_enable_homedirs=on

第4步: 重新启动httpd服务程序, 在浏览器的地址栏中输入网址, 其格式为”网址/~用户名”(其中的波浪号是必需的, 而且网址、波浪号、用户名之间没有空格)

 systemctl restart httpd

 左上角的Applications中打开firefox
 输入网址: 127.0.0.1/~用户名

在网站中添加口令功能, 使用户访客通过身份验证的方式查看网页里面的内容:

第1步: 先使用htpasswd命令生成密码数据库. -c参数表示第一次生成; 后面再分别添加密码数据库的存放文件, 以及验证要用到的用户名称(该用户不必是系统中已有的本地账户).

 htpasswd -c /etc/httpd/passwd linuxprobe
 输入用于网页验证的密码
 再次输入密码进行确认

第2步: 编辑个人用户主页功能的配置文件. 把第31~35行的参数信息修改成下列内容, 随后保存并退出配置文件, 重启httpd服务程序即可生效.

 vim /etc/httpd/conf.d/userdir.conf
 
1
2
3
4
5
6
7
<Directory "/home/*/public_html">
AllowOverride all
authuserfile "/etc/httpd/passwd" #刚刚生成出来的密码验证文件保存路径
authname "My privately website" #当用户尝试访问个人用户网站时的提示信息
authtype basic
require user linuxprobe #用户进行账户密码登录时需要验证的用户名称
</Directory>
systemctl restart httpd

虚拟网站主机功能

利用虚拟主机功能, 可以把一台处于运行状态的物理服务器分割成多个”虚拟的服务器”. 但是, 该技术无法实现目前云主机技术的硬件资源隔离, 让这些虚拟的服务器共同使用物理服务器的硬件资源, 供应商只能限制硬盘的使用空间大小. 出于各种考虑的因素(主要是价格低廉), 目前依然有很多企业或个人站长在使用虚拟主机的形式来部署网站.
Apache的虚拟主机功能是服务器基于用户请求的不同IP地址、主机域名或端口号, 实现提供多个网站同时为外部提供访问服务的技术.

基于IP地址

如果一台服务器有多个IP地址, 而且每个IP地址与服务器上部署的每个网站一一对应, 这样当用户请求访问不同的IP地址时, 会访问到不同网站的页面资源. 而且, 每个网站都有一个独立的IP地址, 对搜索引擎优化也大有裨益.

配置三个IP地址, 测试连通性.

 nmtui

 192.168.10.10./24
 192.168.10.20./24
 192.168.10.30./24

 systemctl restart network

第1步: 分别在/home/wwwroot中创建用于保存不同网站数据的3个目录, 并向其中分别写入网站的首页文件. 每个首页文件中应有明确区分不同网站内容的信息, 方便我们稍后能更直观地检查效果.

 mkdir -p /home/wwwroot/10
 mkdir -p /home/wwwroot/20
 mkdir -p /home/wwwroot/30
 echo "IP:192.168.10.10" > /home/wwwroot/10/index.html
 echo "IP:192.168.10.20" > /home/wwwroot/20/index.html
 echo "IP:192.168.10.30" > /home/wwwroot/30/index.html

第2步: 在httpd服务的配置文件中大约113行处开始, 分别追加写入三个基于IP地址的虚拟主机网站参数, 然后保存并退出, 重启httpd服务. 或者将Include conf/extra/httpd-vhosts.conf的注释取消, 将以下写入该配置文件中.

 vim /etc/httpd/conf/httpd.conf
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<VirtualHost 192.168.10.10>
DocumentRoot /home/wwwroot/10
ServerName www.linuxprobe.com
<Directory /home/wwwroot/10 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

<VirtualHost 192.168.10.20>
DocumentRoot /home/wwwroot/20
ServerName bbs.linuxprobe.com
<Directory /home/wwwroot/20 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

<VirtualHost 192.168.10.30>
DocumentRoot /home/wwwroot/30
ServerName tech.linuxprobe.com
<Directory /home/wwwroot/30 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
systemctl restart httpd

第3步:向新的网站数据目录中新添加一条SELinux安全上下文, 让这个目录以及里面的所有文件能够被httpd服务程序所访问到, 并使用restorecon命令让新设置的SELinux安全上下文立即生效.

 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10
 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/10/*
 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/20
 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/20/*
 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/30
 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/30/*
 restorecon -Rv /home/wwwroot

 左上角的Applications中打开firefox
 分别输入ip地址进行查看

基于主机域名

当服务器无法为每个网站都分配一个独立IP地址的时候, 可以尝试让Apache自动识别用户请求的域名, 从而根据不同的域名请求来传输不同的内容. 在这种情况下的配置更加简单, 只需要保证位于生产环境中的服务器上有一个可用的IP地址(这里以192.168.10.10为例)就可以了.

由于当前还没有介绍如何配置DNS解析服务, 因此需要手工定义IP地址与域名之间的对应关系. /etc/hosts是Linux系统中用于强制把某个主机域名解析到指定IP地址的配置文件.

第1步: 手工定义IP地址与域名之间对应关系的配置文件, 保存并退出后会立即生效. 可以通过分别ping这些域名来验证域名是否已经成功解析为IP地址.

 vim /etc/hosts
 192.168.10.10 www.linuxprobe.com bbs.linuxprobe.com tech.linuxprobe.com

 ping -c 4 www.linuxprobe.com
 ping -c 4 bbs.linuxprobe.com
 ping -c 4 tech.linuxprobe.com

第2步: 分别在/home/wwwroot中创建用于保存不同网站数据的三个目录, 并向其中分别写入网站的首页文件. 每个首页文件中应有明确区分不同网站内容的信息, 方便我们稍后能更直观地检查效果.

mkdir -p /home/wwwroot/www
mkdir -p /home/wwwroot/bbs
mkdir -p /home/wwwroot/tech
echo "WWW.linuxprobe.com" > /home/wwwroot/www/index.html
echo "BBS.linuxprobe.com" > /home/wwwroot/bbs/index.html
echo "TECH.linuxprobe.com" > /home/wwwroot/tech/index.html

第3步: 在httpd服务的配置文件中大约113行处开始, 分别追加写入三个基于主机名的虚拟主机网站参数, 然后保存并退出. 记得需要重启httpd服务, 这些配置才生效.

 vim /etc/httpd/conf/httpd.conf
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<VirtualHost 192.168.10.10>
DocumentRoot "/home/wwwroot/www"
ServerName "www.linuxprobe.com"
<Directory "/home/wwwroot/www">
AllowOverride None
Require all granted
</directory>
</VirtualHost>

<VirtualHost 192.168.10.10>
DocumentRoot "/home/wwwroot/bbs"
ServerName "bbs.linuxprobe.com"
<Directory "/home/wwwroot/bbs">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

<VirtualHost 192.168.10.10>
DocumentRoot "/home/wwwroot/tech"
ServerName "tech.linuxprobe.com"
<Directory "/home/wwwroot/tech">
AllowOverride None
Require all granted
</directory>
</VirtualHost>
systemctl restart httpd

第4步:向新的网站数据目录中新添加一条SELinux安全上下文, 让这个目录以及里面的所有文件能够被httpd服务程序所访问到, 并使用restorecon命令让新设置的SELinux安全上下文立即生效.

 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/www
 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/www/*
 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/bbs
 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/bbs/*
 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/tech
 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/tech/*
 restorecon -Rv /home/wwwroot

 左上角的Applications中打开firefox
 分别输入域名进行查看

基于端口号

基于端口号的虚拟主机功能可以让用户通过指定的端口号来访问服务器上的网站资源. 在使用Apache配置虚拟网站主机功能时, 基于端口号的配置方式是最复杂的. 因此我们不仅要考虑httpd服务程序的配置因素, 还需要考虑到SELinux服务对新开设端口的监控.

一般来说, 使用80、443、8080等端口号来提供网站访问服务是比较合理的, 如果使用其他端口号则会受到SELinux服务的限制.

第1步: 分别在/home/wwwroot中创建用于保存不同网站数据的两个目录, 并向其中分别写入网站的首页文件. 每个首页文件中应有明确区分不同网站内容的信息, 方便我们稍后能更直观地检查效果.

 mkdir -p /home/wwwroot/6111
 mkdir -p /home/wwwroot/6222
 echo "port:6111" > /home/wwwroot/6111/index.html
 echo "port:6222" > /home/wwwroot/6222/index.html

第2步: 在httpd服务配置文件的第43行和第44行分别添加用于监听6111和6222端口的参数

 vim /etc/httpd/conf/httpd.conf

 Listen 80
 Listen 6111
 Listen 6222

第3步: 在httpd服务的配置文件中大约113行处开始, 分别追加写入两个基于端口号的虚拟主机网站参数, 然后保存并退出. 重启httpd服务.

 vim /etc/httpd/conf/httpd.conf
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<VirtualHost 192.168.10.10:6111>
DocumentRoot "/home/wwwroot/6111"
ServerName www.linuxprobe.com
<Directory "/home/wwwroot/6111">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

<VirtualHost 192.168.10.10:6222>
DocumentRoot "/home/wwwroot/6222"
ServerName bbs.linuxprobe.com
<Directory "/home/wwwroot/6222">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

第4步: 向新的网站数据目录中新添加一条SELinux安全上下文, 让这个目录以及里面的所有文件能够被httpd服务程序所访问到, 并使用restorecon命令让新设置的SELinux安全上下文立即生效.

 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111
 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111/*
 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222
 semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222/*
 restorecon -Rv /home/wwwroot/

使用semanage命令查询并过滤出所有与HTTP协议相关且SELinux服务允许的端口列表
semanage port -l | grep http

第5步: SELinux允许的与HTTP协议相关的端口号中默认没有包含6111和6222, 因此需要将这两个端口号手动添加进去. 该操作会立即生效, 而且在系统重启过后依然有效. 设置好后再重启httpd服务程序.

 semanage port -a -t http_port_t -p tcp 6111
 semanage port -a -t http_port_t -p tcp 6222
 semanage port -l| grep http
 systemctl restart httpd

 左上角的Applications中打开firefox
 分别输入ip地址:端口号进行查看

Apache的访问控制

Apache可以基于源主机名、源IP地址或源主机上的浏览器特征等信息对网站上的资源进行访问控制.

它通过Allow指令允许某个主机访问服务器上的网站资源, 通过Deny指令实现禁止访问.

在允许或禁止访问网站资源时, 还会用到Order指令, 这个指令用来定义Allow或Deny指令起作用的顺序, 其匹配原则是按照顺序进行匹配, 若匹配成功则执行后面的默认指令.

第1步: 先在服务器上的网站数据目录中新建一个子目录, 并在这个子目录中创建一个包含Successful单词的首页文件.

 mkdir /var/www/html/server
 echo "Successful" > /var/www/html/server/index.html

第2步: 打开httpd服务的配置文件, 在第129行后面添加下述规则来限制源主机的访问. 这段规则的含义是允许使用Firefox浏览器的主机访问服务器上的首页文件, 除此之外的所有请求都将被拒绝. 然后重启httpd服务.

 vim /etc/httpd/conf/httpd.conf
 
1
2
3
4
5
<Directory "/var/www/html/server">
SetEnvIf User-Agent "Firefox" ff=1
Order allow,deny
Allow from env=ff
</Directory>
systemctl restart httpd 左上角的Applications中打开firefox 输入ip地址/server/

只允许IP地址为192.168.10.20的主机访问网站资源, 可以在httpd服务配置文件的第129行后面添加下述规则.

1
2
3
4
<Directory "/var/www/html/server">
Order allow,deny
Allow from 192.168.10.20
</Directory>

使用Vsftpd服务传输文件

文件传输协议

FTP是一种在互联网中进行文件传输的协议, 基于客户端/服务器模式, 默认使用20、21号端口, FTP服务器普遍部署于内网中, 具有容易搭建、方便管理的特点. 而且有些FTP客户端工具还可以支持文件的多点下载以及断点续传技术.

FTP连接过程

数据端口:20用于进行数据传输
命令端口:21用于接受客户端发出的相关FTP命令与参数

FTP服务器是按照FTP协议在互联网上提供文件存储和访问服务的主机, FTP客户端则是向服务器发送连接请求, 以建立数据传输链路的主机. FTP协议有下面两种工作模式:

 主动模式: FTP服务器主动向客户端发起连接请求
 被动模式: FTP服务器等待客户端发起连接请求(FTP的默认工作模式)

vsftpd(very secure ftp daemon, 非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序, 不仅完全开源而且免费, 此外, 还具有很高的安全性、传输速度, 以及支持虚拟用户验证等其他FTP服务程序不具备的特点.

配置好Yum软件仓库后, 安装vsftpd服务程序.
yum install vsftpd

iptables防火墙管理工具默认禁止了FTP传输协议的端口号, 需要清空iptables防火墙的默认策略, 并把当前已经被清理的防火墙策略状态保存下来:

 iptables -F
 service iptables save
注:The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl. 
执行下列代码:
1
2
3
4
5
6
systemctl stop firewalld
yum -y install iptables-services
systemctl enable iptables
systemctl start iptables
service iptables save
service iptables restart

将vsftpd服务程序的主配置文件(/etc/vsftpd/vsftpd.conf)进行备份后再进行注释行信息过滤, 并重定向到原始的主配置文件中.

 mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
 grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
vsftpd服务程序主配置文件中常用的参数以及作用:
listen=[YES|NO]是否以独立运行的方式监听服务
listen_address=IP地址设置要监听的IP地址
listen_port=21设置FTP服务的监听端口
download_enable=[YES|NO]是否允许下载文件
userlist_deny=[YES|NO]
userlist_enable=[YES|NO]
设置用户列表为"允许"还是"禁止"操作
max_clients=0最大客户端连接数, 0为不限制.
max_per_ip=0同一IP地址的最大连接数, 0为不限制.
anonymous_enable=[YES|NO]是否允许匿名用户访问
anon_upload_enable=[YES|NO]是否允许匿名用户上传文件
anon_umask=022匿名用户上传文件的umask值
anon_root=/var/ftp匿名用户的FTP根目录
anon_mkdir_write_enable=[YES|NO]是否允许匿名用户创建目录
anon_other_write_enable=[YES|NO]是否开放匿名用户的其他写入权限(包括重命名、删除等操作权限)
anon_max_rate=0匿名用户的最大传输速率(字节/秒), 0为不限制.
local_enable=[YES|NO]是否允许本地用户登录FTP
local_umask=022本地用户上传文件的umask值
local_root=/var/ftp本地用户的FTP根目录
chroot_local_user=[YES|NO]是否将用户权限禁锢在FTP目录, 以确保安全.
local_max_rate=0本地用户最大传输速率(字节/秒), 0为不限制.

Vsftpd服务程序

vsftpd作为更加安全的文件传输的服务程序, 允许用户以三种认证模式登录到FTP服务器上.

匿名开放模式: 是一种最不安全的认证模式, 任何人都可以无需密码验证而直接登录到FTP服务器.

本地用户模式: 是通过Linux系统本地的账户密码信息进行认证的模式, 相较于匿名开放模式更安全, 而且配置起来也很简单.但是如果被黑客破解了账户的信息, 就可以畅通无阻地登录FTP服务器, 从而完全控制整台服务器.

虚拟用户模式: 是这三种模式中最安全的一种认证模式, 它需要为FTP服务单独建立用户数据库文件, 虚拟出用来进行口令验证的账户信息, 而这些账户信息在服务器系统中实际上是不存在的, 仅供FTP服务程序进行认证使用.

ftp是Linux系统中以命令行界面的方式来管理FTP传输服务的客户端工具, 手动安装ftp客户端工具.
yum install ftp

匿名访问模式

这种模式一般用来访问不重要的公开文件(在生产环境中尽量不要存放重要文件)

vsftpd服务程序默认开启了匿名开放模式, 我们需要做的就是开放匿名用户的上传、下载文件的权限, 以及让匿名用户创建、删除、更名文件的权限. 需要注意的是, 不建议在生产环境中如此行事.

可以向匿名用户开放的权限参数以及作用
anonymous_enable=YES允许匿名访问模式
anon_umask=022匿名用户上传文件的umask值
anon_upload_enable=YES允许匿名用户上传文件
anon_mkdir_write_enable=YES允许匿名用户创建目录
anon_other_write_enable=YES允许匿名用户修改目录名称或删除目录
 vim /etc/vsftpd/vsftpd.conf
 
1
2
3
4
5
anonymous_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
systemctl restart vsftpd systemctl enable vsftpd

在vsftpd服务程序的匿名开放认证模式下, 默认访问的是/var/ftp目录. 查看该目录的权限得知, 只有root管理员才有写入权限. 将目录的所有者身份改成系统账户ftp(该账户在系统中已经存在).

 ls -ld /var/ftp/pub
 chown -Rf ftp /var/ftp/pub

使用getsebool命令查看与FTP相关的SELinux域策略

 getsebool -a | grep ftp
 ftpd_full_access --> off

修改策略规则, 并且在设置时使用-P参数让修改过的策略永久生效.
setsebool -P ftpd_full_access=on

在客户端执行ftp命令连接到远程的FTP服务器, 在vsftpd服务程序的匿名开放认证模式下, 其账户统一为anonymous, 密码为空. 而且在连接到FTP服务器后, 默认访问的是/var/ftp目录.

 Linux:
 ftp ip地址
 输入匿名账户名:anonymous
 按回车键

 Windows:
 Win + R
 ftp://ip地址

本地用户模式

相较于匿名开放模式, 本地用户模式要更安全, 而且配置起来也很简单.

本地用户模式使用的权限参数以及作用
anonymous_enable=NO禁止匿名访问模式
local_enable=YES允许本地用户模式
write_enable=YES设置可写权限
local_umask=022本地用户模式创建文件的umask值
userlist_deny=YES启用"禁止用户名单", 名单文件为ftpusers和user_list.
userlist_enable=YES开启用户作用名单文件功能
 vim /etc/vsftpd/vsftpd.conf
 
1
2
3
4
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
systemctl restart vsftpd systemctl enable vsftpd

使用getsebool命令查看与FTP相关的SELinux域策略

 getsebool -a | grep ftp
 ftpd_full_access --> off

修改策略规则, 并且在设置时使用-P参数让修改过的策略永久生效.
setsebool -P ftpd_full_access=on

选择ftpusers和user_list文件中没有的一个普通用户尝试登录FTP服务器, 在采用本地用户模式登录FTP服务器后, 默认访问的是该用户的家目录, 也就是说, 访问的是/home/当前用户名目录. 而且该目录的默认所有者、所属组都是该用户自己, 因此不存在写入权限不足的情况.

 cat /etc/vsftpd/user_list
 cat /etc/vsftpd/ftpusers

 Linux:
 ftp 192.168.10.10
 输入用户名
 输入该用户名的密码

 Windons:
 Win + R
 ftp://ip地址
 输入用户名
 输入该用户名的密码

虚拟用户模式

虚拟用户模式是这三种模式中最安全的一种认证模式, 因为安全性较之于前面两种模式有了提升, 所以配置流程也会稍微复杂一些.

第1步: 创建用于进行FTP认证的用户数据库文件, 其中奇数行为账户名, 偶数行为密码.
例: 分别创建出zhangsan和lisi两个用户, 密码均为redhat:

 cd /etc/vsftpd/

 vim vuser.list
 
1
2
3
4
zhangsan
redhat
lisi
redhat

使用db_load命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件, 并且降低数据库文件的权限(避免其他人看到数据库文件的内容), 然后再把原始的明文信息文件删除.

 db_load -T -t hash -f vuser.list vuser.db
 file vuser.db
 chmod 600 vuser.db
 rm -f vuser.list

第2步: 创建vsftpd服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户. FTP服务用于存储文件的根目录指的是, 当虚拟用户登录后所访问的默认位置.

 useradd -d /var/ftproot -s /sbin/nologin virtual
 ls -ld /var/ftproot/
 chmod -Rf 755 /var/ftproot/

PAM(可插拔认证模块)是一种认证机制, 通过一些动态链接库和统一的API把系统提供的服务与认证方式分开, 使得系统管理员可以根据需求灵活调整服务程序的不同认证方式. 通俗来讲, PAM是一组安全机制的模块, 系统管理员可以用来轻易地调整服务程序的认证方式, 而不必对应用程序进行任何修改. PAM采取了分层设计的思想:
PAM认证机制的体系图

第3步: 新建一个用于虚拟用户认证的PAM文件vsftpd.vu, 其中PAM文件内的”db=”参数为使用db_load命令生成的账户密码数据库文件的路径, 但不用写数据库文件的后缀:

 vim /etc/pam.d/vsftpd.vu
 
1
2
auth       required     pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser

第4步: 在vsftpd服务程序的主配置文件中通过pam_service_name参数将PAM认证文件的名称修改为vsftpd.vu, PAM作为应用程序层与鉴别模块层的连接纽带, 可以让应用程序根据需求灵活地在自身插入所需的鉴别功能模块. 当应用程序需要PAM认证时, 则需要在应用程序中定义负责认证的PAM配置文件, 实现所需的认证功能.

利用PAM文件进行认证时使用的参数以及作用
anonymous_enable=NO禁止匿名开放模式
local_enable=YES允许本地用户模式
guest_enable=YES开启虚拟用户模式
guest_username=virtual指定虚拟用户账户
pam_service_name=vsftpd.vu指定PAM文件
allow_writeable_chroot=YES允许对禁锢的FTP根目录执行写入操作, 而且不拒绝用户的登录请求.
 vim /etc/vsftpd/vsftpd.conf
 
1
2
3
4
5
6
anonymous_enable=NO
local_enable=YES
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=YES
pam_service_name=vsftpd.vu

第5步: 为虚拟用户设置不同的权限

 mkdir /etc/vsftpd/vusers_dir/
 cd /etc/vsftpd/vusers_dir/
 touch lisi
 vim zhangsan
 
1
2
3
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

然后再次修改vsftpd主配置文件, 通过添加user_config_dir参数来定义这两个虚拟用户不同权限的配置文件所存放的路径. 为了让修改后的参数立即生效, 需要重启vsftpd服务程序并将该服务添加到开机启动项中:

 vim /etc/vsftpd/vsftpd.conf
 
1
user_config_dir=/etc/vsftpd/vusers_dir
systemctl restart vsftpd systemctl enable vsftpd

第6步: 设置SELinux域允许策略, 然后使用虚拟用户模式登录FTP服务器.

 getsebool -a | grep ftp
 ftpd_full_access --> off
 setsebool -P ftpd_full_access=on

使用虚拟用户模式成功登录到FTP服务器

 Linux:
 ftp 192.168.10.10
 输入虚拟用户名
 输入该虚拟用户名的密码

 Windons:
 Win + R
 ftp://ip地址
 输入虚拟用户名
 输入该虚拟用户名的密码

TFTP简单文件传输协议

简单文件传输协议(Trivial File Transfer Protocol, TFTP)是一种基于UDP协议在客户端和服务器之间进行简单文件传输的协议.

TFTP在传输文件时采用的是UDP协议, 占用的端口号为69, 因此文件的传输过程也不像FTP协议那样可靠. 但是, 因为TFTP不需要客户端的权限认证, 也就减少了无谓的系统和网络带宽消耗, 因此在传输琐碎(trivial)不大的文件时, 效率更高.

安装TFTP的软件包

 yum install tftp-server tftp

TFTP服务是使用xinetd服务程序来管理的. xinetd服务可以用来管理多种轻量级的网络服务, 而且具有强大的日志功能. 简单来说, 在安装TFTP软件包后, 还需要在xinetd服务程序中将其开启, 把默认的禁用(disable)参数修改为no.

 vim /etc/xinetd.d/tftp
 disable                 = no

重启xinetd服务并将它添加到系统的开机启动项中, 以确保TFTP服务在系统重启后依然处于运行状态. 考虑到有些系统的防火墙默认没有允许UDP协议的69端口, 因此需要手动将该端口号加入到防火墙的允许策略中:

 systemctl restart xinetd
 systemctl enable xinetd

 firewall-cmd --permanent --add-port=69/udp
 firewall-cmd --reload 

提示: Failed to restart xinetd时, 安装xinetd包.

 yum -y install xinetd
TFTP的根目录为/var/lib/tftpboot, tftp命令中可用的参数以及作用:
命令作用
?帮助信息
put上传文件
get下载文件
verbose显示详细的处理信息
status显示当前的状态信息
binary使用二进制进行传输
ascii使用ASCII码进行传输
timeout设置重传的超时时间
quit退出
 echo "i love linux" > /var/lib/tftpboot/readme.txt
 tftp 192.168.10.10
 tftp> get readme.txt
 tftp> quit
 ls
 cat readme.txt 

使用Samba或NFS实现文件共享

SAMBA文件共享服务

SMBServer服务程序基于SMB(Server Messages Block, 服务器消息块)协议. 是一款开源的文件共享软件, 经过简单配置就能够实现Linux系统与Windows系统之间的文件共享工作, Samba服务程序现在已经成为在Linux系统与Windows系统之间共享文件的最佳选择.

首先通过Yum软件仓库来安装Samba服务程序
yum install samba

备份主配置文件, 然后过滤注释行重定向至原主配置文件, 最后用cat命令进行查看.

 mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
 cat /etc/samba/smb.conf.bak | grep -v "#" | grep -v ";" | grep -v "^$" > /etc/samba/smb.conf
 cat /etc/samba/smb.conf
Samba服务程序中的参数以及作用 #共享参数#打印机共享参数
[global]#全局参数
workgroup = MYGROUP#工作组名称
server string = Samba Server Version %v#服务器介绍信息,参数%v为显示SMB版本号
log file = /var/log/samba/log.%m#定义日志文件的存放位置与名称, 参数%m为来访的主机名
max log size = 50#定义日志文件的最大容量为50KB
security = user#安全验证的方式, 总共有4种.
#share:来访主机无需验证口令; 比较方便, 但安全性很差.
#user:需验证来访主机提供的口令后才可以访问; 提升了安全性.
#server:使用独立的远程主机验证来访主机提供的口令(集中管理账户)
#domain:使用域控制器进行身份验证
passdb backend = tdbsam#定义用户后台的类型, 共有3种.
#smbpasswd:使用smbpasswd命令为系统用户设置Samba服务程序的密码
#tdbsam:创建数据库文件并使用pdbedit命令建立Samba服务程序的用户
#ldapsam:基于LDAP服务进行账户验证
load printers = yes#设置在Samba服务启动时是否共享打印机设备
cups options = raw#打印机的选项
[homes]
comment = Home Directories#描述信息
browseable = no#指定共享信息是否在"网上邻居"中可见
writable = yes#定义是否可以执行写入操作, 与"read only"相反.
[printers]
comment = All Printers
path = /var/spool/samba#共享文件的实际路径(重要)
browseable = no
guest ok = no#是否所有人可见, 等同于"public"参数.
writable = no
printable = yes

配置共享资源

Samba服务程序的主配置文件包括全局配置参数和区域配置参数.
全局配置参数用于设置整体的资源共享环境, 对里面的每一个独立的共享资源都有效.
区域配置参数则用于设置单独的共享资源, 且仅对该资源有效.
创建共享资源指定的参数写入到Samba服务程序的主配置文件中, 然后重启该服务即可.

用于设置Samba服务程序的参数以及作用
[database]共享名称为database
comment = Do not arbitrarily modify the database file警告用户不要随意修改数据库
path = /home/database共享目录为/home/database
public = no关闭"所有人可见"
writable = yes允许写入操作

第1步:创建用于访问共享资源的账户信息

 id linuxprobe
 pdbedit -a -u linuxprobe
 输入该账户在Samba服务数据库中的密码
 再次输入密码进行确认

用户口令认证模式(user). 这种认证模式可以确保仅让有密码且受信任的用户访问共享资源, 而且验证过程也十分简单. 不过, 只有建立账户信息数据库之后, 才能使用用户口令认证模式.

另外, Samba服务程序的数据库要求账户必须在当前系统中已经存在, 否则日后创建文件时将导致文件的权限属性混乱不堪, 由此引发错误.

pdbedit命令用于管理SMB服务程序的账户信息数据库, 格式为pdbedit [选项] 账户. 在第一次把账户信息写入到数据库时需要使用-a参数.

用于pdbedit命令的参数以及作用
-a 用户名建立Samba用户
-x 用户名删除Samba用户
-L列出用户列表
-Lv列出用户详细信息的列表

第2步:创建用于共享资源的文件目录在创建时, 不仅要考虑到文件读写权限的问题, 而且由于/home目录是系统中普通用户的家目录, 因此还需要考虑应用于该目录的SELinux安全上下文所带来的限制.

 mkdir /home/database
 chown -Rf linuxprobe:linuxprobe /home/database
 semanage fcontext -a -t samba_share_t /home/database
 restorecon -Rv /home/database

第3步:设置SELinux服务与策略, 使其允许通过Samba服务程序访问普通用户家目录. 执行getsebool命令, 筛选出所有与Samba服务程序相关的SELinux域策略, 根据策略的名称选择出正确的策略条目进行开启即可.

 getsebool -a | grep samba
 samba_enable_home_dirs --> off

 setsebool -P samba_enable_home_dirs on

第4步:在Samba服务程序的主配置文件中, 根据指定格式写入共享信息. 在原始的配置文件中, [homes]参数为来访用户的家目录共享信息, [printers]参数为共享的打印机设备. 这两项如果不需要可以删除.

 vim /etc/samba/smb.conf 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[global]
workgroup = MYGROUP
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
max log size = 50
security = user
passdb backend = tdbsam
load printers = yes
cups options = raw
[database]
comment = Do not arbitrarily modify the database file
path = /home/database
public = no
writable = yes

第5步:重启smb服务(Samba服务程序在Linux系统中的名字为smb)并清空iptables防火墙, 然后就检验配置效果.

 systemctl restart smb
 systemctl enable smb
 iptables -F
 service iptables save
Samba服务器和Windows客户端使用的操作系统以及IP地址
主机名称操作系统IP地址
Samba共享服务器RHEL 7192.168.10.10
Linux客户端RHEL 7192.168.10.20
Windows客户端Windows 7192.168.10.30

Windows挂载共享

在Windons系统中, 按Win + R后输入ip地址回车后输入用户名和密码进行访问.

 Win + R
 \\ip地址
 输入用户名
 输入密码

Linux挂载共享

Samba服务程序还可以实现Linux系统之间的文件共享, 在客户端安装支持文件共享服务的软件包(cifs-utils).
yum install cifs-utils

在Linux客户端, 按照Samba服务的用户名、密码、共享域的顺序将相关信息写入到一个认证文件中. 为了保证不被其他人随意看到, 最后把这个认证文件的权限修改为仅root管理员才能够读写:

 vim auth.smb
 
1
2
3
username=linuxprobe
password=redhat
domain=MYGROUP
chmod -Rf 600 auth.smb

在Linux客户端上创建一个用于挂载Samba服务共享资源的目录, 并把挂载信息写入到/etc/fstab文件中, 以确保共享挂载信息在服务器重启后依然生效:

 mkdir /database
 echo "//ip地址/database /database cifs credentials=/root/auth.smb 0 0" >> /etc/fstab
 mount -a

 CentOS挂载:
 mount -t cifs -o username=linuxprobe,password=linux,sec=ntlmssp //ip地址/database /database

访问共享资源
ls /database/

NFS网络文件系统

需要共享文件的主机都是Linux系统的话可以在客户端部署NFS服务来共享文件. NFS(网络文件系统)服务可以将远程Linux系统上的文件共享资源挂载到本地主机的目录上, 从而使得本地主机(Linux客户端)基于TCP/IP协议, 像使用本地主机上的资源那样读写远程Linux系统上的共享文件.

使用Yum软件仓库安装NFS软件包
yum install nfs-utils

第1步:为了检验NFS服务配置的效果, 我们需要使用两台Linux主机(一台充当NFS服务器, 一台充当NFS客户端).

两台Linux主机所使用的操作系统以及IP地址
主机名称操作系统IP地址
NFS服务端RHEL 7192.168.10.10
NFS客户端RHEL 7192.168.10.20

第2步:在NFS服务器上建立用于NFS文件共享的目录, 并设置足够的权限确保其他人也有写入权限.

 mkdir /nfsfile
 chmod -Rf 777 /nfsfile
 echo "welcome to linuxprobe.com" > /nfsfile/readme

第3步:NFS服务程序的配置文件为/etc/exports, 默认情况下里面没有任何内容. 我们可以按照”共享目录的路径 允许访问的NFS客户端(共享权限参数)”的格式, 定义要共享的目录与相应的权限.

如果想要把/nfsfile目录共享给192.168.10.0/24网段内的所有主机, 让这些主机都拥有读写权限, 在将数据写入到NFS服务器的硬盘中后才会结束操作, 最大限度保证数据不丢失, 以及把来访客户端root管理员映射为本地的匿名用户等, 则可以按照下面命令中的格式:

 vim /etc/exports
 
1
/nfsfile 192.168.10.*(rw,sync,root_squash)
用于配置NFS服务程序配置文件的参数
参数作用
ro只读
rw读写
root_squash当NFS客户端以root管理员访问时, 映射为NFS服务器的匿名用户.
no_root_squash当NFS客户端以root管理员访问时, 映射为NFS服务器的root管理员.
all_squash无论NFS客户端使用什么账户访问, 均映射为NFS服务器的匿名用户.
sync同时将数据写入到内存与硬盘中, 保证不丢失数据.
async优先将数据保存到内存, 然后再写入硬盘; 这样效率更高, 但可能会丢失数据.

第4步:启动和启用NFS服务程序. 由于在使用NFS服务进行文件共享之前, 需要使用RPC(Remote Procedure Call, 远程过程调用)服务将NFS服务器的IP地址和端口号等信息发送给客户端. 因此, 在启动NFS服务之前, 还需要顺带重启并启用rpcbind服务程序, 并将这两个服务一并加入开机启动项中.

 systemctl restart rpcbind
 systemctl enable rpcbind
 systemctl start nfs-server
 systemctl enable nfs-server

使用showmount命令查询NFS服务器的远程共享信息, 其输出格式为”共享的目录名称 允许使用客户端地址”.

 showmount -e 192.168.10.10

 Export list for 192.168.10.10:
 /nfsfile 192.168.10.*
showmount命令中可用的参数以及作用
参数作用
-e显示NFS服务器的共享列表
-a显示本机挂载的文件资源的情况NFS资源的情况
-v显示版本号

在NFS客户端创建一个挂载目录, 永久挂载写入fstab文件中.

 mkdir /nfsfile
 mount -t nfs 192.168.10.10:/nfsfile /nfsfile
 echo "192.168.10.10:/nfsfile /nfsfile nfs defaults 0 0" >> /etc/fstab
 cat /nfsfile/readme

AutoFs自动挂载服务

autofs服务程序是一种Linux系统守护进程, 当检测到用户试图访问一个尚未挂载的文件系统时, 将自动挂载该文件系统.

使用Yum软件仓库安装autofs服务程序
yum install autofs

在autofs服务程序的主配置文件中需要按照”挂载目录 子配置文件”的格式进行填写, 挂载目录是设备挂载位置的上一级目录. 对应的子配置文件则是对这个挂载目录内的挂载设备信息作进一步的说明. 子配置文件需要用户自行定义, 文件名字没有严格要求, 但后缀建议以.misc结束.
例: 光盘设备一般挂载到/media/cdrom目录中, 那么挂载目录写成/media即可.

 vim /etc/auto.master
 
1
/media  /etc/iso.misc

在子配置文件中, 应按照”挂载目录 挂载文件类型及权限 :设备名称”的格式进行填写. 配置完成后再顺手将autofs服务程序启动并加入到系统启动项中:

 vim /etc/iso.misc
 
1
iso   -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
systemctl start autofs systemctl enable autofs

查看当前的光盘设备挂载情况, 确认光盘设备没有被挂载上. 使用cd命令切换到这个iso子目录中, 而且光盘设备会被立即自动挂载.

 df -h

 cd /media/iso
 df -h

使用Bind提供域名解析服务

DNS域名解析服务

为了降低用户访问网络资源的门槛, DNS(Domain Name System, 域名系统)技术是一项用于管理和解析域名与IP地址对应关系的技术.

简单来说, 就是能够接受用户输入的域名或IP地址, 然后自动查找与之匹配(或者说具有映射关系)的IP地址或域名, 即将域名解析为IP地址(正向解析), 或将IP地址解析为域名(反向解析).

DNS域名解析技术的正向解析也是我们最常使用的一种工作模式

鉴于互联网中的域名和IP地址对应关系数据库太过庞大, DNS域名解析服务采用了类似目录树的层次结构来记录域名与IP地址之间的对应关系, 从而形成了一个分布式的数据库系统.

DNS结构模型

域名后缀一般分为国际域名和国内域名. 原则上来讲, 域名后缀都有严格的定义, 但在实际使用时可以不必严格遵守.

目前最常见的域名后缀:
.com(商业组织)
.org(非营利组织)
.gov(政府部门)
.net(网络服务商)
.edu(教研机构)
.pub(公共大众)
.cn(中国国家顶级域名)

DNS技术作为互联网基础设施中重要的一环, 为了为网民提供不间断、稳定且快速的域名查询服务, 保证互联网的正常运转, 提供了下面三种类型的服务器:

 主服务器: 在特定区域内具有唯一性, 负责维护该区域内的域名与IP地址之间的对应关系.
 从服务器: 从主服务器中获得域名与IP地址的对应关系并进行维护, 以防主服务器宕机等情况.
 缓存服务器: 通过向其他域名解析服务器查询获得域名与IP地址的对应关系, 并将经常查询的域名信息保存到服务器本地, 以此来提高重复查询时的效率.

在执行用户发起的域名查询请求时, 具有递归查询和迭代查询两种方式.

递归查询是指DNS服务器在收到用户发起的请求时, 必须向用户返回一个准确的查询结果. 如果DNS服务器本地没有存储与之对应的信息, 则该服务器需要询问其他服务器, 并将返回的查询结果提交给用户.

迭代查询则是指DNS服务器在收到用户发起的请求时, 并不直接回复查询结果, 而是告诉另一台DNS服务器的地址, 用户再向这台DNS服务器提交请求, 这样依次反复, 直到返回查询结果.

向DNS服务器发起域名查询请求的流程:
DNS查询流程图

13台根DNS服务器的具体信息
名称管理单位地理位置IP地址
AINTERNIC.NET美国-弗吉尼亚州198.41.0.4
B美国信息科学研究所美国-加利弗尼亚州128.9.0.107
CPSINet公司美国-弗吉尼亚州192.33.4.12
D马里兰大学美国-马里兰州128.8.10.90
E美国航空航天管理局美国加利弗尼亚州192.203.230.10
F因特网软件联盟美国加利弗尼亚州192.5.5.241
G美国国防部网络信息中心美国弗吉尼亚州192.112.36.4
H美国陆军研究所美国-马里兰州128.63.2.53
IAutonomica公司瑞典-斯德哥尔摩192.36.148.17
JVeriSign公司美国-弗吉尼亚州192.58.128.30
KRIPE NCC英国-伦敦193.0.14.129
LIANA美国-弗吉尼亚州199.7.83.42
MWIDE Project日本-东京202.12.27.33

安装Bind服务程序

BIND(Berkeley Internet Name Domain, 伯克利因特网名称域)服务是全球范围内使用最广泛、最安全可靠且高效的域名解析服务程序. DNS域名解析服务作为互联网基础设施服务, 建议在生产环境中安装部署bind服务程序时加上chroot(俗称牢笼机制)扩展包, 以便有效地限制bind服务程序仅能对自身的配置文件进行操作, 以确保整个服务器的安全.
yum install bind-chroot

在bind服务程序中有下面这三个比较关键的文件:

 主配置文件(/etc/named.conf): 只有58行, 而且在去除注释信息和空行之后, 实际有效的参数仅有30行左右, 这些参数用来定义bind服务程序的运行.
 区域配置文件(/etc/named.rfc1912.zones): 用来保存域名和IP地址对应关系的所在位置. 类似于图书的目录, 对应着每个域和相应IP地址所在的具体位置, 当需要查看或修改时, 可根据这个位置找到相关文件.
 数据配置文件目录(/var/named): 该目录用来保存域名和IP地址真实对应关系的数据配置文件.

在Linux系统中, bind服务程序的名称为named. 首先需要在/etc目录中找到该服务程序的主配置文件, 然后把第11行和第17行的地址均修改为any, 分别表示服务器上的所有IP地址均可提供DNS域名解析服务, 以及允许所有人对本服务器发送DNS查询请求. 这两个地方一定要修改准确.

 vim /etc/named.conf
 
1
2
listen-on port 53 { any; };
allow-query { any; };

bind服务程序的区域配置文件(/etc/named.rfc1912.zones)用来保存域名和IP地址对应关系的所在位置. 在这个文件中, 定义了域名与IP地址解析规则保存的文件位置以及服务类型等内容, 而没有包含具体的域名、IP地址对应关系等信息.
服务类型有三种: hint(根区域)、master(主区域)、slave(辅助区域).
常用的master和slave指的就是主服务器和从服务器.

正向解析参数:

 zone "linuxprobe.com" IN {
   type master; #服务类型
   file "linuxprobe.com.zone"; #域名与IP地址解析规则保存的文件位置
   allow-update { none; }; #允许那些客户机动态更新解析信息
 };

反向解析参数

 zone "10.168.192.in-addr.arpa" IN { #表示为192.168.10.0/24网段的反向解析区域
   type master;
   file "192.168.10.arpa";
 };

正向解析实验

在DNS域名解析服务中, 正向解析是指根据域名(主机名)查找到对应的IP地址.

第1步: 编辑区域配置文件

 vim /etc/named.rfc1912.zones
 
1
2
3
4
5
zone "linuxprobe.com" IN {
type master;
file "linuxprobe.com.zone";
allow-update {none;};
};

第2步: 编辑数据配置文件
从/var/named目录中复制一份正向解析的模板文件(named.localhost), 然后把域名和IP地址的对应数据填写数据配置文件中并保存.
复制时加-a参数, 可以保留原始文件的所有者、所属组、权限属性等信息.

 cd /var/named/
 ls -al named.localhost
 cp -a named.localhost linuxprobe.com.zone

 vim linuxprobe.com.zone
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$TTL 1D	#生存周期为1天				
@ IN SOA linuxprobe.com. root.linuxprobe.com. (
#授权信息开始: #DNS区域的地址 #域名管理员的邮箱(不要用@符号)
0;serial #更新序列号
1D;refresh #更新时间
1H;retry #重试延时
1W;expire #失效时间
3H;)minimum #无效解析记录的缓存时间
NS ns.linuxprobe.com. #域名服务器记录
ns IN A 192.168.10.10 #地址记录(ns.linuxprobe.com.)
IN MX 10 mail.linuxprobe.com. #邮箱交换记录
mail IN A 192.168.10.10 #地址记录(mail.linuxprobe.com.)
www IN A 192.168.10.10 #地址记录(www.linuxprobe.com.)
bbs IN A 192.168.10.20 #地址记录(bbs.linuxprobe.com.)
systemctl restart named

第3步: 检验解析结果
nslookup命令用于检测能否从DNS服务器中查询到域名与IP地址的解析记录, 进而更准确地检验DNS服务器是否已经能够为用户提供服务.

 systemctl restart network
 nslookup
 www.linuxprobe.com
 bbs.linuxprobe.com

反向解析实验

在DNS域名解析服务中, 反向解析的作用是将用户提交的IP地址解析为对应的域名信息, 它一般用于对某个IP地址上绑定的所有域名进行整体屏蔽, 屏蔽由某些域名发送的垃圾邮件. 它也可以针对某个IP地址进行反向解析, 大致判断出有多少个网站运行在上面.

第1步: 编辑区域配置文件
反向解析是把IP地址解析成域名格式, 因此在定义zone(区域)时应该要把IP地址反写, 只需写出IP地址的网络位即可.

 vim /etc/named.rfc1912.zones
 
1
2
3
4
5
zone "10.168.192.in-addr.arpa" IN {
type master;
file "192.168.10.arpa";
allow-update {none;};
};

第2步: 编辑数据配置文件
首先从/var/named目录中复制一份反向解析的模板文件(named.loopback), 然后把下面的参数填写到文件中. 其中, IP地址仅需要写主机位.

 cd /var/named/
 cp -a named.loopback 192.168.10.arpa
 vim 192.168.10.arpa
 
1
2
3
4
5
6
7
8
9
10
11
12
13
$TTL 1D				
@ IN SOA linuxprobe.com. root.linuxprobe.com. (
0;serial
1D;refresh
1H;retry
1W;expire
3H);minimum
NS ns.linuxprobe.com.
ns A 192.168.10.10
10 PTR ns.linuxprobe.com. #PTR为指针记录, 仅用于反向解析中.
10 PTR mail.linuxprobe.com.
10 PTR www.linuxprobe.com.
20 PTR bbs.linuxprobe.com.
systemctl restart named

第3步: 检验解析结果, 也要把把系统网卡中的DNS地址参数修改成了本机IP地址.

 nslookup
 192.168.10.10
 192.168.10.20

部署从服务器

在DNS域名解析服务中, 从服务器可以从主服务器上获取指定的区域数据文件, 从而起到备份解析记录与负载均衡的作用, 因此通过部署从服务器可以减轻主服务器的负载压力, 还可以提升用户的查询效率.

主服务器与从服务器分别使用的操作系统与IP地址信息
主机名称操作系统IP地址
主服务器RHEL 7192.168.10.10
从服务器RHEL 7192.168.10.20

第1步:在主服务器的区域配置文件中允许该从服务器的更新请求, 然后重启主服务器的DNS服务程序.

 vim /etc/named.rfc1912.zones
 
1
allow-update { 从服务器的ip地址; };
systemctl restart named

修改从服务器的配置文件

 vim /etc/named.conf

 listen-on port 53 { any; };
 allow-query { any; };

第2步: 在从服务器中填写主服务器的IP地址与要抓取的区域信息, 然后重启服务.

 vim /etc/named.rfc1912.zones
 
1
2
3
4
5
6
7
8
9
10
11
zone "linuxprobe.com" IN {
type slave;
masters { 主服务器的ip地址; };
file "slaves/linuxprobe.com.zone";
};

zone "10.168.192.in-addr.arpa" IN {
type slave;
masters { 主服务器的ip地址; };
file "slaves/192.168.10.arpa";
};
systemctl restart named

第3步: 主服务器查看防火墙, 如果没有指定端口则开启指定端口.

 firewall-cmd --list-port
 firewall-cmd --zone=public --add-port=53/tcp --permanent
 firewall-cmd --zone=public --add-port=53/udp --permanent
 firewall-cmd --reload

第4步: 检验解析结果

 cd /var/named/slaves
 ls
 nslookup
 www.linuxprobe.com
 192.168.10.10

安全的加密传输

bind服务程序为了提供安全的解析服务, 已经对TSIG(RFC 2845)加密机制提供了支持. TSIG主要是利用了密码编码的方式来保护区域信息的传输(Zone Transfer), 即TSIG加密机制保证了DNS服务器之间传输域名区域信息的安全性.

删除所有获取到的数据配置文件

 rm -rf /var/named/slaves/*

第1步: 在主服务器中生成密钥, dnssec-keygen命令用于生成安全的DNS服务密钥.

 dnssec-keygen [参数]
 |__ -a 指定加密算法, 包括RSAMD5(RSA)、RSASHA1、DSA、NSEC3RSASHA1、NSEC3DSA等
 |__ -b 密钥长度(HMAC-MD5的密钥长度在1~512位之间)
 |__ -n 密钥的类型(HOST表示与主机相关)

使用命令生成一个主机名称为master-slave的128位HMAC-MD5算法的密钥文件. 在执行该命令后默认会在当前目录中生成公钥和私钥文件, 把私钥文件中Key参数后面的值记录下来, 一会儿要将其写入传输配置文件中.

 cd ~
 dnssec-keygen -a HMAC-MD5 -b 128 -n HOST master-slave
 ls -al Kmaster-slave.+157+46845.*
 cat Kmaster-slave.+157+46845.private
 
1
2
Algorithm: 157 (HMAC_MD5)
Key: 1XEEL3tG5DNLOw+1WHfE3Q==

第2步: 在主服务器中创建密钥验证文件. 进入bind服务程序用于保存配置文件的目录, 把刚刚生成的密钥名称、加密算法和私钥加密字符串按照下面格式写入到tansfer.key传输配置文件中. 为了安全起见, 将文件的所属组修改成named, 并将文件权限设置得要小一点, 然后把该文件做一个硬链接到/etc目录中.

 cd /var/named/chroot/etc/
 vim transfer.key
 
1
2
3
4
key "master-slave" {
algorithm hmac-md5;
secret "1XEEL3tG5DNLOw+1WHfE3Q==";
};
chown root:named transfer.key chmod 640 transfer.key ln transfer.key /etc/transfer.key

第3步:开启并加载Bind服务的密钥验证功能. 首先需要在主服务器的主配置文件中加载密钥验证文件, 然后进行设置, 使得只允许带有master-slave密钥认证的DNS服务器同步数据配置文件:

 vim /etc/named.conf
 
1
2
3
4
5
6
//
include "/etc/transfer.key";
options {

allow-query { any; };
allow-transfer { key master-slave; };
systemctl restart named

清空DNS从服务器同步目录中所有的数据配置文件, 然后再次重启bind服务程序, 这时就已经不能像刚才那样自动获取到数据配置文件.

 rm -rf /var/named/slaves/*
 systemctl restart named
 ls  /var/named/slaves/

第4步: 配置从服务器, 使其支持密钥验证. 配置DNS从服务器和主服务器的方法大致相同, 都需要在bind服务程序的配置文件目录中创建密钥认证文件, 并设置相应的权限, 然后把该文件做一个硬链接到/etc目录中.

 cd /var/named/chroot/etc
 vim transfer.key
 
1
2
3
4
key "master-slave" {
algorithm hmac-md5;
secret "1XEEL3tG5DNLOw+1WHfE3Q==";
};
chown root:named transfer.key chmod 640 transfer.key ln transfer.key /etc/transfer.key

第5步: 开启并加载从服务器的密钥验证功能. 这一步的操作步骤也同样是在主配置文件中加载密钥认证文件, 然后按照指定格式写上主服务器的IP地址和密钥名称. 注意, 密钥名称等参数位置不要太靠前, 大约在第43行比较合适, 否则bind服务程序会因为没有加载完预设参数而报错:

 vim /etc/named.conf
 
1
2
3
4
5
6
7
8
9
10
11
12
//
include "/etc/transfer.key";
options {

allow-query { any; };
allow-transfer { key master-slave; };

server 192.168.10.10
{
keys { master-slave; };
};
logging {

第6步: DNS从服务器同步域名区域数据

 systemctl restart named
 ls /var/named/slaves/

部署缓存服务器

DNS缓存服务器(Caching DNS Server)是一种不负责域名数据维护的DNS服务器. 简单来说, 缓存服务器就是把用户经常使用到的域名与IP地址的解析记录保存在主机本地, 从而提升下次解析的效率.

DNS缓存服务器一般用于经常访问某些固定站点而且对这些网站的访问速度有较高要求的企业内网中, 但实际的应用并不广泛. 而且, 缓存服务器是否可以成功解析还与指定的上级DNS服务器的允许策略有关, 因此当前仅需了解即可.

第1步: 配置系统的双网卡参数

用于配置Linux虚拟机系统所需的参数信息
主机名称操作系统IP地址
缓存服务器RHEL 7网卡(外网): 根据物理设备的网络参数进行配置(通过DHCP或手动方式指定IP地址与网关等信息)
网卡(内网): 192.168.10.10
客户端RHEL 7192.168.10.20

第2步: 在bind服务程序的主配置文件中添加缓存转发参数, 上级DNS服务器地址指的是获取数据配置文件的服务器.

 systemctl restart network
 vim /etc/named.conf
 
1
2
allow-query { any; };
forwarders { 上级DNS服务器地址; };
systemctl restart named

第3步: 重启DNS服务, 把客户端主机的DNS服务器地址参数修改为DNS缓存服务器的IP地址.
配置客户端的网卡信息

 systemctl restart network
 nslookup

 www.linuxprobe.com
 8.8.8.8

分离解析技术

可以购买多台服务器并分别部署在全球各地, 使用DNS服务的分离解析功能, 即可让位于不同地理范围内的读者通过访问相同的网址, 而从不同的服务器获取到相同的数据.

不同主机的操作系统与IP地址情况
主机名称操作系统IP地址
DNS服务器RHEL 7北京网络:122.71.115.10
美国网络:106.185.25.10
北京用户Windows 7122.71.115.1
海外用户Windows 7106.185.25.1

DNS分离解析拓扑图

第1步: 修改bind服务程序的主配置文件, 把第11行的监听端口与第17行的允许查询主机修改为any. 由于配置的DNS分离解析功能与DNS根服务器配置参数有冲突, 所以需要把第51~54行的根域信息删除.

 vim /etc/named.conf

 zone "." IN {
 type hint;
 file "named.ca";
 };

第2步: 编辑区域配置文件. 把区域配置文件中原有的数据清空, 然后按照以下格式写入参数. 首先使用acl参数分别定义两个变量名称(china与american), 当下面需要匹配IP地址时只需写入变量名称即可, 这样不仅容易阅读识别, 而且也利于修改维护.

view参数的作用是通过判断用户的IP地址是中国的还是美国的, 然后去分别加载不同的数据配置文件.

 vim /etc/named.rfc1912.zones 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
acl "china" { 122.71.115.0/24; };
acl "american" { 106.185.25.0/24;};

view "china"{
match-clients { "china"; };
zone "linuxprobe.com" {
type master;
file "linuxprobe.com.china";
};
};

view "american" {
match-clients { "american"; };
zone "linuxprobe.com" {
type master;
file "linuxprobe.com.american";
};
};

第3步: 建立数据配置文件. 分别通过模板文件创建出两份不同名称的区域数据文件, 其名称应与上面区域配置文件中的参数相对应.

 cd /var/named
 cp -a named.localhost linuxprobe.com.china
 cp -a named.localhost linuxprobe.com.american

 vim linuxprobe.com.china
 
1
2
3
4
5
6
7
8
9
10
11
$TTL 1D	#生存周期为1天				
@ IN SOA linuxprobe.com. root.linuxprobe.com. (
#授权信息开始: #DNS区域的地址 #域名管理员的邮箱(不要用@符号)
0;serial #更新序列号
1D;refresh #更新时间
1H;retry #重试延时
1W;expire #失效时间
3H;)minimum #无效解析记录的缓存时间
NS ns.linuxprobe.com. #域名服务器记录
ns IN A 122.71.115.10 #地址记录(ns.linuxprobe.com.)
www IN A 122.71.115.15 #地址记录(www.linuxprobe.com.)
vim linuxprobe.com.american
1
2
3
4
5
6
7
8
9
10
11
$TTL 1D	#生存周期为1天				
@ IN SOA linuxprobe.com. root.linuxprobe.com. (
#授权信息开始: #DNS区域的地址 #域名管理员的邮箱(不要用@符号)
0;serial #更新序列号
1D;refresh #更新时间
1H;retry #重试延时
1W;expire #失效时间
3H;)minimum #无效解析记录的缓存时间
NS ns.linuxprobe.com. #域名服务器记录
ns IN A 106.185.25.10 #地址记录(ns.linuxprobe.com.)
www IN A 106.185.25.15 #地址记录(www.linuxprobe.com.)

第4步: 重新启动named服务程序, 验证结果. 将客户端主机(Windows系统或Linux系统均可)的IP地址分别设置为122.71.115.1与106.185.25.1, 将DNS地址分别设置为服务器主机的两个IP地址.

 systemctl restart named

 windons7(1):
 ip地址:122.71.115.1
 子网掩码:255.255.255.0
 默认网关:122.71.115.10
 DNS服务器:122.71.115.10

 windons7(2):
 ip地址:106.185.25.1
 子网掩码:255.255.255.0
 默认网关:106.185.25.10
 DNS服务器:106.185.25.10

使用DHCP动态管理主机地址

动态主机地址管理协议

动态主机配置协议(DHCP)是一种基于UDP协议且仅限于在局域网内部使用的网络协议, 主要用于大型的局域网环境或者存在较多移动办公设备的局域网环境中, 其主要用途是为局域网内部的设备或网络供应商自动分配IP地址等参数.

简单来说, DHCP协议就是让局域网中的主机自动获得网络参数的服务.

DHCP工作原理

DHCP涉及的常见术语
作用域一个完整的IP地址段, DHCP协议根据作用域来管理网络的分布、分配IP地址及其他配置参数.
超级作用域用于管理处于同一个物理网络中的多个逻辑子网段. 超级作用域中包含了可以统一管理的作用域列表.
排除范围把作用域中的某些IP地址排除, 确保这些IP地址不会分配给DHCP客户端.
地址池在定义了DHCP的作用域并应用了排除范围后, 剩余的用来动态分配给DHCP客户端的IP地址范围.
租约DHCP客户端能够使用动态分配的IP地址的时间
预约保证网络中的特定设备总是获取到相同的IP地址

部署dhcpd服务程序

dhcpd是Linux系统中用于提供DHCP协议的服务程序

在确认Yum软件仓库配置妥当之后, 安装dhcpd服务程序:
yum install dhcp

查看dhcpd服务程序的配置文件内容
cat /etc/dhcp/dhcpd.conf

一个标准的配置文件应该包括全局配置参数、子网网段声明、地址配置选项以及地址配置参数. 其中, 全局配置参数用于定义dhcpd服务程序的整体运行参数; 子网网段声明用于配置整个子网段的地址属性.
dhcp配置文件

dhcpd服务程序配置文件中使用的常见参数以及作用
ddns-update-style 类型定义DNS服务动态更新的类型, 类型包括:none(不支持动态更新)、interim(互动更新模式)与ad-hoc(特殊更新模式)
allow/ignore client-updates允许/忽略客户端更新DNS记录
default-lease-time 21600默认超时时间
max-lease-time 43200最大超时时间
option domain-name-servers 8.8.8.8定义DNS服务器地址
option domain-name "domain.org"定义DNS域名
range定义用于分配的IP地址池
option subnet-mask定义客户端的子网掩码
option routers定义客户端的网关地址
broadcast-address 广播地址定义客户端的广播地址
ntp-server IP地址定义客户端的网络时间服务器(NTP)
nis-servers IP地址定义客户端的NIS域服务器的地址
hardware 硬件类型 MAC地址指定网卡接口的类型与MAC地址
server-name 主机名向DHCP客户端通知DHCP服务器的主机名
fixed-address IP地址将某个固定的IP地址分配给指定主机
time-offset 偏移差指定客户端与格林尼治时间的偏移差

自动管理IP地址

DHCP服务器会自动把IP地址、子网掩码、网关、DNS地址等网络信息分配给有需要的客户端, 而且当客户端的租约时间到期后还可以自动回收所分配的IP地址, 以便交给新加入的客户端.

测试所用的网络地址以及参数信息
参数名称
默认租约时间21600秒
最大租约时间43200秒
IP地址范围192.168.10.50~192.168.10.150
子网掩码255.255.255.0
网关地址192.168.10.1
DNS服务器地址192.168.10.1
搜索域linuxprobe.com
DHCP服务器以及客户端的配置信息
主机类型操作系统IP地址
DHCP服务器RHEL 7192.168.10.1
DHCP客户机RHEL 7DHCP自动获取地址

将虚拟机软件自带的DHCP功能关闭
不使用虚拟机的DHCP功能

在配置dhcpd服务程序时, 配置文件中的每行参数后面都需要以分号(;)结尾:

 vim /etc/dhcp/dhcpd.conf
1
2
3
4
5
6
7
8
9
10
11
ddns-update-style none;
ignore client-updates;
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.50 192.168.10.150;
option subnet-mask 255.255.255.0;
option routers 192.168.10.1;
option domain-name "linuxprobe.com";
option domain-name-servers 192.168.10.1;
default-lease-time 21600;
max-lease-time 43200;
}
dhcpd服务程序配置文件中使用的参数以及作用
参数作用
ddns-update-style none;设置DNS服务不自动进行动态更新
ignore client-updates;忽略客户端更新DNS记录
subnet 192.168.10.0 netmask 255.255.255.0 {作用域为192.168.10.0/24网段
range 192.168.10.50 192.168.10.150;IP地址池为192.168.10.50-150(约100个IP地址)
option subnet-mask 255.255.255.0;定义客户端默认的子网掩码
option routers 192.168.10.1;定义客户端的网关地址
option domain-name "linuxprobe.com";定义默认的搜索域
option domain-name-servers 192.168.10.1;定义客户端的DNS地址
default-lease-time 21600;定义默认租约时间(单位:秒)
max-lease-time 43200;定义最大预约时间(单位:秒)
}结束符

把配置过的dhcpd服务加入到开机启动项中, 以确保当服务器下次开机后dhcpd服务依然能自动启动, 并顺利地为客户端分配IP地址等信息.

 systemctl start dhcpd
 systemctl enable dhcpd
 systemctl restart network

开启客户端来检验IP分配效果, 重启客户端的网卡服务后即可看到自动分配到的IP地址.

 systemctl restart network

分配固定IP地址

在DHCP协议中有个术语是”预约”, 它用来确保局域网中特定的设备总是获取到固定的IP地址.

要想把某个IP地址与某台主机进行绑定, 就需要用到这台主机的MAC地址. MAC地址是网卡上面的一串独立的标识符, 具备唯一性, 因此不会存在冲突的情况.
网卡MAC地址

在dhcpd服务程序的配置文件中, 按照如下格式将IP地址与MAC地址进行绑定:

1
2
3
4
host 主机名称 {		
hardware ethernet 该主机的MAC地址;
fixed-address 欲指定的IP地址;
}

另一种查看方式:先启动dhcpd服务程序, 为老板的主机分配一个IP地址, 这样就会在DHCP服务器本地的日志文件中保存这次的IP地址分配记录. 然后查看日志文件, 就可以获悉主机的MAC地址了

 tail -f /var/log/messages 

修改dhcpd服务程序配置文件后, 并重启dhcpd服务程序.

 vim /etc/dhcp/dhcpd.conf 
 
1
2
3
4
host linuxprobe {
hardware ethernet MAC地址;
fixed-address 192.168.10.88;
}
systemctl restart dhcpd 客户端: systemctl restart network

使用Postfix与Dovecot部署邮件系统

电子邮件系统

电子邮件系统基于邮件协议来完成电子邮件的传输, 常见的邮件协议:
简单邮件传输协议(Simple Mail Transfer Protocol, SMTP)用于发送和中转发出的电子邮件, 占用服务器的25/TCP端口.
邮局协议版本3(Post Office Protocol 3)用于将电子邮件存储到本地主机, 占用服务器的110/TCP端口.
Internet消息访问协议版本4(Internet Message Access Protocol 4)用于在本地主机上访问邮件, 占用服务器的143/TCP端口.

在电子邮件系统中, 为用户收发邮件的服务器名为邮件用户代理(Mail User Agent, MUA).
用于保存用户邮件的”信箱”服务器, 这个服务器的名字为邮件投递代理(Mail Delivery Agent, MDA), 其工作职责是把来自于邮件传输代理(Mail Transfer Agent, MTA)的邮件保存到本地的收件箱中.
MTA的工作职责是转发处理不同电子邮件服务供应商之间的邮件, 把来自于MUA的邮件转发到合适的MTA服务器.

邮件投递工程

在生产环境中部署企业级的电子邮件系统时, 有4个注意事项请留意:

1
2
3
4
添加反垃圾与反病毒模块: 它能够很有效地阻止垃圾邮件或病毒邮件对企业信箱的干扰
对邮件加密: 可有效保护邮件内容不被黑客盗取和篡改
添加邮件监控审核模块: 可有效地监控企业全体员工的邮件中是否有敏感词、是否有透露企业资料等违规行为
保障稳定性: 电子邮件系统的稳定性至关重要, 运维人员应做到保证电子邮件系统的稳定运行, 并及时做好防范分布式拒绝服务(Distributed Denial of Service, DDoS)攻击的准备.

部署基础的电子邮件系统

一个最基础的电子邮件系统肯定要能提供发件服务和收件服务, 为此需要使用基于SMTP协议的Postfix服务程序提供发件服务功能, 并使用基于POP3协议的Dovecot服务程序提供收件服务功能.

邮局系统流程图

第1步: 配置服务器主机名称, 需要保证服务器主机名称与发信域名保持一致:

 vim /etc/hostname
 
1
mail.linuxprobe.com
hostname

第2步: 清空iptables防火墙默认策略, 并保存策略状态, 避免因防火墙中默认存在的策略阻止了客户端DNS解析域名及收发邮件.

 iptables -F
 service iptables save
 
1
2
无法保存时安装iptables-services包
yum install iptables-services

第3步: 为电子邮件系统提供域名解析

 cat /etc/named.rfc1912.zones
 
1
2
3
4
5
zone "linuxprobe.com" IN {
type master;
file "linuxprobe.com.zone";
allow-update {none;};
};
cat /var/named/linuxprobe.com.zone
1
2
3
4
5
6
7
8
9
10
11
$TTL 1D	#生存周期为1
@ IN SOA linuxprobe.com. root.linuxprobe.com. (
0;serial
1D;refresh
1H;retry
1W;expire
3H;)minimum
NS ns.linuxprobe.com.
ns IN A 192.168.10.10
@ IN MX 10 mail.linuxprobe.com.
www IN A 192.168.10.10
systemctl restart named systemctl enable named

把服务器的DNS地址修改成本地IP地址

配置Postfix服务程序

Postfix是一款由IBM资助研发的免费开源电子邮件服务程序, 能够很好地兼容Sendmail服务程序, 可以方便Sendmail用户迁移到Postfix服务上.

Postfix服务程序的邮件收发能力强于Sendmail服务, 而且能自动增加、减少进程的数量来保证电子邮件系统的高性能与稳定性.

另外, Postfix服务程序由许多小模块组成, 每个小模块都可以完成特定的功能, 因此可在生产工作环境中根据需求灵活搭配它们.

第1步:安装Postfix服务程序, 禁用iptables防火墙, 否则外部用户无法访问电子邮件系统.

 yum install postfix
 systemctl disable iptables
第2步:配置Postfix服务程序, Postfix服务程序主配置文件(/etc/postfix/main.cf).
Postfix服务程序主配置文件中的重要参数
参数作用
myhostname邮局系统的主机名
mydomain邮局系统的域名
myorigin从本机发出邮件的域名名称
inet_interfaces监听的网卡接口
mydestination可接收邮件的主机名或域名
mynetworks设置可转发哪些主机的邮件
relay_domains设置可转发哪些网域的邮件

在Postfix服务程序的主配置文件中, 总计需要修改5处:

 vim /etc/postfix/main.cf
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1.在第76行定义一个名为myhostname的变量, 用来保存服务器的主机名称.
myhostname = mail.linuxprobe.com

2.在第83行定义一个名为mydomain的变量, 用来保存邮件域的名称.
mydomain = linuxprobe.com

3.在第99行调用前面的mydomain变量, 用来定义发出邮件的域.
myorigin = $mydomain

4.在第116行定义网卡监听地址, 可以指定要使用服务器的哪些IP地址对外提供电子邮件服务.
inet_interfaces = all

5.在第164行定义可接收邮件的主机名或域名列表
mydestination = $myhostname , $mydomain

第3步:创建电子邮件系统的登录账户, 最后重启配置妥当的postfix服务程序, 并将其添加到开机启动项中.

 useradd boss
 echo "linuxprobe" | passwd --stdin boss
 systemctl restart postfix
 systemctl enable postfix

配置Dovecot服务程序

Dovecot是一款能够为Linux系统提供IMAP和POP3电子邮件服务的开源服务程序, 安全性极高, 配置简单, 执行速度快, 而且占用的服务器硬件资源也较少.

第1步:安装Dovecot服务程序软件包
yum install dovecot

第2步:配置部署Dovecot服务程序, 第24行, 把Dovecot服务程序支持的电子邮件协议修改为imap、pop3和lmtp. 然后在这一行下面添加一行参数, 允许用户使用明文进行密码验证.

Dovecot服务程序为了保证电子邮件系统的安全而默认强制用户使用加密方式进行登录, 而由于当前还没有加密系统, 因此需要添加该参数来允许用户的明文登录.

 vim /etc/dovecot/dovecot.conf
 
1
2
protocols = imap pop3 lmtp
disable_plaintext_auth = no

在主配置文件中的第48行, 设置允许登录的网段地址. 如果想允许所有人都能使用, 则不用修改本参数.

1
login_trusted_networks = 192.168.10.0/24

第3步:配置邮件格式与存储路径. 在Dovecot服务程序单独的子配置文件中, 定义一个路径, 用于指定要将收到的邮件存放到服务器本地的哪个位置.
这个路径默认已经定义好了, 将该配置文件中第24行前面的井号(#)删除即可.

 vim /etc/dovecot/conf.d/10-mail.conf
 
1
mail_location = mbox:~/mail:INBOX=/var/mail/%u

然后切换到配置Postfix服务程序时创建的boss账户, 并在家目录中建立用于保存邮件的目录. 记得要重启Dovecot服务并将其添加到开机启动项中.

 su - boss
 mkdir -p mail/.imap/INBOX
 exit
 systemctl restart dovecot 
 systemctl enable dovecot 

客户使用电子邮件系统

使用Windows操作系统中自带的Outlook软件来进行测试(也可以使用其他电子邮件客户端来测试, 比如Foxmail)

服务器与客户端的操作系统与IP地址
主机名称操作系统IP地址
电子邮件系统及DNS服务器RHEL 7192.168.10.10
客户端主机Windows 7192.168.10.30

配置客户机IP地址-1

第1步:在Windows 7系统中运行Outlook软件程序
第1步:开启OutLook程序

第2步:配置电子邮件账户
第2步:选择开始配置电子邮件帐户

第3步:选择电子邮件服务的协议类型
第3步:选择默认的邮局服务器类型

第4步:填写电子邮件账户信息
第4步:填写创建的邮箱帐号和密码

第5步:进行电子邮件服务登录验证, Outlook软件默认会通过SSL加密协议尝试登录电子邮件服务, 超时后系统会出现登录失败的报错信息. 此时只需再次单击”下一步”按钮, 即可让Outlook软件通过非加密的方式验证登录.
第5步:等待连接邮局服务器
第6步:选择非加密的链接方式

第6步:向其他信箱发送邮件
第7步:在页面上邮件, 选择“新邮件”
第8步:填写收件人与邮件内容后发送

当使用Outlook软件成功发送邮件后, 便可以在电子邮件服务器上使用mail命令查看到新邮件提醒了. 如果想查看邮件的完整内容, 只需输入收件人姓名前面的编号即可.

 mail
 
1
2
&> 编号
> quit

设置用户别名邮箱

用户别名功能是一项简单实用的邮件账户伪装技术, 可以用来设置多个虚拟信箱的账户以接受发送的邮件, 从而保证自身的邮件地址不被泄露, 还可以用来接收自己的多个信箱中的邮件.
向用户bin发送邮件

在aliases邮件别名服务的配置文件中可以看到, 里面定义了大量的用户别名, 这些用户别名大多数是Linux系统本地的系统账户, 而在冒号(:)间隔符后面的root账户则是用来接收这些账户邮件的人. 用户别名可以是Linux系统内的本地用户, 也可以是完全虚构的用户名字.
cat /etc/aliases

自行定义一些别名来接收邮件. 例如, 创建一个名为xxoo的账户, 而真正接收该账户邮件的应该是root账户.

 vim /etc/aliases
 
1
xxoo: root

向用户xxoo发送邮件

使用root账户在服务器上执行mail命令后, 就能看到这封原本要发送给xxoo账户的邮件.
mail

使用PXE+Kickstart无人值守安装服务

无人值守系统

使用PXE + TFTP + FTP + DHCP + Kickstart服务搭建出一个无人值守安装系统. 这种无人值守安装系统可以自动地为数十台服务器安装系统.

无人值守安装流程-1

PXE(Preboot eXecute Environment, 预启动执行环境)是由Intel公司开发的技术, 可以让计算机通过网络来启动操作系统(前提是计算机上安装的网卡支持PXE技术), 主要用于在无人值守安装系统中引导客户端主机安装Linux操作系统.

Kickstart是一种无人值守的安装方式, 其工作原理是预先把原本需要运维人员手工填写的参数保存成一个ks.cfg文件, 当安装过程中需要填写参数时则自动匹配Kickstart生成的文件. 所以只要Kickstart文件包含了安装过程中需要人工填写的所有参数, 那么从理论上来讲完全不需要运维人员的干预, 就可以自动完成安装工作.

由于当前的客户端主机并没有完整的操作系统, 也就不能完成FTP协议的验证了, 所以需要使用TFTP协议帮助客户端获取引导及驱动文件. vsftpd服务程序用于将完整的系统安装镜像通过网络传输给客户端. 当然, 只要能将系统安装镜像成功传输给客户端即可, 因此也可以使用httpd来替代vsftpd服务程序.

部署相关服务程序

配置DHCP服务程序

DHCP服务程序用于为客户端主机分配可用的IP地址, 而且这是服务器与客户端主机进行文件传输的基础. 在虚拟机的虚拟网络编辑器中关闭自身的DHCP服务.

无人值守系统与客户端的设置
主机名称操作系统IP地址
无人值守系统RHEL 7192.168.10.10
客户端未安装操作系统

挂载好光盘镜像并把Yum仓库文件配置妥当后, 开始安装DHCP服务程序软件包.
yum install dhcp

允许BOOTP引导程序协议, 旨在让局域网内暂时没有操作系统的主机也能获取静态IP地址; 在配置文件的最下面加载了引导驱动文件pxelinux.0(这个文件会在下面的步骤中创建), 其目的是让客户端主机获取到IP地址后主动获取引导驱动文件, 自行进入下一步的安装过程.

 vim /etc/dhcp/dhcpd.conf

 
1
2
3
4
5
6
7
8
9
10
11
12
13
allow booting;
allow bootp;
ddns-update-style interim;
ignore client-updates;
subnet 192.168.10.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.10.10;
range dynamic-bootp 192.168.10.100 192.168.10.200;
default-lease-time 21600;
max-lease-time 43200;
next-server 192.168.10.10;
filename "pxelinux.0";
}

重新启动该服务程序, 并将其添加到开机启动项中.

 systemctl restart dhcpd
 systemctl enable dhcpd

配置TFTP服务程序

TFTP作为一种基于UDP协议的简单文件传输协议, 不需要进行用户认证即可获取到所需的文件资源. 因此接下来配置TFTP服务程序, 为客户端主机提供引导及驱动文件. 当客户端主机有了基本的驱动程序之后, 再通过vsftpd服务程序将完整的光盘镜像文件传输过去.
yum install tftp-server

TFTP是一种非常精简的文件传输服务程序, 它的运行和关闭是由xinetd网络守护进程服务来管理的.

xinetd服务程序会同时监听系统的多个端口, 然后根据用户请求的端口号调取相应的服务程序来响应用户的请求.

需要开启TFTP服务程序, 只需在xinetd服务程序的配置文件中把disable参数改成no就可以了. 保存配置文件并退出, 然后重启xinetd服务程序, 并将其加入到开机启动项中.

 vim /etc/xinetd.d/tftp
 
1
disable                 = no
yum -y install xinetd systemctl restart xinetd systemctl enable xinetd

TFTP服务程序默认使用的是UDP协议, 占用的端口号为69, 所以在生产环境中还需要在firewalld防火墙管理工具中写入使其永久生效的允许策略, 以便让客户端主机顺利获取到引导文件.

 firewall-cmd --permanent --add-port=69/udp
 firewall-cmd --reload

配置SYSLinux服务程序

SYSLinux是一个用于提供引导加载的服务程序. 与其说SYSLinux是一个服务程序, 不如说更需要里面的引导文件, 在安装好SYSLinux服务程序软件包后, /usr/share/syslinux目录中会出现很多引导文件.
yum install syslinux

首先需要把SYSLinux提供的引导文件复制到TFTP服务程序的默认目录中, 也就是前文提到的文件pxelinux.0, 这样客户端主机就能够顺利地获取到引导文件了.

另外在RHEL 7系统光盘镜像中也有一些需要调取的引导文件. 确认光盘镜像已经被挂载到/media/cdrom目录后, 使用复制命令将光盘镜像中自带的一些引导文件也复制到TFTP服务程序的默认目录中.

 cd /var/lib/tftpboot
 cp /usr/share/syslinux/pxelinux.0 .
 cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} .
 cp /media/cdrom/isolinux/{vesamenu.c32,boot.msg} .

然后在TFTP服务程序的目录中新建pxelinux.cfg目录, 将系统光盘中的开机选项菜单复制到该目录中, 并命名为default.

 mkdir pxelinux.cfg
 cp /media/cdrom/isolinux/isolinux.cfg pxelinux.cfg/default

这个default文件就是开机时的选项菜单.
开机界面

编辑这个default文件, 把第1行的default参数修改为linux, 这样系统在开机时就会默认执行那个名称为linux的选项了. 对应的linux选项大约在64行, 我们将默认的光盘镜像安装方式修改成FTP文件传输方式, 并指定好光盘镜像的获取网址以及Kickstart应答文件的获取路径:

 vim pxelinux.cfg/default
 
1
2
3
default linux
prompt 1
append initrd=initrd.img inst.stage2=ftp://ip地址 ks=ftp://ip地址/pub/ks.cfg quiet # 64行

配置VSFtpd服务程序

在无人值守安装系统的服务中, 光盘镜像是通过FTP协议传输的, 因此势必要用到vsftpd服务程序. 当然, 也可以使用httpd服务程序来提供Web网站访问的方式, 只要能确保将光盘镜像顺利传输给客户端主机即可.
yum install vsftpd

在配置文件修改正确之后, 一定将相应的服务程序添加到开机启动项中.

 systemctl restart vsftpd
 systemctl enable vsftpd

在确认系统光盘镜像已经正常挂载到/media/cdrom目录后, 把目录中的光盘镜像文件全部复制到vsftpd服务程序的工作目录中.
cp -r /media/cdrom/* /var/ftp

在firewalld防火墙管理工具中写入使FTP协议永久生效的允许策略, 然后在SELinux中放行FTP传输:

 firewall-cmd --permanent --add-service=ftp
 firewall-cmd --reload 
 setsebool -P ftpd_connect_all_unreserved=on

创建KickStart应答文件

Kickstart应答文件中包含了系统安装过程中需要使用的选项和参数信息, 系统可以自动调取这个应答文件的内容, 从而彻底实现了无人值守安装系统.
在root管理员的家目录中有一个名为anaconda-ks.cfg的文件, 它就是应答文件. 下面将这个文件复制到vsftpd服务程序的工作目录中. 使用chmod命令设置该文件的权限, 确保所有人都有可读的权限, 以保证客户端主机可以顺利获取到应答文件及里面的内容:

 cp ~/anaconda-ks.cfg /var/ftp/pub/ks.cfg
 chmod +r /var/ftp/pub/ks.cfg

首先把第6行的光盘镜像安装方式修改成FTP协议, 仔细填写好FTP服务器的IP地址, 并用本地浏览器尝试打开下检查有没有报错. 然后把第21行的时区修改成上海(Asia/Shanghai), 最后再把29行的磁盘选项设置为清空所有磁盘内容并初始化磁盘:

 vim /var/ftp/pub/ks.cfg
 
1
2
3
url --url=ftp://ip地址 # 6行
timezone Asia/Shanghai --isUtc # 21行
clearpart --all --initlabel # 29行

如果觉得系统默认自带的应答文件参数较少, 不能满足生产环境的需求, 则可以通过Yum软件仓库来安装system-config-kickstart软件包. 这是一款图形化的Kickstart应答文件生成工具, 可以根据自己的需求生成自定义的应答文件, 然后将生成的文件放到/var/ftp/pub目录中并将名字修改为ks.cfg即可.

 yum install system-config-kickstart

启动工具:
system-config-kickstart
Kickstart配置一
Kickstart配置二
Kickstart配置二.五
Kickstart配置二.六
Kickstart配置三
Kickstart配置四
注: 如果出现由于下载软件包信息失败, 软件包选择被禁止信息.
则: 修改yum源标志, 设置为development即可:

 vim /etc/yum.repos.d/---.repo
 [development]

Kickstart配置五
Kickstart配置六

1
2
3
4
5
6
7
rm -r /etc/yum.repos.d/*
echo '[base]
name=centos7
baseurl=ftp://192.168.10.10
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/PRM-GPG-KEY-redhat-release' > /etc/yum.repos.d/centos7.repo

最后文件选项保存文件, 将文件放到/var/ftp/pub目录中.

 mv /ks.cfg /var/ftp/pub/
 chmod +r /var/ftp/pub/ks.cfg
 vim /var/ftp/pub/ks.cfg
 
1
url --url=ftp://ip地址 # 6行

自动部署客户机

新建虚拟机并更改网络适配器的模式为仅主机模式
自动化安装加载中
自动化安装加载中2

使用LNMP架构部署动态网站环境

源码包程序

使用源码包来安装服务程序具有两个优势:
1.源码包的可移植性非常好, 几乎可以在任何Linux系统中安装使用, 而RPM软件包是针对特定系统和架构编写的指令集, 必须严格地符合执行环境才能顺利安装(即只会去”生硬地”安装服务程序).

2.使用源码包安装服务程序时会有一个编译过程, 因此可以更好地适应安装主机的系统环境, 运行效率和优化程度都会强于使用RPM软件包安装的服务程序.

源码包安装步骤:
第1步:下载及解压源码包文件

 tar xzvf 源码包文件名.tar.gz
 cd 源码包文件目录名

第2步:编译源码包代码
./configure --prefix=/usr/local/program

第3步:生成二进制安装程序并运行二进制的服务程序安装包
make && make install

第4步:清理源码包临时文件
make clean

LNMP动态网站架构

LNMP动态网站部署架构是一套由Linux + Nginx + MySQL + PHP组成的动态网站系统解决方案, 具有免费、高效、扩展性强且资源消耗低等优良特性.

在使用源码包安装服务程序之前,首先要让安装主机具备编译程序源码的环境, 他需要具备C语言、C++语言、Perl语言的编译器, 以及各种常见的编译支持函数库程序.

1
yum install -y apr* autoconf automake bison bzip2 bzip2* compat* cpp curl curl-devel fontconfig fontconfig-devel freetype freetype* freetype-devel gcc gcc-c++ gd gettext gettext-devel glibc kernel kernel-headers keyutils keyutils-libs-devel krb5-devel libcom_err-devel libpng libpng-devel libjpeg* libsepol-devel libselinux-devel libstdc++-devel libtool* libgomp libxml2 libxml2-devel libXpm* libtiff libtiff* make mpfr ncurses* ntp openssl openssl-devel patch pcre-devel perl php-common php-gd policycoreutils telnet t1lib t1lib* nasm nasm* wget zlib-devel

安装LNMP动态网站部署架构所需的16个软件源码包和1个用于检查效果的论坛网站系统软件包, 使用wget命令下载这些源码包文件. 根据FHS协议, 建议把要安装的软件包存放在/usr/local/src目录中:

 cd /usr/local/src
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
wget https://www.linuxprobe.com/Software/cmake-2.8.11.2.tar.gz
wget https://www.linuxprobe.com/Software/Discuz_X3.2_SC_GBK.zip
wget https://www.linuxprobe.com/Software/freetype-2.5.3.tar.gz
wget https://www.linuxprobe.com/Software/jpegsrc.v9a.tar.gz
wget https://www.linuxprobe.com/Software/libgd-2.1.0.tar.gz
wget https://www.linuxprobe.com/Software/libmcrypt-2.5.8.tar.gz
wget https://www.linuxprobe.com/Software/libpng-1.6.12.tar.gz
wget https://www.linuxprobe.com/Software/libvpx-v1.3.0.tar.bz2
wget https://www.linuxprobe.com/Software/mysql-5.6.19.tar.gz
wget https://www.linuxprobe.com/Software/nginx-1.6.0.tar.gz
wget https://www.linuxprobe.com/Software/openssl-1.0.1h.tar.gz
wget https://www.linuxprobe.com/Software/php-5.5.14.tar.gz
wget https://www.linuxprobe.com/Software/pcre-8.35.tar.gz
wget https://www.linuxprobe.com/Software/tiff-4.0.3.tar.gz
wget https://www.linuxprobe.com/Software/yasm-1.2.0.tar.gz
wget https://www.linuxprobe.com/Software/zlib-1.2.8.tar.gz
ls

CMake是Linux系统中一款常用的编译工具

 tar xzvf cmake-2.8.11.2.tar.gz
 cd cmake-2.8.11.2/
 ./configure
 make && make install

配置Mysql服务

在系统中创建一个名为mysql的用户, 专门用于负责运行MySQL数据库. 把这类账户的Bash终端设置成nologin解释器, 避免黑客通过该用户登录到服务器中, 从而提高系统安全性.

 cd ..
 useradd mysql -s /sbin/nologin

创建一个用于保存MySQL数据库程序和数据库文件的目录, 并把该目录的所有者和所属组身份修改为mysql.
/usr/local/mysql是用于保存MySQL数据库服务程序的目录, /usr/local/mysql/var则是用于保存真实数据库文件的目录.

 mkdir -p /usr/local/mysql/var
 chown -Rf mysql:mysql /usr/local/mysql

解压、编译、安装MySQL数据库服务程序, 在编译数据库时使用的是cmake命令
-DCMAKE_INSTALL_PREFIX参数用于定义数据库服务程序的保存目录
-DMYSQL_DATADIR参数用于定义真实数据库文件的目录
-DSYSCONFDIR则是定义MySQL数据库配置文件的保存目录

 tar xzvf mysql-5.6.19.tar.gz
 cd mysql-5.6.19/
 cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/var -DSYSCONFDIR=/etc
 make && make install

为了让MySQL数据库程序正常运转起来, 需要先删除/etc目录中的默认配置文件, 然后在MySQL数据库程序的保存目录scripts内找到一个名为mysql_install_db的脚本程序, 执行这个脚本程序并使用:
–user参数指定MySQL服务的对应账号名称(在前面步骤已经创建),
使用–basedir参数指定MySQL服务程序的保存目录,
使用–datadir参数指定MySQL真实数据库的文件保存目录,
这样即可生成系统数据库文件, 也会生成出新的MySQL服务配置文件.

 rm -rf /etc/my.cnf
 cd /usr/local/mysql
 ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var

把系统新生成的MySQL数据库配置文件链接到/etc目录中, 然后把程序目录中的开机程序文件复制到/etc/rc.d/init.d目录中, 以便通过service命令来管理MySQL数据库服务程序. 记得把数据库脚本文件的权限修改成755以便于让用户有执行该脚本的权限:

 ln -s my.cnf /etc/my.cnf 
 cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
 chmod 755 /etc/rc.d/init.d/mysqld

编辑刚复制的MySQL数据库脚本文件, 把第46、47行的basedir与datadir参数分别修改为MySQL数据库程序的保存目录和真实数据库的文件内容.

 vim /etc/rc.d/init.d/mysqld
 
1
2
basedir=/usr/local/mysql
datadir=/usr/local/mysql/var

配置好脚本文件后便可以用service命令启动mysqld数据库服务了. mysqld是MySQL数据库程序的服务名称, 顺带再使用chkconfig命令把mysqld服务程序加入到开机启动项中.

 service mysqld start
 chkconfig mysqld on

把命令所保存的目录永久性地定义到PATH变量中, 需要编辑/etc/profile文件并写入追加的命令目录, 这样当物理设备在下一次重启时就会永久生效了. 也可以使用source命令加载一下/ect/profile文件.

 vim /etc/profile
 
1
export PATH=$PATH:/usr/local/mysql/bin # 74行
source /etc/profile

MySQL数据库服务程序还会调用到一些程序文件和函数库文件. 由于当前是通过源码包方式安装MySQL数据库, 因此现在也必须以手动方式把这些文件链接过来.

 mkdir /var/lib/mysql
 ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql
 ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock
 ln -s /usr/local/mysql/include/mysql /usr/include/mysql

对MySQL数据库进行初始化

 mysql_secure_installation
 Enter current password for root (enter for none): 此处只需按下回车键
 OK, successfully used password, moving on...

 Set root password? [Y/n] y (要为root管理员设置数据库的密码)
 New password: 输入要为root管理员设置的数据库密码
 Re-enter new password: 再输入一次密码
 Password updated successfully!

 Remove anonymous users? [Y/n] y (删除匿名账户)
 ... Success!

 Disallow root login remotely? [Y/n] y (禁止root管理员从远程登录)
 ... Success!

 Remove test database and access to it? [Y/n] y (删除test数据库并取消对其的访问权限)
 - Dropping test database...

 Reload privilege tables now? [Y/n] y (刷新授权表,让初始化后的设定立即生效)
 ... Success!

配置Nginx服务

Nginx是一款相当优秀的用于部署动态网站的轻量级服务程序, 它最初是为俄罗斯门户站点而开发的, 因其稳定性、功能丰富、占用内存少且并发能力强而备受用户的信赖. 目前国内诸如新浪、网易、腾讯等门户站点均已使用了此服务。

Nginx服务程序的稳定性源自于采用了分阶段的资源分配技术, 降低了CPU与内存的占用率, 所以使用Nginx程序部署的动态网站环境不仅十分稳定、高效,而且消耗的系统资源也很少. 此外, Nginx具备的模块数量与Apache具备的模块数量几乎相同, 而且现在已经完全支持proxy、rewrite、mod_fcgi、ssl、vhosts等常用模块. 更重要的是, Nginx还支持热部署技术, 可以7×24不间断提供服务, 还可以在不暂停服务的情况下直接对Nginx服务程序进行升级.

解压、编译、生成、安装Nginx服务程序的源码文件:
用于提供Perl语言兼容的正则表达式库的软件包pcre

 cd /usr/local/src
 tar xzvf pcre-8.35.tar.gz 
 cd pcre-8.35
 ./configure --prefix=/usr/local/pcre
 make && make install 

openssl软件包是用于提供网站加密证书服务的程序文件, 在安装该程序时需要自定义服务程序的安装目录, 以便于稍后调用它们的时候更可控.

 cd /usr/local/src
 tar xzvf openssl-1.0.1h.tar.gz
 cd openssl-1.0.1h
 ./config --prefix=/usr/local/openssl
 make && make install

openssl软件包安装后默认会在/usr/local/openssl/bin目录中提供很多的可用命令, 像前面的操作那样, 将这个目录添加到PATH环境变量中, 并写入到配置文件中, 最后执行source命令以便让新的PATH环境变量内容可以立即生效.

 vim /etc/profile
 
1
export PATH=$PATH:/usr/local/mysql/bin:/usr/local/openssl/bin # 74行
source /etc/profile

zlib软件包是用于提供压缩功能的函数库文件

 cd /usr/local/src
 tar xzvf zlib-1.2.8.tar.gz 
 cd zlib-1.2.8
 ./configure --prefix=/usr/local/zlib
 make && make install

在安装部署好具有依赖关系的软件包之后, 创建一个用于执行Nginx服务程序的账户. 账户名称可以自定义, 后续需要调用

 cd ..
 useradd www -s /sbin/nologin

在使用命令编译Nginx服务程序时, 需要设置特别多的参数, 其中,
–prefix参数用于定义服务程序稍后安装到的位置,
–user与–group参数用于指定执行Nginx服务程序的用户名和用户组.
在使用参数调用openssl、zlib、pcre软件包时, 请写出软件源码包的解压路径, 而不是程序的安装路径

 tar xzvf nginx-1.6.0.tar.gz
 cd nginx-1.6.0/
 
1
./configure --prefix=/usr/local/nginx --without-http_memcached_module --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-openssl=/usr/local/src/openssl-1.0.1h --with-zlib=/usr/local/src/zlib-1.2.8 --with-pcre=/usr/local/src/pcre-8.35
make && make install

要想启动Nginx服务程序以及将其加入到开机启动项中, 也需要有脚本文件, 在/etc/rc.d/init.d目录中创建脚本文件并直接复制下面的脚本内容即可.

 vim /etc/rc.d/init.d/nginx
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#!/bin/bash
# nginx - this script starts and stops the nginx daemon
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /usr/local/nginx/conf/nginx.conf
# pidfile: /usr/local/nginx/logs/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
make_dirs() {
# make required directories
user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
if [ -z "`grep $user /etc/passwd`" ]; then
useradd -M -s /bin/nologin $user
fi
options=`$nginx -V 2>&1 | grep 'configure arguments:'`
for opt in $options; do
if [ `echo $opt | grep '.*-temp-path'` ]; then
value=`echo $opt | cut -d "=" -f 2`
if [ ! -d "$value" ]; then
# echo "creating" $value
mkdir -p $value && chown -R $user $value
fi
fi
done
}
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
#configtest || return $?
stop
sleep 1
start
}
reload() {
#configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac

保存脚本文件后记得为其赋予755权限, 以便能够执行这个脚本. 然后以绝对路径的方式执行这个脚本, 通过restart参数重启Nginx服务程序, 最后再使用chkconfig命令将Nginx服务程序添加至开机启动项中.

 chmod 755 /etc/rc.d/init.d/nginx
 /etc/rc.d/init.d/nginx restart
 chkconfig nginx on

Nginx服务程序验证:在浏览器中输入本机的ip地址

配置php服务

PHP(Hypertxt Preprocessor, 超文本预处理器)是一种通用的开源脚本语言, 发明于1995年, 它吸取了C语言、Java语言及Perl语言的很多优点, 具有开源、免费、快捷、跨平台性强、效率高等优良特性, 是目前Web开发领域最常用的语言之一.

yasm源码包是一款常见的开源汇编器

 cd ..
 tar zxvf yasm-1.2.0.tar.gz
 cd yasm-1.2.0
 ./configure
 make && make install

libmcrypt源码包是用于加密算法的扩展库程序

 cd ..
 tar zxvf libmcrypt-2.5.8.tar.gz
 cd libmcrypt-2.5.8
 ./configure
 make && make install

libvpx源码包是用于提供视频编码器的服务程序

 cd ..
 tar xjvf libvpx-v1.3.0.tar.bz2
 cd libvpx-v1.3.0
 ./configure --prefix=/usr/local/libvpx --enable-shared --enable-vp9
 make && make install

tiff源码包是用于提供标签图像文件格式的服务程序

 cd ..
 tar zxvf tiff-4.0.3.tar.gz
 cd tiff-4.0.3
 ./configure --prefix=/usr/local/tiff --enable-shared
 make && make install

libpng源码包是用于提供png图片格式支持函数库的服务程序

 cd ..
 tar zxvf libpng-1.6.12.tar.gz
 cd libpng-1.6.12
 ./configure --prefix=/usr/local/libpng --enable-shared
 make && make install

freetype源码包是用于提供字体支持引擎的服务程序

 cd ..
 tar zxvf freetype-2.5.3.tar.gz
 cd freetype-2.5.3
 ./configure --prefix=/usr/local/freetype --enable-shared
 make && make install

jpeg源码包是用于提供jpeg图片格式支持函数库的服务程序

 cd ..
 tar zxvf jpegsrc.v9a.tar.gz
 cd jpeg-9a
 ./configure --prefix=/usr/local/jpeg --enable-shared
 make && make install

libgd源码包是用于提供图形处理的服务程序,
在编译libgd源码包时, 请记得写入jpeg、libpng、freetype、tiff、libvpx等服务程序在系统中的安装路径.

 cd ..
 tar zxvf libgd-2.1.0.tar.gz
 cd libgd-2.1.0
 
1
./configure --prefix=/usr/local/libgd --enable-shared --with-jpeg=/usr/local/jpeg --with-png=/usr/local/libpng --with-freetype=/usr/local/freetype --with-fontconfig=/usr/local/freetype --with-xpm=/usr/ --with-tiff=/usr/local/tiff --with-vpx=/usr/local/libvpx
make && make install

先定义一个名为LD_LIBRARY_PATH的全局环境变量, 该环境变量的作用是帮助系统找到指定的动态链接库文件, 这些文件是编译php服务源码包的必须元素之一. 编译php服务源码包时, 除了定义要安装到的目录以外, 还需要依次定义配置php服务程序配置文件的保存目录、MySQL数据库服务程序所在目录、MySQL数据库服务程序配置文件所在目录,以及libpng、jpeg、freetype、libvpx、zlib等服务程序的安装目录路径, 并通过参数启动php服务程序的诸多默认功能.

 cd ..
 tar zvxf php-5.5.14.tar.gz
 cd php-5.5.14
 export LD_LIBRARY_PATH=/usr/local/libgd/lib
 
1
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql-sock=/tmp/mysql.sock --with-pdo-mysql=/usr/local/mysql --with-gd --with-png-dir=/usr/local/libpng --with-jpeg-dir=/usr/local/jpeg --with-freetype-dir=/usr/local/freetype --with-xpm-dir=/usr/ --with-vpx-dir=/usr/local/libvpx/ --with-zlib-dir=/usr/local/zlib --with-iconv --enable-libxml --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-opcache --enable-mbregex --enable-fpm --enable-mbstring --enable-ftp --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-mcrypt --with-curl --enable-ctype
make && make install

在php源码包程序安装完成后, 需要删除当前默认的配置文件, 然后将php服务程序目录中相应的配置文件复制过来.

 rm -rf /etc/php.ini
 ln -s /usr/local/php/etc/php.ini /etc/php.ini
 cp php.ini-production /usr/local/php/etc/php.ini
 cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
 ln -s /usr/local/php/etc/php-fpm.conf /etc/php-fpm.conf

php-fpm.conf是php服务程序重要的配置文件之一, 我们需要启用该配置文件中第25行左右的pid文件保存目录, 然后分别将第148和149行的user与group参数分别修改为www账户和用户组名称.

 vim /usr/local/php/etc/php-fpm.conf
 
1
2
3
pid = run/php-fpm.pid
user = www
group = www

配置妥当后便可把用于管理php服务的脚本文件复制到/etc/rc.d/init.d中了. 为了能够执行脚本, 请记得为脚本赋予755权限. 最后把php-fpm服务程序加入到开机启动项中.

 cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
 chmod 755 /etc/rc.d/init.d/php-fpm
 chkconfig php-fpm on

编辑php.ini配置文件, 在305行的disable_functions参数后面追加上要禁止的功能.

 vim /usr/local/php/etc/php.ini
 
1
disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restor e,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,g etservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,po six_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix_getppid,posix_getpwnam,posix_ getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_ setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname

编辑Nginx服务程序的主配置文件,
把第2行的井号(#)删除, 然后在后面写上负责运行Nginx服务程序的账户名称和用户组名称;
在第45行的index参数后面写上网站的首页名称.
最后是将第65~71行参数前的井号(#)删除来启用参数, 主要是修改第69行的脚本名称路径参数.
其中$document_root变量即为网站信息存储的根目录路径, 若没有设置该变量, 则Nginx服务程序无法找到网站信息, 因此会提示”404页面未找到”的报错信息,
重启Nginx服务与php-fpm服务.

 vim /usr/local/nginx/conf/nginx.conf
 
1
2
3
user www www; # 2行
index index.html index.htm index.php; # 45行
$document_root$fastcgi_script_name; # 69行
systemctl restart nginx systemctl restart php-fpm

搭建Discuz论坛

Discuz! X3.2软件包的后缀是.zip格式, 因此应当使用专用的unzip命令来进行解压. 解压后会在当前目录中出现一个名为upload的文件目录, 这里面保存的就是Discuz!论坛的系统程序. 把Nginx服务程序网站根目录的内容清空后, 把这些这个目录中的文件都复制进去了. 记得把Nginx服务程序的网站根目录的所有者和所属组修改为本地的www用户, 并为其赋予755权限以便于能够读、写、执行该论坛系统内的文件.

 cd /usr/local/src/
 unzip Discuz_X3.2_SC_GBK.zip
 rm -rf /usr/local/nginx/html/{index.html,50x.html}*
 mv upload/* /usr/local/nginx/html/
 chown -Rf www:www /usr/local/nginx/html
 chmod -Rf 755 /usr/local/nginx/html

第1步:接受Discuz!安装向导的许可协议

第2步:检查Discuz! X3.2论坛系统的安装环境及目录权限
Discuz安装向导图1

第3步:选择”全新安装Discuz! X(含UCenter Server)
Discuz安装向导图2

第4步:填写服务器的数据库信息与论坛系统管理员信息
Discuz安装向导图3

第5步:等待Discuz! X3.2论坛系统安装完毕
Discuz安装向导图4
Discuz安装向导图5

转载(原文链接):https://www.linuxprobe.com/chapter-09.html
>
-------------------本文结束 感谢阅读-------------------