零散知识点:基本的命令集合、Linux基本常识、yum搭建、网络配置(链路聚合)、磁盘分区(格式化和虚拟内存)、权限分析、压缩备份、shell脚本、SELinux和防火墙、别名、vim的一些使用技巧、源码包编译安装、RAID阵列卡、进程管理、破解root密码、实时同步(监听与同步)
服务:Apache的web服务以及https安全web服务、FTP共享服务、邮件服务、samba服务、NFS共享服务、iscsi磁盘共享、Mariadb数据库、DNS服务(分离解析)、PXE网络装机、cobbler装机
互联网中常见协议及端口号
协议 | 含义 | 端口 |
http | 超文本传输协议 | 80 |
https | 安全的超文本传输协议 | 443 |
ftp | 文件传输协议 | 21 |
tftp | 简单的文件传输协议 | 69 |
dns | 域名解析协议 | 53 |
smtp | 发邮件协议 | 25 |
pop3 | 收邮件协议 | 110 |
snmp | 网络管理协议 | 161 |
telnet | 远程管理协议 | 23 |
Linux目录结构(man hier)
/boot | 存放系统引导必需的文件,包括内核、启动配置 |
/bin、/sbin | 存放各种命令程序 |
/dev | 存放硬盘、键盘、鼠标、光驱等各种设备文件 |
/etc | 存放Linux系统及各种程序的配置文件 |
/root、/home/ | 用户名 分别是管理员root、普通用户的默认家目录 |
/var | 存放日志文件、邮箱目录等经常变化的文件 |
/proc | 存放内存中的映射数据,不占用磁盘 |
/tmp | 存放系统运行过程中使用的一些临时文件 |
命令集合:
1. du -sh [目录或者文件]…… ---> 查看文件或目录的大小
2. history ---> 查看历史命令
-c ---> 表示清空历史命令
3. date ---> 查看当前时间
-s "yyyy-mm-dd HH:MM:SS" --> 修改时间
+"%Y-%m-%d %H:%M:%S" ---> 按照"年-月-日 时:分:秒"输出
4. ln [选项] [源文件的位置] [快捷方式] ---> 创建硬连接
-s ---> 创建软连接
5. crontab [选项] [-u 用用户名] ---> 设置计划任务 -e修改 -l列出已有的计划任务 -r删除所有计划任务
6. tailf 实时跟踪日志信息 其日志等级分为0-7 一共8个级别 ,3级为错误,3级以上需要重视
7. journalctl | grep [关键词] ---> 按照关键字查找日志信息
journalctl -u [服务名] ---> 按照服务名查看日志信息
journalctl --since="yyyy-mm-dd HH:MM:SS" --until="yyyy-mm-dd HH:MM:SS" ---> 按照修改时间日志信息
8. systemctl isolate graphical.target ---> 临时调整Linux运行模式为图形模式
systemctl isolate multi-user.target ---> 临时调整Linux运行模式为字符模式
systemctl set-default …….target ---> 永久调整Linux运行模式为……
systemctl get-default ---> 查看当前Linux运行模式
systemctl is-active 服务名 ---> 查看服务当前是开启还是没开启
systemctl is-enabled 服务名 ---> 查看服务当前是否开机自启
9. ssh-keygen ---> 用于无密码登陆,创建公钥,交互式,不过只要一直按回车即可
ssh-copy-id user@IP---> 将公钥部署到相应的服务器上
10. uname -r ---> 查看内核信息
lscpu ---> 查看CPU信息
cat /proc/meminfo ---> 查看内存大小和空想情况
cat /etc/redhat-release ---> 查看当前系统版本
11. less ---> 进行分屏阅读,实用于长文章,功能和cat差不多
head -[数字] [文件]---> 输出文件的前n行的内容 默认为10行
tail -[数字] [文件]---> 输出文件的后n行的内容 默认为10行
12. cp [被复制文件1] …… [复制到的目录]---> 以最后一个为复制的目标位置进行复制
\cp -r [目录] …… [复制到的目录] ---> 复制目录,反斜是用来取消别名,这里是为了不因为重复而回答yes
一个常见的考题:
rm -rf /opt/* # 作用是: 清空/opt目目录内容
cp -r /mnt/ /opt/test # 作用是: 将/mnt放入入/opt命名为test
cp -r /mnt/ /opt/test # 作用是: 将/mnt放入入/opt/test目目录下
13. wget [软件包的URL网址] -O [/目录路径/新文件] ---> 从网站中下载文件,没有-O就是下载到当前路径,不过如果有指定下载位置,必须在路径后面写上文件名!
scp [文件地址] [user]@[IP]:[拷贝到的目录] ---> 把本地文件传递到其他服务器上
14. passwd [用户名] ---> 交互式设置密码
echo '[密码]' | passwd --stdin [用户名] ---> 非交互式设置密码
15. grep [关键字] [文件名] ---> 从文件中按照要求找出符合匹配要求的数据
find [目录] -user [用户] -type [f文件 ,d 目录] -exec [命令,其中{}代表] \;
16. showmount -e [服务端IP地址] ---> 查看NFS服务器的共享目录列表
Linux的基本常识:
1. 常见的Linux发行版本
Red Hat Enterprise Linux 5/6/7
Suse Linux Enterprise 12
Debian Linux 7.8
Ubuntu Linux 14.10/15.04
2. Linux中常见的文件系统:
EXT4,第四代扩展文件系统,RHEL6系列默认 ---> mkfs.ext4
XFS,高级日志文件系统,RHEL7系列默认 ---> mkfs.xfs
SWAP,交换空间(虚拟内存) ---> mkswap
3. 基本通配符
*:任意多个任意字符
?:单个字符
[a-z]:多个字符或连续范围中的一个,若无则忽略
{a,min,xy}:多组不同的字符串,全匹配
4.账号与组相关的配置文件:
用户相关:/etc/passwd /etc/shadow
组相关:/etc/group /etc/gshadow
yum搭建:
服务端 :
1. 搭建http服务或者ftp服务
2. 在服务指定目录下创建一个目录,放入大量的rpm包
3. 用createrepo [目录] 生成一个清单文件
4. 启服务
客户端:
如果没有服务端,自己想直接把光盘作为软件仓库就需要进行挂载,再书写yum配置文件。
mount /dev/cdrom [挂载点]
也可以修改挂载文件/etc/fstab 达到永久挂载 格式为
/dev/cdrom [挂载点] iso9660 defaults,ro 0 0
书写yum配置文件,在/etc/yum.repos.d/*.repo
[rhel7] #仓库标识,仓库的名字
name=rhel7.0 #仓库的描述信息
baseurl=服务位置 #指定服务端位置,最好浏览器进行复制粘贴,如果是本机挂载的yum仓库,服务位置就写file:///[挂载点],注意是三个斜线,其中第三个斜线代表绝对路径中的根
enabled=1 #启用该文件
gpgcheck=0 #不检测红帽的签名信息
配置完成后,清除缓存后测试一下
yum clean all
yum repolist #看到很多包就表示yum搭建成功
网络:
配置IP:
nmcli connection modify [网卡名] ipv4.method [manual静态、auto动态] ipv4.addresses '[IP/子网掩码]' ipv4.dns [DNS服务器地址] connection.autoconnect yes
链路聚合:
1.创建虚拟网卡:( man teamd.conf 找到热备的部分,config后面写上'{复制查到的内容}')
nmcli connection add type team con-name team0 ifname team0 autoconnect yes config '{[man帮助找到的内容]}'
2.创建成员:
nmcli connection add type team-slave con-name team0-1 ifname [真实网卡] autoconnect yes master team0
3.配置IP
nmcli connection modify team0 ipv4.method manual ipv4.addresses '[IP/子网掩码]' connection.autoconnect yes
4.激活 :
nmcli connection up team0
nmcli connection up team0-1
IPv4地址:32个二进制组成,以 点 分隔 4 部分,最终用4个十进制表示
IPv6地址:128个二进制组成,以 冒号 分隔 8 部分,每部分由 4个16进制数表示
每段内连续的前置 0 可省略、连续的多个 : 可简化为 ::
分区 : MBR GPT LVM逻辑卷
分区信息存放在/dev下,命名的方法是/__[a-z][0-99]
前两位是分区接口,SCSI是sd,IDE是hd
第三位是磁盘号 , 第四位是分区号
lsblk 查看当前磁盘和分区的情况
blkid 查看某个具体分区的格式化情况
partprobe 刷新分区情况
MBR :
分区特点: 最多4个主分区,一般是3个主分区,一个拓展分区,其中从拓展分区中分出逻辑分区
分区命令: fdisk [/dev/磁盘名] ---> 交互命令,进入后使用n(创建)、d(删除)、w(保存退出)、q(不保存退出)
分区使用: mount挂载使用
注意点: 1.一般创建拓展分区是把所有剩余空间都给扩展分区
2.在查看编号的时候,主分区是按照顺序来,逻辑分区号=逻辑分区号+主分区数+1(扩展分区)
GPT :
分区特点: 可以有128个主分区
分区名命令:parted ---> 交互命令,进入后
mktable(指定分区类型)、mkpart(创建分区)、print(打印当前分区情况)、unit(指定大小的单位)
LVM :
创建: 1.创建卷组 ---> vgcreate [卷组名称] [分区磁盘系统位置]
2.创建逻辑卷 ---> lvcreate -L [大小] [逻辑卷名] [卷组名]
扩大: 1.卷组扩大 ---> vgextend [卷组] [分区磁盘1] [分区磁盘2] ......
2.逻辑卷扩大 --->lvextend -L [大小] /dev/[卷组名]/[逻辑卷名]
!注意:扩大后需要进行拓展格式化,不能直接使用,格式化要用专用命令。
PE : 卷组划分空间的单位,修改PE值 : vgchange -s [PE大小] [卷组名]
逻辑卷创建或扩大的时候可以用 -l [PE的个数]
删除: 1.删除卷组 ---> vgremove [卷组名]
2.删除逻辑卷 ---> lvremove /dev/[卷组名]/[逻辑卷名]
格式化
常见文件存储系统
格式化命令: mkfs.[文件系统] [磁盘位置/dev/……]
拓展已经被格式化的磁盘专用命令:
ext4文文件系统:resize2fs
xfs文文件系统:xfs_growfs
虚拟内存:
将磁盘分区格式化为交换分区: mkswap [磁盘位置]
将格式化后的交换分区启动:swapon -a
查看交换分区情况 : swapon -s
/etc/fstab 书写格式:
[存储路径] swap swap defaults 0 0
权限
访问方式(权限)
读取:允许查看内容-read r
写入:允许修改内容-write w
可执行:允许运行和切换-execute x
对于文本文件,文件的权限是用于开放和限制自身文件的操作
r:cat less head tail
w:vim > >>
x:Shell脚本 可以运行
对于目录,目录的权限是用于开放和限制目录下子文件和子目录的操作
r:能够 ls 浏览此目录内容
w:能够执行 rm/mv/cp/mkdir/touch/ 等更改目录内容的操作
x:能够 cd 切换到此目录 ,并且可以根据子文件的权限情况对子文件进行操作
权限适用对象(归属)
所有者:拥有此文件/目录的用户-user --> u
所属组:拥有此文件/目录的组-group --> g
其他用户:除所有者、所属组以外的用户-other --> o
设置基本权限
使用 chmod 命令
chmod [选项] [归属关系][+-=][权限类别] [文档1] [文档2] ……
选项 -R 代表递归赋权
判断用户权限:
1.判断用户的角色 顺序:所有者>acl>所属组>其他人 匹配及停止
2.查看相应权限位置的权限设置
Permission denied : 权限不足
command not found: 命令没有找到
设置文档归属
使用 chown 命令
chown [-R] 属主 文档...
chown [-R] :属组 文档...
chown [-R] 属主:属组 文档...
Set GID
附加在属组的 x 位上,属组的权限标识会变为 s
适用于目录,Set GID可以使目录下新增的文档自动设置与父目录相同的属组
Set UID
附加在属主的 x 位上,属主的权限标识会变为 s
适用于可执行文件,Set UID可以让使用者具有文件属主的身份及部分权限
Sticky Bit
附加在其他人的 x 位上,其他人的权限标识会变为 t
适用于开放 w 权限的目录,可以阻止用户滥用 w 权限(只能操作属于的文档)
Acl策略
可以但多为一个人设置权限
setfacl [选项] u:用户名:权限 文档
setfacl [选项] g:组名:权限 文档
-m 创建 -x 删除 -b 清空
getfacl [文档]... 查看某文档的acl权限情况
权限修改是即时生效的,可是用户加入组,需要用户重新登录才能生效
压缩备份
tar压缩
Linux常见的压缩格式及命令工具和选项代表字符:
gzip ---> .gz ----> z
bzip2 ---> .bz2 ----> j
xz ---> .xz ----> J
压缩 tar -[格式代表字符] - cf [(路径)/tar包] [被压缩的文件] # 选项f后面必须立刻接上空格和tar包位置
解压 tar -xf [(路径) / tar包] -C [解压的目标目录] # 选项f后面必须立刻接上空格和tar包位置
查看压缩包的目录 tar -tf [(路径)/tar包]
zip打包
zip [-r] [包].zip [被打包的文文件或目目录]............
unzip [包].zip -d [解压路路径]
脚本
规范Shell脚本的一般组成
#! 环境声明(以下所有代码利用哪一个程序解释)
# 注释文本
可执行代码
重定向输出
> : 只收集正确输出
2>:只收集错误输出
&>:正确输出与错误输出都收集
$[] :代表运算 + - * / %(取余数运算)
$( ):将命令的输出,当作参数,参与其他命令执行
黑洞设备:/dev/null
变量
变量名要求
等号两边不要有空格
变量名只能由字母/数字/下划线组成,区分大小写
变量名不能以数字开头,不要使用关键字和特殊字符
若指定的变量名已存在,相当于为此变量重新赋值
变量=变量值(中间不能有空格!)
判断
if [条件测试1];then
命令序列1
elif [条件测试2];then
命令序列2
elif [条件测试3];then
命令序列3
......
else
命令序列n
fi
循环
for 变量 in [被选值1] [被选值2] 或者 {1..n}(造数)
do
done
注意事项:
1.if判断中每次用到判断都要在后面加上;then 在判断结束后加上fi
2.if的开始标志是then 结束标志三fi 循环的开始标志三do 结束标志三done
SELinux
三种运行行行模式 Enforcing Permissive Disabled
其配置文文件为 /etc/selinux/config
命令:
getenforce ---> 查看SELinux的模式
setenforce ---> 临时更更改SELinux模式,不过只能在Enforcing和Permissive间切换
getsebool -a ---> 查看布尔值
setsebool ---> 设置布尔值
chcon -R --reference=[目目录a] [目目录b] ---> 将a的安全上下值赋给b
semanage port -l | grep [软件] ---> 查看某软件的端口口号
semanage port -a -t http_port_t -p tcp 8909 ---> 修改某软件的开放端口口号(修改的时候会消耗很多内存,耐心心等待)
firewall
防火墙,一般影响两台设备间的通信
四种模式:
public 允许一部分 默认允许ssh,dhcp,ping
trusted 全允许
block 全禁止,并且反馈给客户
drop 全禁止,并且不反馈
命令:
firewall-cmd --get-default-zone ---> 查看防火墙默认安全模式
firewall-cmd --set-default-zone=[安全模式] ---> 设置防火墙默认安全模式
firewall-cmd --zone=public --add-service=[服务名,如http ,ftp] ---> 默认
firewall-cmd --zone=[安全模式] --add-service= [服务] ---> 给某个模式加服务
firewall-cmd --zone=[安全模式] --add-forward-port=port=[客户请求访问的端口号]:proto=tcp:toport=[转变后的端口号] ---> 端口转发
firewall-cmd --permanent ……………… ---> 对防火墙进行永久配置
别名
alias [别名]='[命令]' ---> 临时创建别名
unalias [别名名称] ---> 取消已设置的别名
永久修改别名,需要修改配置文件/etc/bashrc(所有用户别名有效,优先级最高)
/root/.bashrc(root用户专用别名) /home/[用户]/.bashrc(用户专用别名)
直接在空白处,把临时设置别名的命令打进去即可,不过这个要重新登陆才能使用
vim用法:
命令模式: | |
Home 键 或 ^、数字 0 | 跳转到行首 |
End 键 或“$”键 | 跳转到行尾 |
1G 或 gg | 跳转到文件的首行 |
GG | 跳转到文件的末尾行 |
yy、[要复制几行]yy | 复制光标处的一行、指定多行 |
p、P | 粘贴到光标处之后、之前 |
x 或 Delete键 | 删除光标处的单个字符 |
dd、[要删除几行]dd | 删除光标处的一行、指定多行 |
d^ | 从光标处之前删除至行首 |
d$ | 从光标处删除到行尾 |
C(大写) | 从光标处删除到行尾,并且进入插入模式 |
/[查找的字符串] | 向后查找字符串 |
n、N | 跳至后/前一个结果 |
u | 撤销 |
U | 撤销对当前行的所有修改 |
Ctrl + r | 取消前一次撤销操作 |
ZZ | 保存修改并退出 |
末行模式: | |
:w | 保存当前文件 |
:q! | 放弃已有更改后强制退出 |
:wq 或 :x | 保存已有修改后退出 |
:r /etc/filesystems | 读入其他文件内容 |
:s/[将被替换的字符串]/[替换为字符串] | 替换当前行第一个 |
:s/[将被替换的字符串]/[替换为字符串] /g | 替换当前行所有的 |
:1,6 s/[将被替换的字符串]/[替换为字符串] /g | 替换第1-6行所有的 |
:% s/[将被替换的字符串]/[替换为字符串] /g | 替换文件内所有的 |
:set nu|nonu | 显示/不显示行号 |
:set ai|noai | 启用/关闭自动缩进 |
不过,新机可能没有vim,需要用yum下载,如果没有vim,编辑文件只能用vi
源码包编译安装
0. 装包gcc make
1. 解压源码包,tar解压或者zip解压
2. 配置 ./configure
3. 编译 make
4. 安装 make install
RAID阵列概述
RAID 0,条带模式
同一个文档分散存放在不同磁盘,并行写入以提高效率,至少需要2块磁盘
RAID 1,镜像模式
一个文档复制成多份,分别写入不同磁盘,多份拷贝提高可靠性,效率无提升,至少需要2块磁盘
RAID 5,高性价比模式
相当于RAID0和RAID1的折中方案,需要至少一块磁盘的容量来存放校验数据,至少需要3块磁盘
RAID 6,高性价比/可靠模式
相当于扩展的RAID5阵列,提供2份独立校验方案,需要至少两块磁盘的容量来存放校验数据,至少需要4块磁盘
RAID 0/1或者叫RAID 10(用的很少)
整合RAID 0、RAID 1的优势,并行存取提高效率、镜像写入提高可靠性,至少需要4块磁盘
硬RAID:由RAID控制卡管理阵列
主板 ---> 阵列卡---> 磁盘 ---> 操作系统---> 数据
软RAID:由操作系统来管理阵列
主板 ---> 磁盘---> 操作系统---> RAID软件---> 数据
进程管理
pstree 树型结构显示进程
-a 显示完整的命令行
-p 列列出对应PID编号
ps aux 列出正在运行的所有进程,显示的和下面的命令不一样,显示自己的PID
ps -elf 列出正在运行的所有进程,显示PPID(父进程的ID信息)
top 一直查看进程
pgrep 按照条件查看进程
-l :输出进程名,而不仅是 PID
-U :检索指定用户的进程
-t :检索指定终端的进程
-x :精确匹配完整的进程名
who 查看登录用户信息(还有w、users也可以查看用户登录情况,不过不常用)
命令后面加上 & 执行,表示放入后台执行
执行命令中 ctrl + z 表示命令停止并且放入后台
jobs 查看后台进行信息
bg [编号] 将后台某编号的进程,启动继续在后台运行
fg [编号] 将后台某编号的进程,恢复到前台运行
kill [PID] ---> 杀死进程 ,加上-9表示强制杀死
killall ---> 表杀死相关的所有进程
pkill -9 -u [用户] ---> 强制踢出一个用户
破解root密码
1. 重启系统,进入 recovery 恢复模式(修复模式)
按e键,找到 linux16 行,末尾添加 rd.break console=tty0,再按 ctrl + x 启动
2. 可写方式重新挂载 /sysroot,并切换到此环境
mount -o remount,rw /sysroot
chroot /sysroot
3. 将root用户的密码重新设置
echo [密码] | passwd --stdin root
4. 重设SELinux安全标签(安全增强版Linux)
touch /.autorelabel #让SElinux失忆
或者关闭SELinux ,也就是修改/etc/selinux/config
修改第七行 SELINUX=disabled
5. 先后执行 exit、reboot 完成修复
持续监听实现目录实时同步
1. 同步技术:
使用rsync命令,使用如下
rsync [选项] [源目录] [同步到的目标目录]
-n :测试同步过程,不做实际修改
--delete :删除目标文件夹内多余的文档
-a :归档模式,相当于-rlptgoD
-v :显示详细操作信息
-z :传输过程中启用压缩/解压
常用组合 : rsync -avz [源目录] [同步到的目标目录]
当然源目录或者目标目录也可以是其他服务器的目录,用法是:
下行 ---> rsync [选项] user@host:远程目录 本地目录
上行 ---> rsync [选项] 本地目录 user@host:远程目录
同步与复制的差异
复制:完全拷贝源到目标
同步:增量拷贝,只传输变化过的数据
注意:源目录后面有/ 代表将源目录下
没有/ 的话就是把目录完全拷贝到目标目录
2. 监控目录变化
使用的是 inotifywait 命令
1. 装包 inotify-tools ,不过这个是源码包,需要编译安装,具体看上面的源码包编译安装流程
2. 安装后,如果没有做一些特殊部署,可以直接使用命令
-m 持续监控(捕获一个事件后不退出)
-r 递归监控、包括子目录及文件
-q 减少屏幕输出信息
-e 指定监视的modify、move、create、delete、attrib等事件类别,不写的话默认监视所有。
常用组合为: inotifywait -rq [目录] 监听一次
3. 综合应用,实现实时同步
原理:用while循环写一个死循环,但监听到变化的时候就进行一次同步,在服务端运行这个脚本,当修改了这个目录,就自动同步。
书写同步的脚本:
#!/bin/bash
Watch_Root=[监听的目录]
Same_Root=[ user@IP: ][同步到的目录位置]
while inotifywait -rqq $Watch_Root
do
rsync --delete -az $Watch_Root $ Same_Root
done & # 符号&表示放入后台执行
注意: 目录必须写绝对路径,并且监听路径后面必须是/结尾!
服务清单:
服务 | 作用 | 需要的软件和相关服务名 | 配置文件或者配置命令 |
Yum软件仓库 | 自动解决依赖关系安装软件 | 无 | 主配置文件:/etc/yum.conf 客户端配置文件:/etc/yum.repos.d/*.repo |
NTP时间同步 | 配置客户端自动与服务端同步时间 | 客户端软件:chrony 服务名:chronyd |
客户端配置文件:/etc/chrony.conf |
cron计划任务 | 按照设置的时间间隔 为用户反复执行某一项固定的系统任务 |
服务端软件包:cronie、crontabs 系统服务:crond |
使用 crontab 命令 任务记录文件存放路径:/var/spool/cron |
LDAP认证 | 实现网络用户和用户集中管理 | 客户端软件:sssd、authconfig-gtk 服务名:sssd |
无 |
SELinux | 增强Linux系统安全性 | 无 | getenforce #查看当前SELinux状态 setenforce 0 #设置当前SELinux状态 修改固定配置: /etc/selinux/config 文件 |
Samba共享 | 实现Linux与Windows跨平台共享文件夹 | 服务端软件包:samba 客户端软件:cifs-utils 系统服务:smb |
服务端主配置文件:/etc/samba/smb.conf 客户端开机自动挂载使用,需要在挂载的时候输入帐号密码 |
NFS共享 | 实现Linux与Linux平台共享文件夹 | • 服务端所需软件包:nfs-utils • 系统服务:nfs-server |
服务端 主配置文件修改 /etc/exports 客户端挂载使用,其中共享目录书写格式为 [IP]:[服务端目录位置] |
iSCSI网络磁盘 | 服务器提供磁盘空间,客户机连接并当成本地磁盘使用 | 服务端软件:targetcli 客户端软件:iscsi-initiator-utils 服务端服务名:target 客户端服务名:iscsid(刷新iqn)、iscsi(加载服务端共享磁盘) |
•服务端运行targetcli命令进行配置 •客户端修改配置文件/etc/iscsi/initiatorname.iscsi#指定客户端声称的名字 |
数据库 | 存储数据,方便查询、备份数据 | 服务端软件:mariadb-server 服务端服务名:mariadb |
主配置文件:/etc/my.cnf |
Web服务 | 为客户端提供网页内容 | 服务端软件:httpd、mod_wsgi(提供动态页面) 服务端服务名:httpd |
主配置文件:/etc/httpd/conf/httpd.conf 调用配置文件:/etc/httpd/conf.d/*.conf |
安全Web服务 | 为客户端提供安全加密网页内容 | 服务端软件:httpd、mod_ssl 服务端服务名:httpd |
修改配置文件 /etc/httpd/conf.d/ssl.conf |
邮件服务 | 为用户提供电子邮箱存储空间(用户名@邮件域名) 处理用户收到和发出的邮件 |
服务端软件:postfix 服务端服务名:postfix |
主配置文件:/etc/postfix/main.cf |
DNS服务器 | 正向解析:根据注册的域名查找其对应的IP地址 | 服务端软件:bind、bind-chroot 服务端服务名:named |
• 主配置文件:/etc/named.conf #设置本机负责解析的域名 • 地址库文件:/var/named/ #主机名与IP地址的对应关系 |
rsyslog服务 | 日志服务,负责管理系统日志 | 服务端软件:rsyslog 服务端服务名:rsyslog |
• 常见的日志文件 /var/log/messages 记录内核消息、各种服务的公共消息 /var/log/dmesg 记录系统启动过程的各种消息 /var/log/cron 记录与cron计划任务相关的消息 /var/log/maillog 记录邮件收发相关的消息 /var/log/secure 记录与访问限制相关的安全消息 |
DHCP服务 | 动态主机配置协议,用来简化主机地址分配管理 | 服务端软件:dhcp 服务端服务名:dhcpd |
主配置文件:/etc/dhcp/dhcpd.conf |
tftp服务 | 简单的文件传输协议 | 服务端软件:tftp-server 服务端服务名:tftp |
默认共享数据路径:/var/lib/tftpboot |
Apache
搭建服务器
1. 装包 httpd
2. 配置 /etc/httpd/conf/httpd.conf 主配置文件
3. 启服务 httpd
对其进行特殊要求的部署:
1. 修改域名 --> vim /etc/httpd/conf/httpd.conf 中的 ServerName行
2. 修改网页文件根目录 --> vim /etc/httpd/conf/httpd.conf 中的 DocumentRoot
3. 虚拟主机 --> 修改配置文件 /etc/httpd/conf.d/[自己设置虚拟主机配置的名字].conf
ServerName [域名]
DocumentRoot [网络根目录]
4. 设置权限(一般默认/var/www下所有子目录对所有人有访问权限,其他地方默认没有权限)--> 修改配置文件 /etc/httpd/conf.d/[自己设置权限配置的名字].conf ---> 设置SELinux的安全上下文值
Require all granted | denied # 全体禁止访问或者允许
Require ip [IP] # 只允许某IP访问
**** 设置完权限要设置SELinux 的安全上下文值
chcon -R --reference=[目录a] [目录b] # 把a目录的上下文值给b目录
5. 部署Python的动态页面 ---> 装包,修改 conf.d/[虚拟主机配置文件].conf
yum install -y mod_wsgi
vim /etc/httpd/conf.d/[虚拟主机的配置文件]
WsgiScriptAlias [客户端网络路径] [服务器实际原始路径]
6. 修改端口 ---> 修改配置文件vim /etc/httpd/conf.d/[虚拟主机的配置文件] --->修改SELinux的开发端口
vim /etc/httpd/conf.d/[虚拟主机的配置文件]
Listen 8909
WsgiScriptAlias [客户端网络路径] [服务器实际原始路径]
semanage port -l | grep http
semanage port -a -t http_port_t -p tcp 8909
注意:
1. 每次修改配置文件都要重启服务
2. 虚拟主机存在的时候,直接用IP,会调用第一个虚拟主机的信息,客户端调用的时候,出现端口不匹配或者域名不匹配,当中有一个不匹配时,会根据端口信息调用该端口中的第一个虚拟主机。
3. 搭建Apache服务的时候,需要考虑的几个问题:1.部署的服务是否有权限 2. 修改到新的路径下,要设置权限并且修改目录的上下文值(部署到/var/www以外的地方)3. 设置SELinux的默认端口,并且配置文件中要写Listen(修改端口信息)
https 安全web 构建
1.装包 mod_ssl
2.部署
网站证书、根证书 :/etc/pki/tls/certs/
私钥 : /etc/pki/tls/private/
3.修改配置文件 /etc/httpd/conf.d/ssl.conf 59-60、100、107、122行
4.重启httpd服务
FTP
1.装包vsftpd
2.重起vsftpd服务
3.本机测试验证
curl ftp://172.25.0.11
4.默认vsftpd共享路径 /var/ftp/
邮件服务器
1.装包 postfix
2.配置 /etc/postfix/main.cf
3.启服务 systemctl restart postfix
发邮件 echo '[邮件内容]' | mail -s '[邮件标题]' -r [发件人] [收件人]
收邮件 main -u [用户]
samba服务
搭建服务端:
1.装包 samba
2.创建用户 A ,并且加入samba服务
useradd [用户]
pdbedit -a [上面创建的用户] ---> 交互设置密码
3.配置 /etc/samba/smb.conf
最后加入
[名字]
path = [共享目目录]
write list = [允许读写的用用户名]
4.关闭防火墙,设置seliux的布尔值
getsebool -a | grep samba
setsebool samba_export_all_ro (samba_export_all_rw) on
5.启服务smb
搭建客户端:
1.装包cifs-utils
2.挂载 mount -o user=[用户],pass=[密码] //[IP]/共享名字 /[挂载点]
永久挂载文件书写
//[IP]/共享名 [挂载点] cifs defaults,user=[用户名],pass=[密码],_netdev 0 0
nfs共享
搭建服务端
1.装包 nfs-utils
2.配置 /etc/exports
/[共享目录] [共享给的IP,也可以是网段](ro) #只读共享
/[共享目录] [共享给的IP,也可以是网段](rw) #读写共享
3.启动服务nfs-server
4.如果是做读写,需要给共享目录赋权
chown :nfsnobody /[共享目录]
chmod g+s /[共享目录]
搭建客户端
挂载 mount [IP]:/[共享路径] [挂载点]
永久挂载
[IP]:/[共享路径] [挂载点] nfs defaults,_netdev 0 0
iscsi
搭建服务端
1. 分区,从磁盘中分一个区(fdisk),不用格式化。
2. 关闭防火火墙
3. 装包 targetcli
4. 配置 targetcli(里面创建5个模块)
/> backstores/block create name=[名字] dev=[磁盘]
/> iscsi/ create [iqn命名,作为iscsi的名字]
/> iscsi/[tab键]/tpg1/luns create /ba[tab键]4
/> iscsi/[tab键]/tpg1/acls create [iqn命名,用用于验证用用户名] 5
/> iscsi/[tab键]/tpg1/portals create [本机用用于传递的IP] ip_port=[端口号,默认为3260]
5.重启服务 target
搭建客户端
1. 装包 iscsi-initiator-utils
2. 配置 /etc/iscsi/initiatorname.iscsi 验证用户名
(可以用用man iscsiadm中的example来找)
iscsiadm --mode discoverydb --type sendtargets --portal [IP] --discover 配置选择服务端的IP
3. 启服务iscsid iscsi
mariadb数据库
配置:
装包: yum install -y mariadb-server
起服务: systemctl restart mariadb
修改密码:
mysqladmin -u [用户名] [-p[旧密码]] password '新密码'
登录:
mysql -u [用户名] -p[密码] -h [IP或者localhost] # -p后面没有空格 -h 指定以什么IP登陆
导入备份:
mysql -u [用户名] -p[密码] [库] < [文件]
基本操作:
show databases 查看所有库的基本信息
use database [库名] 前往某个库
show tables 查看库中的表的基本信息
对用户创建并赋权
grant [增删改查的权限] on [库].[表] to [用户名]@[登陆IP] identified by [密码];
对表进行查找
select [表1].[表中数据的字段1],[表2].[表中数据的字段2]…… from [表1],[表2]…… where [表].[字段] = '' and ……;
对表进行删除
delete from [表1],[表2]…… where [表].[字段] = '' and ……;
对表进行增加
insert into [表] values ('[按照表的要求写入数据1]','[按照表的要求写入数据2]' …… );
注意点:
1. mariadb 进去数据库的命令是mysql , 设置密码是 mysqladmin
2. ***注意登录或者改密码时候-p后面要紧跟密码,不能有空格
3. mariadb 数据库中,每个语句要家;
4. 增删改查中where用于设置条件,其连接方式是and,其他是用[ , ] 所以要注意分开记忆。
DNS
DNS服务器
1.搭建DNS:
装包: bind bind-chroot
配置: 主配置文件/etc/named.conf
地址库文件 /var/named/*
起服务: named
2.多区域DNS, 主配置文件中写多个zone, 每个对应创建一个地址库文件
3.特殊解析:
轮询 : 地址库文件中同样的域名写多次,但是每次解析的IP不一样,第一次有客户段请求解析的时候,DNS会返回第一个IP,第二个来的时候会返回第二个,以此类推。
泛域名 : 用通配符*代表地址位
别名 : CNAME
4.子域授权:
在两个服务器上搭建DNS,其中一个是父域,一个是子域,父域中把子域的信息录入
5.递归解析:
默认开启
6.每个Linux 都有个文件/etc/hosts 这文件也可以解析DNS,他解析优先级高于DNS
7.分离解析 让不同用户解析的结果也不一样
8.缓存服务器
DNS服务器的配置文件,总和:
如果是缓存DNS服务器,只有一个主配置文件,没有地址库文件:
options {
directory "/var/named";
forwarders { [缓存服务器查找的DNS服务器,一般是网络中的DNS服务器]; };
};
完整的正常DNS服务器:
/etc/named.conf 主配置文件:
options {
directory "/var/named"; #指定地址库文件存放位置
recursion no; #禁用递归解析,不写的话默认开启
};
acl "[acl名]" { [A的IP1]; [网段 如 192.168.110.0/24]; …………}; #类似变量
view "[名字1]" { #用于分离解析
match-clients { [上面定义过的acl表]; };
zone "[域名1]" IN {
type [master/slaver];
file "[为A解析的库文件名]";
};
zone "[域名2]" IN {
type [master/slaver];
file "[为A解析的库文件名]";
};
};
view "[名字2]" {
match-clients { [B的IP1]; ………… };
zone "[域名1]" IN {
type [master/slaver];
file "[为B解析的库文件名]";
};
zone "[域名2]" IN {
type [master/slaver];
file "[为B解析的库文件名]";
};
};
view "[名字3]" {
match-clients { [any代表所有]; };
zone "[域名1]" IN { #两个zone代表多区域DNS
type [master/slaver];
file "[为其他解析的库文件名]";
};
zone "[域名2]" IN {
type [master/slaver];
file "[为其他解析的库文件名]";
};
};
PXE 自动装机
思路:dhcp--->tftp--->安装清单--->菜单目录--->rpm包共享--->自动应答
1.DHCP 配置
装包:dhcp
配置:/etc/dhcp/dhcpd.conf
subnet [网网段].0 netmask 255.255.255.0 { # 分配的网段
range [IP- 起点 ] [IP- 终点 ]; # 分配 IP 地址范围
option domain-name-servers [DNS 服务器器 IP]; # 分配的 DNS 服务器
option routers [ 网网关 IP]; # 分配的网关地址
default-lease-time 600;
max-lease-time 7200;
next-server 192.168.4.7; # 指定下一服务器IP地址
filename "pxelinux.0"; # 指定网卡引导文件名称
}
2.搭建tftp
装包:tftp-server
启服务: tftp
部署 pxelinux.0 文件 :
yum provides */pxelinux.0 #查询仓库中哪个包产生改文件
yum -y install syslinux
rpm -ql syslinux | grep pxelinux.0 #查询安装清单
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ #将文件拷⻉到tftp下
3,部署菜单文件 : /var/lib/tftpboot/pxelinux.cfg/default
部署菜单文件中需要的模块
图形的模块 vesamenu.c32
背景图片 splash.png
启动内核 initrd.img
驱动程序 vmlinuz
修改菜单文件: cp isolinux/isolinux.cfg -O /var/lib/tftpboot/pxelinux.cfg/default (day19)
4.搭建web或者ftp共享
5.自自动问答
装包:system-config-kickstart
修改本地yum源:把标识修改为[development]
运行:system-config-kickstart
利用web或者ftp共享应答文件
修改菜单文件指定应答文件
菜单文件核心模块:
label linux
menu label Install RHEL7 # 菜单选项显示内容
menu default # 读秒结束默认选择
kernel vmlinuz # 加载内核
append initrd=initrd.img ks=http://192.168.4.7/ks.cfg # 加载驱动,指定问答文文件
实现PXE网络批量装机需要具备哪些条件,各组件的作用,如何实现无人值守安装?
DHCP服务器:为客户机提供IP地址等参数,并告知下一个服务器地址、启动文件名
TFTP服务器:为客户机提供启动文件、启动菜单配置、用来安装系统的内核及初始镜像文件
yum软件仓库:通过HTTP或FTP方式为客户机提供安装树资源(RHEL7光盘目录结构)
实现kickstart无人值守安装:
1)提前准备一份安装过程中所涉及问题的答案清单(即应答文件)
2)然后将此文件部署到客户机可下载的位置
3)通过修改pxelinux.0的启动配置,使客户机装系统时自动调用应答文件实现面交互
Cobbler自动装机
这网络自动装机,和PXE差不多,原理也一样,只是把PXE做了一个封装,让我们实现更轻松,不过相对而言,个性化设计会比PXE复杂,总体思路还是比较简单:装包、配置主配置文件和dhcp文件、部署引导文件(直接解压)、然后依次启4个服务。
0. 搭建一台CentOS服务器,完成网络配置、yum仓库的配置、关闭防火墙和SELinux
1. 装包 解压zip压缩包,并安装里面的rpm包
unzip Cobbler.zip -d /opt
unzip /opt/Cobbler/cobbler.zip -d /opt
yum install -y /opt/cobbler/*
2. 配置 修改配置文件/etc/cobbler/settings
next_server: [本服务器的IP] #设置下一个服务器还为本机
server: [本服务器的IP] #设置本机为cobbler服务器
manage_dhcp: 1 #设置cobbler管理dhcp服务
pxe_just_once: 1 #防止客户端重复安装操作系统
配置 cobbler的dhcp文件: /etc/cobbler/dhcp.template
把文件中的网段修改成服务器的网段,用全文替换的方法噶
:%s /192.168.1/[网段,即IP的前三个字段]/g #全文替换
4. 部署引导文件
在原来解压的大压缩包中有引导文件包 cobbler_boot.tar.gz
tar -xPf /Cobbler/cobbler_boot.tar.gz #绝对路径释放
5.启动相关服务 cobblerd ---> httpd ---> tftp ---> rsyncd(同步服务)
6.同步刷新cobbler配置
cobbler sync #检测配置是否正确
当出现 *** TASK COMPLETE *** 代表搭建成功
7. 光盘部署和个性化修改
挂载光盘到挂载点,再使用下面的命令,导入数据,导入后可以取消挂载重新再挂一个,重复操作,实现多操作系统搭建:
cobbler import --path=挂载点 --name=导入系统命名(随意起) #导入安装镜像数据
cobbler list #查看有哪些系统
cobbler profile remove --name=CentOS7-x86_64 #删除菜单信息
cobbler distro remove --name=CentOS7-x86_64 #删除镜像信息
如果想自定义部署ks应答文件,system-config-kickstart生成ks文件,并且放到指定的目录下:/var/lib/cobbler/kickstarts/,再部署进去:
cobbler profile edit --name=[list查到的菜单名字] --kickstart=/var/lib/cobbler/kickstarts/自定义.cfg