Linux学习总结
Linux学习总结
一.常用系统命令
echo hunter 将hunter字符输出到终端
echo $SHELL 使用$变量提取变量SHELL的值
date "+%Y-%m-%d %H:%M:%S" 查看格式化的时间
date -s "20210101 7:7:7" 设置时间
date "+%j" 查看当天是当年中的第几天
reboot 重启系统
poweroff 关闭系统
wget http://www.baidu.com/123.pdf 下载资源
- -b 后台下载模式
- -p 下载到指定目录里
- -t 最大尝试次数
- -c 断点续传
- -p 下载页面内所有资源,包括图片、视频等
- -r 递归下载
ps 用于查看系统进程的状态
- -a 显示所有进场(包括其他用户的进程)
- -u 用户以及其他详细详细
- -x 显示没有控制终端的进程
进程状态:
R(运行):进程正在运行或在运行队列中等待
S(中断):进程处于休眠中,当某个条件形成后或者接受到信号时,则脱离该状态
D(不可中断):进程不响应系统一步信号,即便用kill命令也不能将其中断
Z(僵死):进程已经终止,但进程描述符依然存在,指导父进程调用wait4()系统函数后将进程释放
T(停止):进程收到停止信号后停止运行
USER:进程的所有者
PID:进程ID号
%CPU:运算器占用率
%MEM:内存占用率
VSZ:虚拟内存使用量(单位KB)
RSS:占用的固定内存量(单位KB)
TTY:所在终端
STAT:进程状态
START:被启动的时间
TIME:实际使用CPU的时间
COMMAND:命令名称与参数
top 动态监视进程活动与系统负载等信息
第一行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)
第二行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数
第三行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲资源百分比(第四列如果是97.1 id意味着97.1%的CPU处于空闲)
第四行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量
第五行:虚拟内存总量、虚拟内存是用量、虚拟内存空闲量、已被提前加载的内存量
pidof sshd 查询指定某个服务进程PID值
kill 2156 终止进程
killall httpd 终止指定名称的服务所对应的全部进程
whereis tar 输出tar命令的绝对路径
2,系统检测命令
ifconfig 获取网卡配置与网络状态等信息
inet参数后面的IP地址
enher参数后面的网卡物理地址(MAC)
RX、TX的接受数据包与发送数据包的个数及累计流量
uname 查看系统内核与系统版本信息
uptime 查看系统的负载信息
系统时间、系统运行时间、启用终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)
free -h 用于显示内存的使用量情况
total:内存总量
used:已用量
free:可用量
shared:进程共享的内存量
buffers:磁盘缓存的内存量
cached:缓存的内存量
who 查看当前登入主机的用户终端信息
last 查看所有系统的登录记录
history 显示历史执行过的命令
- -c 清理历史记录
- !31 执行第31个命令
sosreport 收集系统配置及架构信息并输出诊断文档
3,工作目录切换命令
pwd 显示用户当前所在的工作目录
cd 切换工作路径
ls -al 显示目录中的文件信息
4,文本文件编辑命令
cat 用于查看纯文本文件(内容较少的)
- -n 展示行号
more 用于查看纯文本文件(内容较多的)
head -n 10 用于查看纯文本的前n行
tail -n 10 用于查看纯文本的后n行
cat a.txt | tr [a-z] [A-Z] 将文本中的小写替换成大写
wc 1.txt 统计指定文本的行数、字数、字节数
stat 查询文件具体的存储信息和时间信息
cut -d: -f1 /etc/passwd 提取以冒号分隔为间隔符号的第一列内容
mkdir 创建空白的目录
cp 1.log 2.log 用于复制文件或目录
- -p 保留原始文件属性
- -d 若对象为“链接文件”,则保留该“链接文件”的属性
- -r 递归持续复制(用于目录)
- -i 若目标文件存在则询问是否覆盖
- -a 相当于-pdr
mv 剪切文件或者重命名文件
rm -rf 删除文件或目录
dd if=/dev/zero of=560_file count=1 bs=560M 按照指定的大小和个数数据块来负责文件或装换文件
file 1.txt 查看文件的类型
5,打包压缩与搜索命令
tar -xzvf 11.tar.gz 解压文件
tar -czvf 11.tar.gz /etc 压缩文件
grep /sbin/nologin /etc/passwd 查找出当前系统中不允许登录系统的所有用户
- -v 反向选择
find /etc -name "host*" -print 获取该目录以host开头的文件列表
find / -perm -4000 -print 整个系统搜索权限中包括SUID权限的所有文件,只需要使用-4000即可
find / -user hunter -exec cp -a {} /root/findresults/ \ 搜索出所有归属于hunter用户的文件并复制到/root/findresults/目录 ({}表示find命令搜索出来的每一个文件)
- -name 匹配名称
- -perm 匹配权限
- -user 匹配所有者
- -group 匹配所有组
- -mtime -n +n 匹配修改内容的时间(-n指n天以内,+n指n天以前)
- -atime -n +n 匹配访问文件的时间(-n指n天以内,+n指n天以前)
- -ctime -n +n 匹配修改文件权限的时间(-n指n天以内,+n指n天以前)
man bash > readme.txt 标准输出重定向将man bash 命令原本要输出到屏幕的小写写入到readme.txt
echo "hunter" > readme.txt 将"hunter"字符覆盖写入readme.txt
echo "hunter" >> readme.txt 将"hunter"字符追加写入readme.txt
ls -l xx 2> readme.txt 将错误小写覆盖写入readme.txt
ls -l xx 2>> readme.txt 将错误小写追加写入readme.txt
&> 可以将错误信息或者普通信息都重定向输出
二、管道符、重定向与环境变量
2,管道命令符
grep "/sbin/nologin" /etc/passwd |wc -l 统计被限制登录的数量
ls -l /etc/ | more 翻页查询/etc/下面的文件
echo "123456"|passwd --stdin root 设置密码(stdin防止二次确认)
echo "hi" | mail -s "subject" hunter 把编辑好的内容与标题一起打包,发送邮件给hunter
3,命令行的通配符
ls -l /dev/sda? ?代表匹配单个字符
ls -l /dev/sda* *代表匹配零个或者多个字符
ls -l /dev/sda[1-9] 匹配1~9之间单个数字字符
4,转义字符
反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串 echo "$HOME"
单引号(''):转义其中所有的变量为单纯的字符串 echo "\$$HOME"
双引号(""):保留其中的变量属性,不进行转义处理
反引号(``):把其中的命令执行后返回结果 echo 'uname -a'
5,环境变量
HOME:用户的主目录(即家目录)
SHELL:用户在使用的shell解析器名称
HISTSIZE:输出历史命令记录条数
HISTFILESIZE:保存的历史命令记录条数
MAIL:邮件保存路径
LNAG:系统语言、语系名称
RANDOM:生产一个随机数字
PS1:Bash解析器的提示符
PATH:定义解析器搜索用户执行命令的路径
EDITOR:用户默认的文本编辑器
alias rm 查询实际命令
PATH=$PATH:/root/bin 设置环境变量(PATH会告诉Bash解析器执行的命令可能放在哪个位置)
env 查询系统中所有的环境变量
WORKDIR=/home/workdir 设置变量
export WORKDIR 提升变量为全局变量,其他用户也可以使用
三、vim文本编辑器
1,vim文本编辑器
①vim中常用的命令
dd 删除(剪切)光标所在整行
5dd 删除(剪切)从光标处开始的5行
yy 复制光标所在整行
5yy 复制从光标处开始的5行
n 显示搜索命令定位到下一个字符串
N 显示搜索命令定位到上一个字符串
u 撤销上一步操作
p 将之前删除(dd)或者复制(yy)过的数据粘贴到光标后面
②末行模式可用的命令
:w 保存
:q 退出
:q! 强制退出
:wq! 强制保存退出
:set nu 显示行号
:set nonu 不显示行号
:命令 执行该命令
:整数 跳转到该行
:s/one/two 将当前光标所在行的第一个one替换成two
:s/one/two/g 将当前光标所在行的所有one替换成two
:%s/one/two/g 将全文中所有one替换成two
?字符串 在文本中从下至上搜索该字符串
/字符串 在文本中从上至下搜索该字符串
2,配置网卡
systemctl restart network 重启网卡
四、shell命令脚本
1,接受用户参数
#!/bin/bash
echo "当前脚本名称$0"
echo "总共有$#个参数,分别是$*"
echo "第1个参数为$1,第5个参数为$5"
#!/bin/bash 用来告诉系统使用哪种shell解析器
$0 当前shell脚本的名称
$# 对应的是总共几个参数
$* 所有的参数值
$? 显示上一次命令的执行返回值
$1 $2 $3 分别对应着第N个位置的参数值
2,判断用户的参数
①文件测试语句
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行
判断/etc/fstab 是否为一个目录类型文件,然后同$?显示上一条命令执行后的返回值。如果返回0,则目录存在;如果返回值非零的值,则意味着目录不存在
判断/etc/fstab是否是一般文件
判断文件是否存在,如果存在输出“Exist”
判断当前用户如果不是root则输出“user”,如果是root则输出“root”
②可用的整数比较运算符
-eq 是否等于
-ne 是否不等于
-gt 是否大于
-lt 是否小于
-le 是否等于或小于
-ge 是否大于或等于
判断是否内存不足
③ 常见的字符串比较运算符
= 比较字符串内容是否相等
!= 比较字符串内容是否不同
-z 判断字符串内容是否为空
3,流程控制语句
①if条件测试语句
判断/media/cdrom 文件是否存在,不存在则创建一个
#!/bin/bash
DIR="/media/cdrom"
if [ ! -e $DIR ]
then
mkdir -p $DIR
fi
验证ip地址是否可访问
#!/bin/bash
# -c 规定尝试次数 -i 每个数据包的发送间隔 -W 定义等待超时时间
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo "Host $1 is On-line"
else
echo "Host $1 is Off-line"
fi
根据客户端输入的分数检测分数是否合格
#!/bin/bash
read -p "请输入分数" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
echo "$GRADE 成绩优秀"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
echo "$GRADE 通过"
else
echo "$GRADE 不及格"
fi
②for条件循环语句
for 变量名 in 取值列表
do
...
done
批量创建用户
批量检测ip是否在线
③while条件循环语句
while 条件测试操作
do
...
done
④case条件测试语句
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
*)
默认命令序列
esac
4,计划任务服务程序
①at 一次性计划任务
echo "systemctl restart httpd" | at 23:00 创建任务
at -l 查看任务
atrm 4 删除任务
②crontab 长期性计划任务
crontab -e 创建/编辑计划任务
crontab -l 显示计划任务
crontab -r 删除计划任务
*/1 * * * * /usr/bin/tar -czvf /root/readme.txt.tar.gz /root 每隔一分钟打包/root
25 3 * * 1,3,5 /usr/bin/tar -czvf /root/readme.txt.tar.gz /root 每周一、三、五的凌晨3点25分打包/root
0 1 * * 1-5 /usr/bin/rm -rf /tmp/* 每周一到周五的凌晨1点自动清空/tmp目录内的所有文件
五、用户身份与文件权限
1,用户身份与能力
①useradd 添加用户
- -d 指定用户的家目录
- -e 账户的到期时间,格式为YYYY-MM-DD
- -u 指定该用户的默认UID
- -g 指定一个初始化的用户基本组(必须已存在)
- -G 指定一个或多个扩展用户组
- -N 不创建与用户同名的基本用户组
- -s 指定该用户的默认Shell解析器
useradd user005 创建用户
usermod -s /sbin/nologin user001 创建用户(用户不可登陆)
id user001 查看用户信息
②groupadd 创建用户组
groupadd ronny 创建用户组,可以针对一类用户统一安排权限
③usermod 修改用户的属性
- -c 填写用户账户的备注信息
- -d -m 参数一起用,可以重新指定用户的家目录并自动把旧的数据转移过去
- -e 账户的到期时间,格式为YYYY-MM-DD
- -g 变更所属用户组
- -G 变更扩展用户组
- -L 锁定用户禁止其登录系统
- -U 解锁用户,允许其登录系统
- -s 变更默认终端
- -u 修改用户的UID
④passwd 修改用户密码
- -l 锁定用户,禁止其登录
- -u 接触锁定,允许用户登录
- --stdin 允许通过标准输入修改密码。如:echo "123456" | pwsswd --stdin Username
- -d 该用户可以用空密码登录系统
- -e 强制用户在下次登录时修改密码
- -S 显示用户的密码是否被锁定,以及密码所采用的加密算法名称
passwd 修改自己的密码
passwd username 修改别人的密码(需要有root管理员权限)
passwd -l user001 锁定账户
passwd -u user001 解锁账户
⑤userdel
- -f 强制删除用户
- -r 同时删除用户及用户家目录
userdel -rf user005 强制删除用户及家目录
2,文件权限与归属
-:普通文件
d:目录文件
l:链接文件
b:块设备文件
c:字符设备文件
p:管道文件
针对目录:可读(能够读取目录内的文件列表);可写(能够在目录内新增、删除、重命名文件);可执行(能够进入该目录)
chown hunter:root a 修改文件a的属主为hunter,属组为root
如果针对目录。加上-R来表示递归,针对目录内所有的文件进行整体操作
chmod -R o+t tmp/ 将此文件设置为SBIT特殊权限位(tmp下面创建文件只能由创建者删除)
3,文件的隐藏属性
①chattr 设置文件的隐藏权限(添加用 “+参数” ;移除用 “-参数”)
- i 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新增或删除文件
- a 仅允许补充(追加)内容,无法覆盖/删除内容
- S 文件内容在变更后立即同步到硬盘
- s 彻底从硬盘中删除,不可恢复(用0填充原文件所在的硬盘区域)
- A 不再修改这个文件或目录的最后访问时间
- b 不再修改无尽啊或目录的存取时间
- D 检查压缩文件中的错误
- d 使用dump命令备份时忽略本文件/目录
- c 默认将文件或目录进行压缩
- u 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复
- t 让文件系统支持尾部合并
- X 可以直接访问压缩文件中内容
chattr +a a 仅允许补充(追加)内容,无法覆盖/删除内容
lsattr a 查询隐藏属性
4,文件访问控制列表
setfacl -Rm u:hunter:rwx /root 递归设置/root下面的所有文件或目录对hunter用户可读、可写、可执行
getfacl /root/ 查询文件设置的acl信息
ls 查看文件后面的不是.而是+这说明文件以及设置acl了
5,su命令与sudo服务
su - root 加上减号说明完全切换到新的用户,即把环境变量信息也更新为新用户的相应信息
sudo:给普通用户提供额外的权限完成root管理员才能完成的事情
- -h 列出帮助信息
- -l 列出放弃用户可执行的命令
- -u用户名或者UID值 以指定的用户身份执行命令
- -k 清空密码的有效时间,下次执行sudo时需要再次进行密码验证
- -b 在后台执行指定的命令
- -p 更改询问密码的提示语
visudo 配置sudo命令配置文件
六、储存结构与磁盘划分
目录名称 | 应放置文件内容 |
/boot | 开机所需文件--内核、开机菜单以及所需配置文件等 |
/dev | 以文件形式存放任何设备与接口 |
/etc | 配置文件 |
/home | 用户家目录 |
/bin | 存放单用户模式下还可以操作的命令 |
/lib | 开机时用到的函数库,以及/bin与/sbin下面的命令要调用的函数 |
/sbin | 开机过程中需要的命令 |
/media | 用于挂载设备文件的目录 |
/opt | 放置第三方的软件 |
/root | 系统管理员的家目录 |
/srv | 一些网络服务的数据文件目录 |
/tmp | 任何人均可使用的“共享”临时目录 |
/proc | 虚拟文件系统,例如系统内核、进程、外部设备及网络状态等 |
/usr/local | 用户自行安装的软件 |
/usr/sbin | Liunx系统开机时不会使用到的软件/命令/脚本 |
/usr/share | 帮助与说明文件,也可以放置共享文件 |
/var | 主要存放经常变化的文件,如日志 |
/lost+found | 当文件系统发生错误时,将一些丢失的文件片段存放在这里 |
1,物理设备的命名规则
硬件设备 | 文件名称 |
IDE设备(设备很少见了) | /dev/hd[a-d] |
SCSI/SATA/U盘 | /dev/sd[a-p] |
软驱 | /dev/fd[0-1] |
打印机 | /dev/lp[0-15] |
光驱 | /dev/cdrom |
鼠标 | /dev/mouse |
磁带机 | /dev/st0或/dev/ht0 |
一台电脑可以有多快硬盘,a~p来代表16快不同的硬盘(默认从a开始分配),硬盘的分区编号也有讲究
- 主分区或扩展分区的编号从1开始,到4结束;
- 逻辑分区从编号5开始
2,挂载硬件设备
①mount 挂载文件系统
- -a 挂载所有在/etc/fstab中定义的文件系统(自动检查/etc/fstab有没有疏漏被挂载的设备文件,如果有,则自动挂载)
- -t 指定文件系统的类型
mount /dev/sdb1 /backup 挂载文件系统
umount /dev/sdb1 撤销已挂载的设备文件
vim /etc/fstab 永久挂载
- 设备文件:一般为设备的路径+设备名称。也可以写唯一识别码(UUID)
- 挂载目录:指定要挂载到的目录,需要在挂载前创建好
- 格式类型:指定文件系统的格式,比如Ext3、Ext4、XFS、SWAP、iso9660(此为光盘设备)等
- 权限选项:若设置defaults,则默认权限为:rw,suid,dev,exec,auto,nouser,async
- 是否备份:若为1则开机后使用dnmp进行磁盘备份,为0则不备份
- 是否自检:若为1则开机进行磁盘自检,为0则不自检测
配置完毕重新系统
②fdisk 用于管理磁盘分区(交互式的命令)
- m 查看全部可用参数
- n 添加新的分区
- d 删除某个分区
- l 列出所有可用的分区类型
- t 改变某个分区的类型
- p 查看分区信息
- w 保存并退出
- q 不保存直接退出
file /dev/sdb1 查看文件的属性
partprobe 如果查询不到刚刚分区的文件,则使用此命令 手动将分区信息同步到内核(一般执行两次效果会好些)
mkfs.xfs /dev/sdb1 将分区格式化为xfs的文件系统
df -h 查看挂载状态和硬盘使用量信息
du -sh /backup/ 查看文件占用的空间
③SWAP 交换分区
SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将内存中暂时不常用的数据临时存在到硬盘中,以便腾出物理内存空间让更活跃的持续服务来使用的技术,其设计目的为了解决真实物理内存不足的问题。(交换分区大小一般建议设置为真实物理内存的1.5 ~ 2倍)
fdisk /dev/sdb 创建分区
mkswap /dev/sdb2 使用SWAP专用的格式化命令对分区格式化
swapon /dev/sdb2 将swap分区设备正式挂载到系统中
永久挂载:
3,磁盘容量配额
限制用户使用文件的容量
①先需要检测是否支持quota技术,不支持则需要 vim /etc/fstab ,然后重启系统
②正对tom用户,硬盘使用量的软限制和硬限制分别为3MB和6MB;创建文件数量的软限制和硬限制为3个和6个
- 软限制:当达到软件限制时会提示用户,但扔允许用户在限定的额度内继续使用
- 硬限制:当达到硬限制时会提示用户,且强制终止用户的操作
xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 tom' /boot
③查询用户使用的量 xfs_quota -x -c report /boot/
- -c 参数用于以参数的形式设置要执行的命令
- -x 参数是专家模式,让运维人员对quota服务进行更多复杂的配置
④ edquota -u tom 编辑用户quota配额限制
- -u 参数表示正对哪个用户
- -g 参数表示正对哪个用户组
4,软件方式链接
- 硬链接:硬链接文件与原始文件其实是同一个文件,只是名字不同,我们每添加一个硬链接,该文件的inode连接数会增加1;而且只有当该文件的inode连接数为0的时候,才算彻底删除。
- 软连接(符号连接):类似于快捷方式
ln 命令
- -s 创建“符号链接”(如果不带-s参数,则默认创建硬链接)
- -f 强制创建文件或目录的链接
- -i 覆盖前先询问
- -v 显示创建链接的过程
ln -s readme.txt readit.txt 创建一个软连接
七、raid和LVM磁盘阵列技
RAID0:数据分散存储,提高整体存取性能,至少2块硬盘,只要有一块损坏,则不可用
RAID1:数据备份存储,提高数据数据读取性能,成本高,安全性与可用性好,一块损坏,自动切换到另一块
RAID10:RAID0+RAID1
1,创建RAID10+备份盘(需要5块硬盘)
①虚拟机创建5块硬盘
②mdadm 创建和管理软件RAID磁盘阵列
- -a 检测设备名称
- -n 指定设备数量
- -l 指定RAID级别
- -C 创建
- -v 显示过程
- -f 模拟设备损坏
- -r 移除设备
- -Q 查看摘要信息
- -D 查看详细详细
- -S 停止RAID磁盘阵列
mdadm -Cv /dev/md0 -a yes -n 4 -l 10 -x 1 /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg 创建一个/dev/md0的磁盘阵列
- -a yes :代表自动创建设备文件
- -n 4:代表使用4块硬盘来部署这个RAID磁盘阵列
- -l 10:代表RAID10方案
- -x 1:代表使用一块备份盘
- 后面的表述5块硬盘
mkfs.ext4 /dev/md0 格式化为ext4
mount /dev/md0 /RAID/ 挂载硬盘设备。 df -h 查询可用空间
echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab 永久挂载
mdadm /dev/md0 -f /dev/sdd 移除硬盘
重启系统
mdadm /dev/md0 -a /dev/sdd 添加硬盘
2,LVM(逻辑卷管理器)
实现硬盘分区动态扩容缩容技术
功能/命令 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
扫描 | pvscan | vgscan | lvscan |
建立 | pvcreate | vgcreate | lvcreate |
显示 | pvdisplay | vgdisplay | lvdisplay |
删除 | pvremove | vgremove | lvremove |
扩容 | vgextend | lvextend | |
缩小 | vgreduce | lvreduce |
个人理解:把多个物理卷(支持LVM技术的硬盘)抽象成一个卷组(vg),可以通过卷组分配出逻辑卷(lv)挂载使用
①部署逻辑卷
pvcreate /dev/sdh /dev/sdi 第一步,让两块硬盘支持lvm技术
vgcreate storage /dev/sdh /dev/sdi 第二步,将两块硬盘设备加入storege卷组
lvcreate -n vo -l 37 storage 第三步,切割出一个约150MB的逻辑卷
- -L 150M :生成一个大小为150M的逻辑卷
- -l 37:生成一个大小为37*4MB=148MB的逻辑卷(每个基本单元默认是4MB)
- -n vo:逻辑卷的名字为vo
mkfs.ext4 /dev/storage/vo 第四步,格式化
mount /dev/storage/vo /vo 第五步,挂载
echo "/dev/storage/vo /vo ext4 defaults 0 0" >> /etc/fstab 第六步,永久挂载
②扩容逻辑卷(注意顺序)
umount /vo 扩展前先卸载设备和挂载点的关联
lvextend -L 290M /dev/storage/vo 扩容至290M
e2fsck -f /dev/storage/vo 检测硬盘完整性,并重置硬盘容量
mount -a 重新挂载
③缩小逻辑卷(注意顺序)
umount /vo 缩小前先卸载设备和挂载点的关联
e2fsck -f /dev/storage/vo 检测硬盘完整性,并重置硬盘容量
resize2fs /dev/storage/vo 120M 把逻辑卷vo的容量减小到120M
mount -a 重新挂载
④逻辑卷快照
LVM的快照卷功能有两个特点
- 快照卷的容量必须等同于逻辑卷的容量
- 快照卷仅使用一次,一旦执行还原操作后则会被立即自动删除
lvcreate -L 120M -s -n SNAP /dev/storage/vo 创建一个逻辑卷快照SNAP
- -s :参数生成一个快照
umount /vo/ 合并快照前先卸载设备和挂载点的关联
lvconvert --merge /dev/storage/SNAP 合并快照
mount -a 重新挂载
⑤删除逻辑卷
八、iptables和firawalld防火墙
1,iptables
防火墙策略的匹配规则从上到下,如果没有匹配到所有的规则,则只需默认的动作
①规则链分类
- 在进行路由选择前处理数据包(PREROUTING)
- 处理流入的数据包(INPUT)。一般使用最多
- 处理流出的数据包(OUTPUT)
- 处理转发的数据包(FORWARD)
- 在进行路由选择后处理数据包(POSTROUTING)
②处理动作
- ACCEPT(允许流量通过)
- REJECT(拒绝流量通过)。在拒绝流量后回复一条“您的信息已收到,但是被扔掉了”信息,从而让流量发送方清晰地看到数据被拒绝的响应信息
- LOG(记录日志信息)
- DROP(拒绝流量通过)。直接将流量丢弃而且不响应
③iptable参数
- -p 设置默认策略
- -F 清空规则链
- -L 查看规则链
- -A 在规则链的末尾加入新规则
- -I num 在规则链的头部加入新规则
- -D num 删除某一条规则
- -s 匹配来源地址IP/MASK,加叹号“!” 表示除这个ip外
- -d 匹配目标地址
- -i 网卡名称 匹配从这块网卡流入的数据
- -o 网卡名称 匹配从这块网卡流出的数据
- -p 匹配协议,如TCP、UDP、ICMP
- --dport num 匹配目标端口号
- --sport unm 匹配来源端口号
iptables -L 查看已有的防火墙规则链
iptables -F 清空已有的防火墙规则链
iptables -P INPUT DROP 把INPUT的规则链默认策略设置为拒绝
iptables -I INPUT -p icmp -j DROP 对方始终ping不通
iptables -D INPUT 1 删除INPUT的第一条命令
允许指定网段的主机访问本机22端口:
iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j REJECT
向INPUT规则链中添加拒绝所有人访问本机12345端口:
iptables -A INPUT -p tcp --dport 22 -j REJECT
iptables -I INPUT -p udp --dport 12345 -j REJECT
向INPUT规则链中添加拒绝192.168.10.5主机访问本机80端口(web服务)的策略规则:
iptables -I INPUT -p tcp -s 192.168.10.5 --dport 80 -j REJECT
向INPUT规则链添加拒绝所有主机访问本机1000~1024端口策略:
iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT
iptables -A INPUT -p udp --dport 1000:1024 -j REJECT
使配置永久生效(默认重启恢复默认配置):
service iptables save
2,firewalld
区域 | 默认策略规则 |
trusted | 允许所有的数据包 |
home | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、mdns、ipp-client、amda-client与dhcpv6-client服务相关,则允许流量 |
internal | 等同于home区域 |
work | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、ipp-client与dhcpv6-client服务相关,则允许流量 |
public | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、dhcpv6-client服务相关,则允许流量 |
external | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量 |
dmz | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量 |
block | 拒绝流入的流量,除非与流出的流量相关 |
drop | 拒绝流入的流量,除非与流出的流量相关 |
参数 | 作用 |
--get-default-zone | 查询默认的区域名称 |
--set-default-zone=<区域名称> | 设置默认的区域,使其永久生效 |
--get-zones | 显示可用的区域 |
--get-services | 显示预先定义的服务 |
--add-active-zones | 显示当前正在使用的区域与网卡名 |
--add-source= | 将源自此IP或子网的流量导向指定的区域 |
--remove-source= | 不再将源自此IP或子网的流量导向指定的区域 |
--add-interface=<网卡名称> | 将源自该网卡的所有流量都导向某个指定的区域 |
--change-interface=<网卡名称> | 将某个网卡与区域进行关联 |
--list-all | 显示当前区域的网卡配置参数、资源、端口以及服务等信息 |
--list-all-zones | 显示所有区域的网卡配置参数、资源、端口以及服务等信息 |
--add-service=<服务名> | 设置默认区域允许该服务的流量 |
--add-port=<端口号/协议> | 设置默认区域允许该端口的流量 |
--remove-service=<服务名> | 设置默认区域不再允许该服务的流量 |
--remove-port=<端口号/协议> | 设置默认区域不再允许该端口的流量 |
--reload | 让“永久生效”的配置规则立即生效,并覆盖当前的配置规则 |
--panic-on | 开启应急状况模式 |
--panic-off | 关闭应急状况模式 |
firewalld配置的防火墙模式为运行时(Runtime)模式,又称为当前生效模式,而且随着系统的重启会失效。如果让配置一直存在,就需要使用永久模式(firawall-cmd 后面加上 --permanent参数)
①查看firewalld服务当前所使用的区域:
firewall-cmd --get-default-zone
②查看ens32网卡在firewalld服务中的区域:
firewall-cmd --get-zone-of-interface=ens32
③把firewalld服务中的ens32网卡默认区域修改为external,并查看
firewall-cmd --permanent --zone=external --change-interface=ens32 设置
firewall-cmd --get-zone-of-interface=ens32 查看
④把firewalld服务的当前默认区域设置为public
firewall-cmd --set-default-zone=public 设置
firewall-cmd --get-default-zone 查看
⑤启动/关闭防火墙服务的应急状况模式,阻断一些网络连接(当远程控制服务器时慎用)
firewall-cmd --panic-on 连接都不可访问
firewall-cmd --panic-off
⑥查询public区域是否允许请求SSH和HTTPS协议的流量
firewall-cmd --zone=public --query-service=ssh
firewall-cmd --zone=public --query-service=https
⑦把firewalld服务中请求HTTPS协议的流量设置为永久允许,并立即生效
firewall-cmd --zone=public --add-service=https
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload
⑧把firewalld服务中请求的http协议的流量设置为永久拒绝,并立即生效
firewall-cmd --permanent --zone=public --remove-service=http
firewall-cmd --reload
firewall-cmd --zone=public --query-service=http
⑨把在firewalld服务中访问8080和8081端口的流量策略设置为允许,但仅当前生效
firewall-cmd --zone=public --add-port=8080-8081/tcp
firewall-cmd --zone=public --list-ports
⑩把原本访问本机888端口的流量转发到22端口,而且要求当前和长期有效
firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.0.140
ssh -p 888 192.168.0.140 在客户端使用ssh命令尝试访问192.168.0.140主机的888端口
⑫拒绝192.168.0.0/24网段的所有用户访问本机的ssh服务
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.0/24" service name="ssh" reject"
九、使用ssh服务管理远程主机
1,配置网络服务
①使用nmtui进行图形化配置。 vim /etc/sysconfig/network-scripts/ifcfg-ens32 将NOBOOT=yes重启后激活网卡
②nmcli查看网络信息或网络状态
nmcli connection show
nmcli con show ens32
2,管理sshd服务
① vim /etc/ssh/sshd_config ssh配置信息
参数 | 作用 |
Port 22 | 默认的sshd服务端口 |
ListenAddress 0.0.0.0 | 设定sshd服务监听的IP地址 |
Protocol 2 | SSH协议的版本号 |
HostKey /etc/ssh/ssh_host_key | SSH协议版本为1时,DES私钥存放的位置 |
HostKey /etc/ssh/ssh_host_ecdsa_key | SSH协议版本为2时,RSA私钥存放的位置 |
HostKey /etc/ssh/ssh_host_ed25519_key | SSH协议版本为2时,DSA私钥存放的位置 |
PermitRootLogin Yes | 设定是否允许root管理员直接登录 |
StrictModes yes | 当远程用户的私钥改变时直接拒绝连接 |
MaxSesstuins 6 | 最大密码尝试次数 |
MaxSessions 10 | 最大终端数 |
PasswordAuthentication yes | 是否允许密码验证 |
PermitEmptyPasswords no | 是否允许空密码登录(很不安全) |
② ssh 192.168.0.140 远程连接
③禁止root管理员远程登录
vim /etc/ssh/sshd_config 编辑
systemctl restart sshd 重启服务
systemctl enable sshd 开机启动
④安全密钥验证
ssh-keygen 在客户端主机中生成密钥
ssh-copy-id 192.168.0.140 吧客户端主机生成的公钥文件传送至远程主机
只允许密钥验证:
systemctl restart sshd 重启服务
⑤远程传输命令
scp是一个基于SSH协议在网络之间进行安全传输的命令,会对数据进行加密传输
- -v 显示详细的连接进度
- -p 指定远程主机的sshd端口号
- -r 用于传输文件夹
- -6 使用ipv6协议
- 如果要传送整个文件夹内所有的数据,还需要额外添加参数-r进行递归操作
scp /root/readme.txt 192.168.0.140:/root 将文件传输到远程主机
scp 192.168.0.140:/root/readme.txt /root/ 将远程主机的文件下载到本地主机
3,不间断会话服务
yum install screen screen是一个能够实现多窗口控制的开源服务程序
①管理远程会话
screen -S backup 创建一个名词为backup的会话窗口
screen -ls 显示当前已有的会话
exit 退出会话
screen -x backup 共享backup会话的窗口
screen -r liunx 恢复指定的会话
screen -wipe liunxprobe 删除无法使用的会话
十、使用Apache服务部署静态网页
1,安装httpd(Apache服务软件包)
yum install httpd 安装
systemctl start httpd 启动服务
systemctl enable httpd 开机启动
配置文件的名称 | 存放位置 |
服务目录 | /etc/httpd |
主配置目录 | /etc/httpd/conf/httpd.conf |
网站数据目录 | /var/www/html |
访问日志 | /var/log/httpd/access_log |
错误日志 | /var/log/httpd/error_log |
参数 | 用途 |
ServerRoot | 服务目录 |
ServerAdmin | 管理员邮箱 |
User | 运行服务的用户 |
Group | 运行服务的用户组 |
ServerName | 运行服务器的域名 |
DocumentRoot | 网站数据目录 |
Directory | 网站数据目录的权限 |
Listen | 监听的IP地址与端口号 |
DirectoryIndex | 默认的索引页页面 |
ErrorLog | 错误日志文件 |
CustomLog | 访问日志文件 |
Timeout | 网页超时时间,默认为300秒 |
echo "Hello" >> /var/www/html/index.html 改变主页
2,将网站数据的目录修改为/home/wwwroot目录
mkdir /home/wwwroot
echo "hello" >> /home/wwwroot/index.html
vim /etc/httpd/conf/httpd.conf 修改httpd配置文件
systemctl restart httpd 重启服务
setenforce 0 受SELinux影响,改变目录访问会失败,可以关闭SELinux(0:关闭 1:开启)。配置命令后立即生效
①SELiunx服务有三种配置模式
- enforcing:强制启用安全策略模式,将拦截服务的不合法请求
- permissive:遇到服务越权访问时,只发出警告而不拦截
- disabled:对于越权的行为不警告也不拦截
getenforce 获取SELiunx服务的允许模式
②查看原始网站数据的保存目录与当前网站数据的保存目录是否拥有不同的SELiunx安全上下文
文件上设置的SELiunx安全上下文是由用户段、角色段以及类型等多个信息项共同组成的
- 用户段system_u代表系统进程的身份
- 角色段object_r代表文件目录的角色
- 类型段httpd_sys_content_t代表网络服务的系统文件
③semanage命令用于管理SELiunx的策略
- -l 参数用户查询
- -a 参数用于添加
- -m 参数用于修改
- -d 参数用于删除
让这个目录以及里面的所有文件能够被httpd服务程序所访问到:
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/*
restorecon -Rv /home/wwwroot/ 设置好的SELiunx安全上下文立即生效。-Rv对指定的目录进行递归操作
到现在为止,/home/wwwroot下面的index.html可以正常访问了
3,个人用户主页功能
可以给每个用户创建一个独立的网站。最终使用 http://127.0.0.1/~hunter/ 访问
①修改配置文件 vim /etc/httpd/conf.d/userdir.conf
②创建用户站点目录,并把用户目录权限改为755
su - hunter
mkdir public_html/
chmod -Rf 755 /home/hunter/ 递归修改目录和子目录
③重启httpd服务
systemctl restart httpd
④修改SELiunx规则
getsebool -a | grep http 查询并过滤出http协议相关的安全策略
setsebool -P httpd_enable_homedirs=on 大写P参数 使规则永久生效
⑤给用户网页添加密码验证
htpasswd -c /etc/httpd/passwd hunter 给用户设置密码
systemctl restart httpd 重启httpd服务
4,基于IP地址访问站点
①创建目录,放置index.html页面
mkdir -p /home/wwwroot/001
mkdir -p /home/wwwroot/002
mkdir -p /home/wwwroot/003
echo "001" >> 001/index.html
echo "002" > 002/index.html
echo "003" > 003/index.html
②在httpd服务配置文件大约113行处加上如下配置
<VirtualHost 192.168.0.140>
DocumentRoot /home/wwwroot/001
ServerName www.hunter.com
<Directory /home/wwwroot/001 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.0.141>
DocumentRoot /home/wwwroot/002
ServerName bbs.hunter.com
<Directory /home/wwwroot/002 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.0.142>
DocumentRoot /home/wwwroot/003
ServerName tech.hunter.com
<Directory /home/wwwroot/003 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
systemctl restart httpd 重启httpd服务
③设置SELinux安全上下文
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/001
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/001/*
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/002
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/002/*
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/003
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/003/*
restorecon -Rv /home/wwwroot/ 设置好的SELiunx安全上下文立即生效。-Rv对指定的目录进行递归操作
5,基于主机域名访问站点
①参考4所有的配置
② vim /etc/hosts 手动定义ip地址与域名之间的对应关系。保存生效,就可以使用域名访问了
6,基于端口号
①参考4所有的配置
②需要修改 vim /etc/httpd/conf/httpd.conf
③重新httpd systemctl restart httpd
④配置SELinux。使用semanage命令查询并过滤所有与Http协议相关且SELiunx服务允许的端口列表
semanage port -l | grep http 查询SELiunx服务允许的端口列表
semanage port -a -t http_port_t -p tcp 6111 设置,立即生效
semanage port -a -t http_port_t -p tcp 6222 设置,立即生效
semanage port -a -t http_port_t -p tcp 6333 设置,立即生效
⑤重新httpd systemctl restart httpd
十一、使用vsftpd服务传输文件
FTP是一种在互联网中进行文件传输得当协议,基于客户端/服务器模式,默认使用20、21号端口。20(数据端口)用于进行数据传输,21(命令端口)用于接收客户端发出的相关的FTP命令与参数
FTP协议有下面两种工作模式:
- 主动模式:FTP服务器主动向客户端发起连接请求。
- 被动模式:FTP服务器等待客户端发起连接请求(FTP的默认工作模式)
vsftpd:vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款允许在Liunx操作系统上的FTP服务程序,不仅完全开源而且免费,此外,还具有很高的安全性、传输速度,以及支持虚拟用户验证等其他FTP服务程序不具备的特点
ftp:ftp是liunx系统中以命令行界面方式来管理FTP传输服务的客户端工具
yum install vsftpd 安装vsftpd
yum install ftp 安装ftp
参数 | 作用 |
listen=[YES|NO] | 是否以独立运行的方式监听服务 |
listen_address=IP地址 | 设置要监听的IP地址 |
listen_port=21 | 设置FTP服务的监听端口 |
download_enable=[YES|NO] | 是否允许下载文件 |
userlist_enable=[YES|NO] userlist_deny=[YES|NO] |
设置用户列表为“允许”还是“禁止”操作 |
max_clients=0 | 最大客户连接数,0为不限制 |
max_per_ip=0 | 同一IP地址的最大连接数,0为不限制 |
anonymous_enable=[YES|NO] | 是否允许匿名用户访问 |
anon_upload_enable=[YEA|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作为更加安全的文件传输服务程序,允许用户以三种认证模式登陆到FTP服务器上
- 匿名开放模式:是一种不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器
- 本地用户模式:是同步Liunx系统本地的账户摩玛信息进行认证的模式,相较于匿名开发模式更安全,而且配置起来也很简单。但是如果被黑客破解了账户的信息,就可以畅通无阻的登录FTP服务器,从而完全控制整台服务器
- 虚拟用户模式:是这三种模式中最安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。这样,即使黑客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响
1,iptables防火墙管理工具默认禁止了FTP传输协议的端口号,清理iptables防火墙的默认策略,并把当前的策略保存起来
iptables -F 清理策略
service iptables save 永久保存,防止开机重置
1,匿名开放模式
参数 | 作用 |
anonymous_enable=YES | 允许匿名访问模式 |
anon_umask=022 | 匿名用户上传文件的umask值 |
anon_upload_enable=YES | 允许匿名用户上传文件 |
anon_mkdir_write_enable=YES | 允许匿名用户创建目录 |
anon_other_write_enable=YES | 允许匿名用户修改目录名称或删除目录 |
①配置vsftpd.conf配置文件
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak 备份
rep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf 将未注释的配置写入vsftpd.conf文件中
vim /etc/vsftpd/vsftpd.conf
②重启vsftpd服务
systemctl restart vsftpd
③开启启动
systemctl enable vsftpd
④ftp客户端连接(连接不上注意iptables)
⑤ftp创建目录失败解决方案
ls -ls /var/ftp/pub/ 查看目录的全下,发现所有者的身份是root
chown -Rf ftp /var/ftp/pub/ 将目录所有者和所有组的身份改成ftp
getsebool -a | grep ftp 查询与FTP相关的SELiunx域策略都有哪些
setsebool -P ftpd_full_access=on 修改此项策略。-P表示永久生效
2,本地用户模式
现在就可以用liunx系统账户进行登录了ftp了。但是root不能登录ftp
②root账户可以登录TTP服务器
cat /etc/vsftpd/user_list 查看禁用的登录账户
cat /etc/vsftpd/ftpusers 查看禁用的登录账户
vim /etc/httpd/conf/httpd.conf 将root删除掉
vim /etc/vsftpd/ftpusers 将root删除掉,删除之后,就可以立即登录了,不需要重启vsftpd服务
③使用普通账户hunter登录,创建目录不了问题
getsebool -a | grep ftp 查询与FTP相关的SELiunx域策略都有哪些
setsebool -P ftpd_full_access=on 修改此项策略。-P表示永久生效
3,虚拟用户模式
①创建用于就那些FTP认证的用户数据库文件,其中奇数行为账户名,偶数行我密码,例如,分别创建zhangsan和lisi两个用户,密码均为redhat
db_load -T -t hash -f vuser.list vuser.db db_load命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件
chmod 600 vuser.db 降低数据库文件的权限(避免其他人看到数据库文件的内容)
rm -f vuser.list 删除原始文件
②创建vsftpd服务程序用于存储文件的根目录(虚拟用户登录后所访问的默认位置)以及虚拟用户映射的系统本地用户。
useradd -d /var/ftproot -s /sbin/nologin virtual 创建virtual用户,此用户不能登录系统,家目录是/var/ftproot
ls -ld /var/ftproot/ 查询目录的权限
chmod -Rf 755 /var/ftproot/ 修改目录权限
③建立用于支持虚拟用户的PAM文件
新建一个用于虚拟用户认证的PAM文件vsftpd.vu,其中PAM文件内“db=”参数为使用db_local命令生成的账户密码数据库文件路径,但不用写数据库文件的后缀
④配置vsftpd.conf
touch lisi
systemctl restart vsftpd 重启
systemctl enable vsftpd 开机启动
⑥设置SELiunx域允许策略
getsebool -a | grep ftp 查询与FTP相关的SELiunx域策略都有哪些
setsebool -P ftpd_full_access=on 修改此项策略。-P表示永久生效
注意: 案例3的vsftpd.conf的pam_service_name=vsftpd.vu配置有问题,需要去掉i字母
4,上传下载文件
get aa.txt /home/aa.txt 下载文件
put /home/11.txt 11.txt 上传文件
5,简单文件传输协议
简单文件传输协议(TFTP)是一种基于UDP协议在客户端和服务器之间进行简单的传输协议,占用端口号为69
yum install tftp-server tftp 安装tfpt
yum install xinetd 安装xinetd。TFTP服务是xinetd服务程序来管理的
systemctl restart xinetd 重启服务
systemctl enable xinetd 加入开机启动
firewall-cmd --permanent --add-port=69/udp 设置防火墙允许UDP协议的69端口
firewall-cmd --reload 重启防火墙
①使用tftp目录访问文件
参数 | 作用 |
? | 帮助信息 |
put | 上传文件 |
get | 下载文件 |
verbose | 显示详细的处理信息 |
status | 显示当前的状态信息 |
binary | 使用二进制进行传输 |
ascii | 使用ASCII码进行传输 |
timeout | 设置重传的超时时间 |
quit | 退出 |
十二、使用sambe和NFS实现文件共享
1,Samba文件共享服务
Samba服务程序现在已经成为在liunx系统与Windows系统之间共享文件的最佳选择
yum install samba 安装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种 #smbpassword:使用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] #打印机共享参数 |
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
将未注释的配置写入到smb.conf文件中。 grep -v "^$" 可以去除空白行
2,配置共享资源
参数 | 作用 |
[database] | 共享名称为database |
comment = Do not arbitrarily modify the database file | 警告用户不要随便修改数据库 |
path = /home/database | 共享目录为/home/database |
public = no | 关闭“所有人可见” |
writable = yes | 允许写入操作 |
①创建用于访问共享资源的账户信息。默认的使用的是用户口令认证模式(user)。Samba服务要求账户必须在当前系统已经存在
参数 | 作用 |
-a 用户名 | 建立Samba账户 |
-x 用户名 | 删除Samba账户 |
-L | 列出账户列表 |
-Lv | 列出账户详细信息的列表 |
id hunter 查看当前系统账户详细
pdbedit -a -u hunter 建立Samba账户
mkdir /home/database 创建共享目录
chown hunter /home/database/ 设置共享目录的所有者和所属组
ls -Zd /home/database/ 查看目录是否拥有不同的SELiunx安全上下文
semanage fcontext -a -t samba_share_t /home/database 设置SELiunx安全上下文
restorecon -Rv /home/database/ 设置好的SELiunx安全上下文立即生效。-Rv对指定的目录进行递归操作
getsebool -a | grep samba 查询与Samba相关的SELiunx域策略都有哪些
setsebool -P samba_enable_home_dirs on 配置策略
systemctl restart smb 重启服务
systemctl enable smb 开启启动
iptables -F 清空iptables防火墙
②Windows访问文件共享服务
//192.168.0.140 输入用户名密码进入共享
③Liunx访问文件共享服务
yum install cifs-utils 在客户端安装支持文件共享服务的软件包(cifs-utils)
chmod 600 auth.smb 不让其他人随意看到,修改为仅root管理员才能够读写
mkdir /database 创建一个挂载目录
mount -a 挂载
3,NFS(网络文件系统)
NFS服务可以将远程Liunx系统上的文件共享资源挂在到本地主机目录上
yum install nfs-utils 安装nfs
iptables -F 清理iptables规则
mkdir /nfsfile 创建一个目录作为后面的共享目录
chmod -Rf 777 /nfsfile/ 给上最高权限
echo "111" > /nfsfile/readme 往目录里面写入一个文件
vim /etc/exports 配置NFS服务程序的配置文件,默认此文件是空的。
参数 | 作用 |
ro | 只读 |
rw | 读写 |
root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户 |
no_root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员 |
all_squash | 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户 |
sync | 同时将数据写入到内存与硬盘中,保证不丢失数据 |
async | 优先将数据保存在内存中,然后写入硬盘;这样效率更高,但可能会丢失数据 |
systemctl restart rpcbind 先启用RPC
systemctl enable rpcbind 开启启动
systemctl restart nfs-server 启动nfs
systemctl enable nfs-server 开启启动
①客户端
showmount -e 192.168.0.140 查询远程NFS共享信息
mkdir /nfsfile 创建挂载目录
mount -a 挂载
cd /nfsfile/ 进入共享目录
4,autofs自动挂载服务
yum install autofs 安装autofs
光盘设备一般挂载到/media/cdrom目录中,那么挂载目录写成/media即可,子目录cdrom在iso.misc文件中配置,目前没有这个文件,需要创建
iso.misc 格式: 挂载目录[空格]挂载文件类型及权限[空格]:设备名称(iso -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom)
例如,要把光盘设备挂载到/media/iso目录中,可将挂载目录写为iso,而-fstype为文件系统格式参数,iso9660为光盘设备格式,ro、nosuid及nodev为光盘设备具体的权限参数,/dev/cdrom则是定义要挂载的设备名称
systemctl start autofs 启动服务
systemctl enable autofs 开机加载
现在看/media目录下是没有目录的,可以用cd iso进入目录,并自动挂载
十三、使用postfixyuDovecot部署邮件系统
电子邮箱系统基于邮件协议来完成电子邮件的传输,常见的邮件协议有下面这些:
- 简单邮件传输协议(Simple Mail Transfer Protocol,SMTP):用于发送和中转发出的电子邮件,占用服务器的25/TCP端口
- 邮局协议版本3(Post Office Protocol 3):用于将电子邮件存储到本地主机,占用服务器的110/TCP端口
- Internet消息访问协议版本4(Internet Message Access Protocol 4):用于在本地主机上访问邮件,占用服务器的143/TCP端口
服务角色:
- MUA:为用户收发邮件的服务器名为邮件用户代理
- MDA:邮件投递代理。保存用户邮件的“信箱”服务器。其工作职责是把来自邮件传输代理(MTA)的邮件保存到本地的收件箱中
- MTA:邮件传输代理。它的工作职责是转发处理不同的电子邮件服务供应商之间的邮件,把来自MUA的邮件转发到合适的MTA服务器
十四、使用iscsl服务器部署网络存储
iSCSI(Internet Small Computer System Interface):这是一种将SCSI接口与以太网技术相结合的新型存储技术,可以用来在网络中传输SCSI接口命令和数据
1,配置iSCSI服务端
①选择之前创建的/dev/md0(RAID10)作为远程设备
②安装iSCSI服务端并启动
yum -y install targetd targetcli
systemctl start targetd
systemctl enable targetd
- targetd:iSCSI服务端程序
- targetcli:用于管理iSCSI服务端存储资源专用配置命令
③配置iSCSI服务端共享资源
targetcli 在执行targetcli命令后就能看到交互式的配置界面了
/backstores/block目录:iSCSI服务端配置共享设备的位置。我们需要把/dev/md0设备加入到共享设备的“资源池”中,并将该文件重新命名为disk0
cd backstores/block 进入block目录
create disk0 /dev/md0 把/dev/md0设备加入到共享设备的“资源池”中,并将该文件重新命名为disk0
④创建iSCSI target名称及配置共享资源。
这个是用于描述共享资源的唯一字符串
cd iscsi
create 创建
cd /iscsi/iqn.2003-01.org.linux-iscsi.liunxprobe.x8664:sn.e6ccae6a8603/tpg1/luns /iscsi/iqn.20...603/tpg1/luns> create /backstores/block/disk0
create /backstores/block/disk0
⑤设置访问控制列表(ACL)
acls参数目录用于存放能够访问iSCSI服务端共享存储资源的客户端名称
cd iqn.2003-01.org.linux-iscsi.liunxprobe.x8664:sn.e6ccae6a8603/tpg1/acls
create iqn.2003-01.org.linux-iscsi.liunxprobe.x8664:sn.e6ccae6a8603:client
⑥设置iSCSI服务端的监听IP地址和端口号
cd /iscsi/iqn.2003-01.org.linux-iscsi.liunxprobe.x8664:sn.e6ccae6a8603/tpg1/portals/
delete 0.0.0.0 3260 删除默认的配置
create 192.168.0.140 添加监听IP地址和端口号(192.168.0.140 3260)
⑦配合妥当后检查配置信息,重启iSCSI服务端程序并配置防火墙策略
在确认无误后输入exit命令退出配置。(如果Ctrl + C退出,则不会保存配置)
systemctl restart targetd
firewall-cmd --permanent --add-port=3260/tcp
firewall-cmd --reload
2,配置Liunx客户端
①安装iSCSI客户端服务程序initiator
yum -y install iscsi-initiator-utils
②编辑配置文件,把服务器的访问控制列表名称填写进来,然后重新并加入开机启动
systemctl restart iscsid
systemctl enable iscsid
③iSCSI客户端扫描iSCSI服务端有哪些共享资源
iscsiadm -m discovery -t st -p 192.168.0.140
- -m discovery :参数目录是扫描并发现可用的存储资源
- -t st:参数为执行扫描操作的类型
- -p 192.168.0.140:iSCSI服务端的地址
④登录iSCSI服务端
iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.liunxprobe.x8664:sn.e6ccae6a8603 -p 192.168.0.140 --login
- -m node:参数为将客户端都在的主机作为一台节点服务器
- -T iqn.2003-01.org.linux-iscsi.liunxprobe.x8664:sn.e6ccae6a8603:参数为要使用的存储资源
- -p 192.168.0.140:iSCSI服务端的地址
- --login:进行登录验证
登录成功之后,会发现客户端主机上多了一个/dev/sdb的设备文件
⑤对/dev/sdb的设备文件继续格式化并挂载
mkfs.ext4 /dev/sdb 网络磁盘文件格式为ext4格式,所以需要用ext4类型格式化
mkdir /iscsi
mount /dev/sdb /iscsi/
⑥对/dev/sdb的设备进行永久挂载
blkid | grep /dev/sdb 查看设备的UUID
十五、使用MariaDB数据库管理系统
1,安装MariaDB
①安装
yum install mariadb mariadb-serve
systemctl start mariadb
systemctl enable mariadb
②在确认MariaDB数据库软件程序安装完毕启动后请不要立即使用,需要先初始化
mysql_secure_installation 初始化命令
空格(当前数据库密码为空,直接空格)-y(设置root密码)-y(删除匿名账户)-y(禁止root管理员从远程登录)-y(删除test数据库并取消对它的访问)-y(刷新授权表,让初始化后的设定立即生效)
③设置防火墙,使其放行对数据库服务程序的访问请求,数据库服务程序默认会占用3306端口,在防火墙策略中服务名称统一叫做mysql
firewall-cmd --permanent --add-service=mysql
firewall-cmd --reload
④登录mysql
mysql -u root -p
2,MariaDB基本命令
MariaDB [(none)]> set password = PASSWORD('123456'); 修改密码
MariaDB [(none)]> show databases; 查询数据库
3,管理账户以及授权
MariaDB [(none)]> CREATE USER hunter@localhost IDENTIFIEd BY '123456'; 创建账户hunter 密码123456
use mysql; 切换到mysql数据库
select * from user where user="hunter"; 查询用户信息
命令 | 作用 |
GRANT 权限 ON 数据库.表单名称 TO 账户名@主机名 | 对某个特定数据库中的特定表单给予授权 |
GRANT 权限 ON 数据库.* TO 账户名@主机名 | 对某个特定数据库中的所有表单给予授权 |
GRANT 权限 ON *.* TO 账户名@主机名 | 对所有数据库以及所有的表单给予授权 |
GRANT 权限1,权限2 ON 数据.* TO 账户名@主机名 | 对某个数据库的所有表单给予多个授权 |
GRANT ALL PRIVILEGES ON *.* TO 账户名@主机名 | 对所有数据库及所有表单给予全部授权(需谨慎操作) |
GRANT SELECT,UPDATE,DELETE,INSERT ON mysql.user TO hunter@localhost; 给hunter账户设置mysql数据库的user表的增删查改操作
REVOKE SELECT,UPDATE,DELETE,INSERT ON mysql.user FROM hunter@localhost; 移除hunter账户的权限
MariaDB [mysql]> SHOW GRANTS FOR hunter@localhost; 查询hunter账户的权限
update user set host='%' where user='hunter'; 修改host允许其他服务器访问
GRANT SELECT,UPDATE,DELETE,INSERT ON *.* To 'hunter'@'%'; 设置访问权限
4,创建数据库与表单
create database project; 创建数据库
use project; 切换到project数据库
create table mybook(id bigint,name varchar(20)); 创建表
show tables; 查询所有表
insert into mybook values(1,"1"); 插入数据
drop database project; 删除数据库
5,数据库的备份及恢复
mysqldump -u root -p project > /root/projectDB.dump 创建备份
mysql -u root -p project < /root/projectDB.dump 恢复数据库(需要先把project数据库创建出来 create database project; )
十六、使用LNMP架构部署动态网页环境
1,使用源码包安装步骤
①下载及解压源码包文件
tar zxvf FileName.tar.gz
cd FileNameDirectory
②编译源码包代码。(--prefix指定源码包安装路径)。如果没什么问题会在当前目录下生成一个Makefile安装文件
./configure --prefix=/usr/local/program
③生成二进制安装程序。刚刚生成的Makefile文件中会保存有关系统环境、软件依赖关系和安装规则等内容,接下来便可以使用make命令来根据Makefile文件内容提供的合适规则编译生成出可供用户安装服务程序的二进制可执行文件
make
④运行二进制的服务程序安装包。由于不需要再检查系统环境,也不需要再编译代码,因此允许二进制的服务程序安装包应该是速度最快的步骤。如果在源码包编译阶段使用了--prefix参数,那么此时服务程序就会被安装到那个目录,如果没有自行使用参数定义目录的话,一般会被默认安装到/usr/local/bin目录中
make install
2,安装必要的软件包
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
3,下载所需的16个软件源码包和1个用于检测效果的论坛网站系统软件
包 | 说明 |
wget https://www.linuxprobe.com/Software/cmake-2.8.11.2.tar.gz | CMake是Liunx系统中常用的编译工具 |
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 | 用于提供jpeg图片格式支持函数库的服务程序 |
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 | 用于提供png图片格式支持函数库的服务程序 |
wget https://www.linuxprobe.com/Software/libvpx-v1.3.0.tar.bz2 | 用于提供视频编码器的服务程序 |
wget https://www.linuxprobe.com/Software/mysql-5.6.19.tar.gz | mysql源码包 |
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 | php服务源码包 |
wget https://www.linuxprobe.com/Software/pcre-8.35.tar.gz | 提供Perl语言兼容的正则表达式库的软件包 |
wget https://www.linuxprobe.com/Software/t1lib-5.1.2.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 | 用于提供压缩功能的函数文件 |
①安装cmake
tar zxvf cmake-2.8.11.2.tar.gz
cd cmake-2.8.11.2/
./configure
make
make install
4,安装mysql
①在系统里面创建一个mysql的用户
useradd mysql -s /sbin/nologin
②创建一个用于保存mysql数据库程序文件的目录
mkdir -p /usr/local/mysql/var
chown -Rf mysql:mysql /usr/local/mysql
③解压、编译、安装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
- 在编译数据库时使用cmake命令
- -DCMAKE_INSTALL_PREFIX=/usr/local/mysql 参数用于定义数据库服务程序的保存目录
- -DMYSQL_DATADIR=/usr/local/mysql/var 参数用于定义真实数据库文件的目录
- -DSYSCONFDIR=/etc 定义mysql数据库配置文件的保存目录
make
make install
④生成新的配置文件
rm -rf /etc/my.cnf 删除默认配置文件
cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var
ln -s /usr/local/mysql/my.cnf /etc/my.cnf
⑤把程序目录中的开机程序文件复制到/etc/rc.d/init.d目录中,以便service命令来管理MySql数据库服务程序。需要把数据库脚本文件权限修改为755以便让用户有执行该脚本的权限
cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod 755 /etc/rc.d/init.d/mysqld
⑥修改mysqld数据库脚本文件basedir和datadir
[root@linuxprobe mysql]# vim /etc/rc.d/init.d/mysqld
………………省略部分输出信息………………
39 #
40 # If you want to affect other MySQL variables, you should make your changes
41 # in the /etc/my.cnf, ~/.my.cnf or other MySQL configuration files.
42
43 # If you change base dir, you must also change datadir. These may get
44 # overwritten by settings in the MySQL configuration files.
45
46 basedir=/usr/local/mysql
47 datadir=/usr/local/mysql/var
48
………………省略部分输出信息………………
⑦启动服务并加入开机启动
service mysqld start 启动服务
chkconfig mysqld on 加入开机启动
⑧将mysql命令加入到BASH
vim /etc/profile
export PATH=$PATH:/usr/local/mysql/bin
source /etc/profile 立即生效
⑨MySQL数据库服务程序还会调用到一些程序文件和函数库文件。由于当前是通过源码包方式安装MySQL数据库,因此现在也必须以手动方式把这些文件链接过来。
mkdir /var/lib/mysql
ln -s /usr/local/mysql/lib/mysql /var/lib/mysql/
ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock
ln -s /usr/local/mysql/include/mysql /usr/include/mysql
⑩mysql_secure_installation对MySQL数据库进行初始化
[root@linuxprobe mysql]# mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MySQL to secure it, we'll need the current
password for the root user. If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none): 此处只需按下回车键
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
Set root password? [Y/n] y (要为root管理员设置数据库的密码)
New password: 输入要为root管理员设置的数据库密码
Re-enter new password: 再输入一次密码
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y (删除匿名账户)
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y (禁止root管理员从远程登录)
... Success!
By default, MySQL comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y (删除test数据库并取消对其的访问权限)
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y (刷新授权表,让初始化后的设定立即生效)
... Success!
All done! If you've completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!
Cleaning up...
5,安装Nginx服务
①安装pcre
cd /usr/local/src/
tar zxvf pcre-8.35.tar.gz
cd pcre-8.35/
./configure --prefix=/usr/local/pcre 程序安装在/usr/local/pcre目录
make
make install
②安装openssl
cd /usr/local/src/
tar zxvf openssl-1.0.1h.tar.gz
cd openssl-1.0.1h/
./config --prefix=/usr/local/openssl
make
make install
source /etc/profile
③安装zlib
cd /usr/local/src/
tar zxvf zlib-1.2.8.tar.gz
cd zlib-1.2.8/
./configure --prefix=/usr/local/zlib
make
make install
④安装nginx
useradd www -s /sbin/nologin 创建一个用于执行nginx服务程序的账户
cd /usr/local/src/
tar zxvf nginx-1.6.0.tar.gz
cd nginx-1.6.0/
./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
- --prefix=/usr/local/nginx 定义服务程序稍后安装的位置
- --user=www --group=www 指定执行nginx服务程序的用户名和用户组
- 在使用参数调用openssl、zlid、pcre软件包时,请指定软件源码包的解压路径,而不是程序的安装路径
make
make install
想要启动nginx服务程序以及将其加入到开启启动项中,需要脚本文件,需要自己编写:
chmod 755 /etc/rc.d/init.d/nginx 设置755以便能执行这个脚本
/etc/rc.d/init.d/nginx restart 重启nginx服务程序
chkconfig nginx on 加入开机启动
iptables -F
6,配置php服务
①yasm源码包是一款常见的开源汇编器
[root@linuxprobe nginx-1.6.0]# cd ..
[root@linuxprobe src]# tar zxvf yasm-1.2.0.tar.gz
[root@linuxprobe src]# cd yasm-1.2.0
[root@linuxprobe yasm-1.2.0]# ./configure
[root@linuxprobe yasm-1.2.0]# make
[root@linuxprobe yasm-1.2.0]# make install
②libmcrypt源码包是用于加密算法的扩展库程序
[root@linuxprobe yasm-1.2.0]# cd ..
[root@linuxprobe src]# tar zxvf libmcrypt-2.5.8.tar.gz
[root@linuxprobe src]# cd libmcrypt-2.5.8
[root@linuxprobe libmcrypt-2.5.8]# ./configure
[root@linuxprobe libmcrypt-2.5.8]# make
[root@linuxprobe libmcrypt-2.5.8]# make install
③libvpx源码包是用于提供视频编码器的服务程序。libvpx源码包的后缀是.tar.bz2,即表示使用bzip2格式进行的压缩,因此正确的解压参数应该是xjvf
[root@linuxprobe libmcrypt-2.5.8]# cd ..
[root@linuxprobe src]# tar xjvf libvpx-v1.3.0.tar.bz2
[root@linuxprobe src]# cd libvpx-v1.3.0
[root@linuxprobe libvpx-v1.3.0]# ./configure --prefix=/usr/local/libvpx --enable-shared --enable-vp9
[root@linuxprobe libvpx-v1.3.0]# make
[root@linuxprobe libvpx-v1.3.0]# make install
④tiff源码包是用于提供标签图像文件格式的服务程序
[root@linuxprobe libvpx-v1.3.0]# cd ..
[root@linuxprobe src]# tar zxvf tiff-4.0.3.tar.gz
[root@linuxprobe src]# cd tiff-4.0.3
[root@linuxprobe tiff-4.0.3]# ./configure --prefix=/usr/local/tiff --enable-shared
[root@linuxprobe tiff-4.0.3]# make
[root@linuxprobe tiff-4.0.3]# make install
⑤libpng源码包是用于提供png图片格式支持函数库的服务程序
[root@linuxprobe tiff-4.0.3]# cd ..
[root@linuxprobe src]# tar zxvf libpng-1.6.12.tar.gz
[root@linuxprobe src]# cd libpng-1.6.12
[root@linuxprobe libpng-1.6.12]# ./configure --prefix=/usr/local/libpng --enable-shared
[root@linuxprobe libpng-1.6.12]# make
[root@linuxprobe libpng-1.6.12]# make install
⑥freetype源码包是用于提供字体支持引擎的服务程序
[root@linuxprobe libpng-1.6.12]# cd ..
[root@linuxprobe src]# tar zxvf freetype-2.5.3.tar.gz
[root@linuxprobe src]# cd freetype-2.5.3
[root@linuxprobe freetype-2.5.3]# ./configure --prefix=/usr/local/freetype --enable-shared
[root@linuxprobe freetype-2.5.3]# make
[root@linuxprobe freetype-2.5.3]# make install
⑦jpeg源码包是用于提供jpeg图片格式支持函数库的服务程序
[root@linuxprobe freetype-2.5.3]# cd ..
[root@linuxprobe src]# tar zxvf jpegsrc.v9a.tar.gz
[root@linuxprobe src]# cd jpeg-9a
[root@linuxprobe jpeg-9a]# ./configure --prefix=/usr/local/jpeg --enable-shared
[root@linuxprobe jpeg-9a]# make
[root@linuxprobe jpeg-9a]# make install
⑧libgd源码包是用于提供图形处理的服务程序,其解压、编译、安装过程中生成的输出信息均已省略。在编译libgd源码包时,请记得写入的是jpeg、libpng、freetype、tiff、libvpx等服务程序在系统中的安装路径,即在上面安装过程中使用--prefix参数指定的目录路径:
[root@linuxprobe jpeg-9a]# cd ..
[root@linuxprobe src]# tar zxvf libgd-2.1.0.tar.gz
[root@linuxprobe src]# cd libgd-2.1.0
[root@linuxprobe libgd-2.1.0]# ./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
[root@linuxprobe libgd-2.1.0]# make
[root@linuxprobe libgd-2.1.0]# make install
⑨t1lib源码包是用于提供图片生成函数库的服务程序,其解压、编译、安装过程中生成的输出信息均已省略。安装后把/usr/lib64目录中的函数文件链接到/usr/lib目录中,以便系统能够顺利调取到函数文件:
报未找到latex需要执行: yum install texlive-latex yum install texlive-latex-extra yum install texlive-latex-recommended yum -y install texlive texlive-*.noarch
[root@linuxprobe cd libgd-2.1.0]# cd ..
[root@linuxprobe src]# tar zxvf t1lib-5.1.2.tar.gz
[root@linuxprobe src]# cd t1lib-5.1.2
[root@linuxprobe t1lib-5.1.2]# ./configure --prefix=/usr/local/t1lib --enable-shared
[root@linuxprobe t1lib-5.1.2]# make
[root@linuxprobe t1lib-5.1.2]# make install
[root@linuxprobe t1lib-5.1.2]# ln -s /usr/lib64/libltdl.so /usr/lib/libltdl.so
[root@linuxprobe t1lib-5.1.2]# cp -frp /usr/lib64/libXpm.so* /usr/lib/
⑩此时终于把编译php服务源码包的相关软件包都已经安装部署妥当了。在开始编译php源码包之前,先定义一个名为LD_LIBRARY_PATH的全局环境变量,该环境变量的作用是帮助系统找到指定的动态链接库文件,这些文件是编译php服务源码包的必须元素之一。编译php服务源码包时,除了定义要安装到的目录以外,还需要依次定义配置php服务程序配置文件的保存目录、MySQL数据库服务程序所在目录、MySQL数据库服务程序配置文件所在目录,以及libpng、jpeg、freetype、libvpx、zlib、t1lib等服务程序的安装目录路径,并通过参数启动php服务程序的诸多默认功能:
[root@linuxprobe t1lib-5.1.2]# cd ..
[root@linuxprobe src]# tar -zvxf php-5.5.14.tar.gz
[root@linuxprobe src]# cd php-5.5.14
[root@linuxprobe php-5.5.14]# export LD_LIBRARY_PATH=/usr/local/libgd/lib
[root@linuxprobe php-5.5.14]# ./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-t1lib=/usr/local/t1lib --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
[root@linuxprobe php-5.5.14]# make
[root@linuxprobe php-5.5.14]# make install
⑪在php源码包程序安装完成后,需要删除当前默认的配置文件,然后将php服务程序目录中相应的配置文件复制过来:
[root@linuxprobe php-5.5.14]# rm -rf /etc/php.ini
[root@linuxprobe php-5.5.14]# ln -s /usr/local/php/etc/php.ini /etc/php.ini
[root@linuxprobe php-5.5.14]# cp php.ini-production /usr/local/php/etc/php.ini
[root@linuxprobe php-5.5.14]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
[root@linuxprobe php-5.5.14]# ln -s /usr/local/php/etc/php-fpm.conf /etc/php-fpm.conf
⑫php-fpm.conf是php服务程序重要的配置文件之一,我们需要启用该配置文件中第25行左右的pid文件保存目录,然后分别将第148和149行的user与group参数分别修改为www账户和用户组名称:
[root@linuxprobe php-5.5.14]# vim /usr/local/php/etc/php-fpm.conf
1 ;;;;;;;;;;;;;;;;;;;;;
2 ; FPM Configuration ;
3 ;;;;;;;;;;;;;;;;;;;;;
4
5 ; All relative paths in this configuration file are relative to PHP's instal l
6 ; prefix (/usr/local/php). This prefix can be dynamically changed by using t he
7 ; '-p' argument from the command line.
8
9 ; Include one or more files. If glob(3) exists, it is used to include a bunc h of
10 ; files from a glob(3) pattern. This directive can be used everywhere in the
11 ; file.
12 ; Relative path can also be used. They will be prefixed by:
13 ; - the global prefix if it's been set (-p argument)
14 ; - /usr/local/php otherwise
15 ;include=etc/fpm.d/*.conf
16
17 ;;;;;;;;;;;;;;;;;;
18 ; Global Options ;
19 ;;;;;;;;;;;;;;;;;;
20
21 [global]
22 ; Pid file
23 ; Note: the default prefix is /usr/local/php/var
24 ; Default Value: none
25 pid = run/php-fpm.pid
26
………………省略部分输出信息………………
145 ; Unix user/group of processes
146 ; Note: The user is mandatory. If the group is not set, the default user's g roup
147 ; will be used.
148 user = www
149 group = www
150
………………省略部分输出信息………………
⑬配置妥当后便可把用于管理php服务的脚本文件复制到/etc/rc.d/init.d中了。为了能够执行脚本,请记得为脚本赋予755权限。最后把php-fpm服务程序加入到开机启动项中:
[root@linuxprobe php-5.5.14]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
[root@linuxprobe php-5.5.14]# chmod 755 /etc/rc.d/init.d/php-fpm
[root@linuxprobe php-5.5.14]# chkconfig php-fpm on
⑭由于php服务程序的配置参数直接会影响到Web服务服务的运行环境,因此,如果默认开启了一些不必要且高危的功能(如允许用户在网页中执行Linux命令),则会降低网站被入侵的难度,入侵人员甚至可以拿到整台Web服务器的管理权限。因此我们需要编辑php.ini配置文件,在305行的disable_functions参数后面追加上要禁止的功能。下面的禁用功能名单是依据网站运行的经验而定制的,不见得适合每个生产环境,建议大家在此基础上根据自身工作需求酌情删减:
[root@linuxprobe php-5.5.14]# vim /usr/local/php/etc/php.ini
………………省略部分输出信息………………
300
301 ; This directive allows you to disable certain functions for security reasons.
302 ; It receives a comma-delimited list of function names. This directive is
303 ; *NOT* affected by whether Safe Mode is turned On or Off.
304 ; http://php.net/disable-functions
305 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
306
………………省略部分输出信息………………
⑮这样就把php服务程序配置妥当了。最后,还需要编辑Nginx服务程序的主配置文件,把第2行的井号(#)删除,然后在后面写上负责运行Nginx服务程序的账户名称和用户组名称;在第45行的index参数后面写上网站的首页名称。最后是将第65~71行参数前的井号(#)删除来启用参数,主要是修改第69行的脚本名称路径参数,其中$document_root变量即为网站信息存储的根目录路径,若没有设置该变量,则Nginx服务程序无法找到网站信息,因此会提示“404页面未找到”的报错信息。在确认参数信息填写正确后便可重启Nginx服务与php-fpm服务。
[root@linuxprobe php-5.5.14]# vim /usr/local/nginx/conf/nginx.conf
1
2 user www www;
3 worker_processes 1;
4
5 #error_log logs/error.log;
6 #error_log logs/error.log notice;
7 #error_log logs/error.log info;
8
9 #pid logs/nginx.pid;
10
11
………………省略部分输出信息………………
40
41 #access_log logs/host.access.log main;
42
43 location / {
44 root html;
45 index index.html index.htm index.php;
46 }
47
………………省略部分输出信息………………
62
63 #pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
64
65 location ~ \.php$ {
66 root html;
67 fastcgi_pass 127.0.0.1:9000;
68 fastcgi_index index.php;
69 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
70 include fastcgi_params;
71 }
72
………………省略部分输出信息………………
[root@linuxprobe php-5.5.14]# systemctl restart nginx
[root@linuxprobe php-5.5.14]# systemctl restart php-fpm
7,搭建Discuz论坛
为了检验LNMP动态网站环境是否配置妥当,可以使用在上面部署Discuz!系统,然后查看结果。如果能够在LNMP动态网站环境中成功安装使用Discuz!论坛系统,也就意味着这套架构是可用的。Discuz! X3.2是国内最常见的社区论坛系统,在经过十多年的研发后已经成为了全球成熟度最高、覆盖率最广的论坛网站系统之一。
Discuz! X3.2软件包的后缀是.zip格式,因此应当使用专用的unzip命令来进行解压。解压后会在当前目录中出现一个名为upload的文件目录,这里面保存的就是Discuz!论坛的系统程序。我们把Nginx服务程序网站根目录的内容清空后,就可以把这些这个目录中的文件都复制进去了。记得把Nginx服务程序的网站根目录的所有者和所属组修改为本地的www用户(已在20.2.2小节创建),并为其赋予755权限以便于能够读、写、执行该论坛系统内的文件。
[root@linuxprobe php-5.5.14 ]# cd /usr/local/src/
[root@linuxprobe src]# unzip Discuz_X3.2_SC_GBK.zip
[root@linuxprobe src]# rm -rf /usr/local/nginx/html/{index.html,50x.html}*
[root@linuxprobe src]# mv upload/* /usr/local/nginx/html/
[root@linuxprobe src]# chown -Rf www:www /usr/local/nginx/html
[root@linuxprobe src]# chmod -Rf 755 /usr/local/nginx/html
①接受Discuz!安装向导的许可协议。在把Discuz!论坛系统程序(即刚才upload目录中的内容)复制Nginx服务网站根目录后便可刷新浏览器页面,这将自动跳转到Discuz! X3.2论坛系统的安装界面,此处需单击“我同意”按钮,进入下一步的安装过程中,如图20-4所示。
②检查Discuz! X3.2论坛系统的安装环境及目录权限。我们部署的LNMP动态网站环境版本和软件都与Discuz!论坛的要求相符合,如果图20-5框中的目录状态为不可写,请自行检查目录的所有者和所属组是否为www用户,以及是否对目录设置了755权限,然后单击“下一步”按钮。
③选择“全新安装Discuz! X(含UCenter Server)”。UCenter Server是站点的管理平台,能够在多个站点之间同步会员账户及密码信息,单击“下一步”按钮,如图20-6所示。
④填写服务器的数据库信息与论坛系统管理员信息。网站系统使用由服务器本地(localhost)提供的数据库服务,数据名称与数据表前缀可由用户自行填写,其中数据库的用户名和密码则为用于登录MySQL数据库的信息(以初始化MySQL服务程序时填写的信息为准)。论坛系统的管理员账户为今后登录、管理Discuz!论坛时使用的验证信息,其中账户可以设置得简单好记一些,但是要将密码设置得尽可能复杂一下。在信息填写正确后单击“下一步”按钮,如图20-7所示。
⑤等待Discuz! X3.2论坛系统安装完毕,如图20-8所示。这个安装过程是非常快速的,大概只需要30秒左右,然后就可看到论坛安装完成的欢迎界面了。由于虚拟机主机可能并没有连接到互联网,因此该界面中可能无法正常显示Discuz!论坛系统的广告信息。在接入了互联网的服务器上成功安装完Discuz! X3.2论坛系统之后,其界面如图20-9所示。随后单击“您的论坛已完成安装,点此访问”按钮,即可访问到论坛首页,如图20-10所示。