共计 15260 个字符,预计需要花费 39 分钟才能阅读完成。
防火墙
硬件防火墙: 次要是进攻 DDOS 攻打, 流量攻打. 兼顾数据包过滤.
软件防火墙: 次要解决数据包的过滤.
- iptables
- firewalld
包过滤防火墙
应用层防火墙
iptables
CentOS 6 默认防火墙, 次要是包过滤防火墙, 对 ip, 端口, tcp, udp, icmp 协定管制.
配置清晰, 很简单.
属于包过滤防火墙
iptables [选项]
选项
-n --numeric # 数字输入。IP 地址和端口会以数字的模式打印。默认状况下,程序试显 示主机名、网络名或者服务(只有可用)-v --verbose # 让 -L 显示更具体的
-L -list < 规定链 > # 显示所选链的所有规定。如果没有抉择链,所有链将被显示。也能够和 z 选项一起 应用,这时链会被主动列出和归零。准确输入受其它所给参数影响。-t < 规定表 =filter> # 要操作的匹配包的表(默认是操作 filter)
规定 ” 表 ”
-
filter 过滤
ip, 端口, tcp,udp,icmp 协定
- nat 网络地址转换
- mangle
- raw
罕用, 需重点学习的: filter 和 nat
不同的表有本人的默认规定, eg.
Chain INPUT (policy ACCEPT)
示意若未匹配任意规定则默认承受
规定 ” 链 ”
- INPUT (C->S 方向)规定链
- OUTPUT (S->C 方向)规定链
- FORWARD 转发规定链
- PREROUTING 路由前转换 (扭转指标地址) 规定链
- POSTROUTING 路由后转换 (管制源地址) 规定链
filter 表操作
默认操作的是 filter 表, 因而个别书写时能够省略.
filter [-t filter] < 命令 > < 规定链 > < 规定 >
命令
-L -list # 查看状态
-I -insert # 增加规定(插入到最后面), 留神规定的程序是有优先级的(排在后面的优先级高)
-A -append # 增加规定(追加到最初面), 留神规定的程序是有优先级的(排在后面的优先级高)
-D -delete < 规定序号或具体规定 > # 删除某一条规定
-F -flush # 清空所有规定(默认的 Policy 规定不会扭转)
-P -policy # 设置默认规定
自定义规定链
-N -new-chain # 创立自定义规定链
-X -delete-chain
-E -rename-chain
规定链
INPUT
OUTPUT
规定
-s -source [!] address[/mask] # 指定源地址 ip
# eg. 10.0.0.0
# eg. 10.0.0.0/24
-d --destination [!] address[/mask] # 指定指标地址 ip, 用于 INPUT 没意义
-i -in-interface [!] [name] # 进入的网络接口(网卡)
-o --out-interface [!][name] # 进来的网络接口(网卡)
-p -protocal [!]protocol # 协定: tcp, udp, icmp
-j --jump <target> # 指定规定的指标(动作)
tcp 协定相干选项
--sport, --source-port [!] [port[:port]] # 起源端口或端口范畴
--dport, --destionation-port [!] [port:[port]] # 指标端口或端口范畴
udp 协定相干选项
--sport, --source-port [!] [port[:port]] # 起源端口或端口范畴
--dport, --destionation-port [!] [port:[port]] # 指标端口或端口范畴
icmp 协定相干选项
动作(target) -j
ACCEPT # 容许
DROP # 禁止
QUEUE
RETURN
示例
iptables -vnL # 查看 filter 表具体状态, 可不便查看以后的所有规定
iptables -t filter -A INPUT -s 10.0.0.1 -j ACCEPT # 容许来自 10.0.0.1 的包进入
iptables -t filter -A INPUT -s 10.0.0.2 -j DROP # 容许来自 10.0.0.1 的包进入
iptables -D INPUT -s 10.0.0.2 -j DROP # 删除匹配的规定
iptables -t filter -D INPUT 3 # 删除第 3 条规定(第 1 条的序号是 1)
iptables -P INPUT DROP # 批改 INPUT 规定链的默认规定为 DROP
iptables -t filter -A INPUT -i eth0 -s 10.0.0.2 -p tcp --dport 80 -j ACCEPT # 容许从 eth0 网卡进入, 来自 10.0.0.2 的包拜访本地的 80 端口.
罕用策略
-
默认 ACCEPT, 配置特定规定 DROP
罕用于测试
-
默认 DROP, 配置特定规定 ACCEPT
常见于生产环境
输入字段解释
以后的默认策略是 ACCEPT
????
Chain INPUT (policy ACCEPT 501 packets, 33820 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * * 10.0.0.1 0.0.0.0/0
???? ???? ???? ???? ???? ????
策略 协定 进入网卡 进来网卡 起源地址 目标地址
(tcp,udp,icmp)
nat 表操作
NAT 表 – 网络地址转换表
filter -t nat < 命令 > < 规定链 > < 规定 >
规定链
PREROUTING # 路由前转换 - 目标地址转换
POSTROUTING # 路由后转换 - 管制源地址
动作(target) -j
DNAT
规定
--to-destination <ip>[/<mask>] # 批改目标地址
--to-source <ip>[/<mask>] # 批改源地址
示例
iptables -t nat -vnL # 查看 nat 表具体状态
# 假如 iptables 所在主机 ip 为 114.115.116.117, 此处配置外网拜访该地址 (eth0 网卡) 时将拜访 tcp 协定且是 80 端口的数据包目标地址转换内网主机
iptables -t nat -A PREROUTING -i eth0 -d 114.115.116.117 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1
# 另内网拜访该地址 (eth1 网卡) 时将数据包源地址转换成 iptables 所在主机 ip 114.115.116.117
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth1 -j SNAT --to-source 114.115.116.117
可用于: 端口转发
配置文件
iptables 配置文件 /etc/sysconfig/iptables
在 CentOS 6 中, 治理 iptables:
service iptables save|start|stop|restart
命令
save # 将以后内存中的配置保留为配置文件 /etc/sysconfig/iptables
# 理论执行了 iptables-save > /etc/sysconfig/iptables
# 下次启动时 iptables-restore < /etc/sysconfig/iptables
在 CentOS 7 中, 须要装置该服务
yum install iptables-services
才能够应用该命令
留神:
- iptables 的命令是写在内存中, 重启后生效.
firewalld
CentOS 7 在 iptables 上又封装了一层, 也就是 firewalld , 应用更简洁(底层应用 netfilter).
属于包过滤防火墙
firewalld 的特点
-
反对区域 “zone” 概念
即 iptables 的自建规定链
- firewall-cmd 管制防火墙
firewalld 服务治理
systemctl start|stop|enable|disable firewalld.serivce
留神: firewalld 与 iptables 服务是抵触的.
firewall-cmd
firewall-cmd [选项]
选项
状态选项
--state # 查看 firewalld 以后状态
--reload # 从新加载配置
--zone=public # 指定区域, 不指定时默认就是 public
Zone 选项
--get-zones # 查看所有的区(除了 public 外还有一些 iptables 默认规定链一样)
--get-default-zone # 查看默认的区
--get-active-zone # 查看激活的 zone
永久性选项
--permanent # 设置选项写入配置, 须要 reload 能力失效
批改和查问 zone 的选项
--list-all # 查看具体状态(蕴含以下内容)
--list-interfaces # 查看某一项状态 - 网卡接口
--list-ports # 查看某一项状态 - 端口
--list-services # 查看某一项状态 - 服务端口
--add-service < 服务 > # 增加 service 端口
--add-port < 端口 / 协定 > # 增加指定协定指定端口, eg. 81/tcp
--add-source < 源 ip[/ 网段]> # 增加源地址
--add-interface < 网卡接口 >
--remove-service < 服务 >
--remove-port < 端口 / 协定 >
--remove-source < 源 ip[/ 网段]>
--remove-interface < 网卡接口 >
待整顿的示例
# 只容许某个 IP 段拜访 3306 firewall-cmd --permanent --zone=public --add-rich-rule 'rule family=“ipv4”source address=“192.168.0.4/24”port port protocal=“tcp”port=“3306”accept'
firewall-cmd --list-all
输入字段解释
#public 区域 激活状态
# ???? ????
public (active)
target: default # ????
icmp-block-inversion: no
interfaces: eth0 # ???? public 区域绑定了 eth0 网卡
sources: # 容许拜访的源 ip
services: ssh dhcpv6-client # 容许拜访的服务端口
ports: # 容许拜访的端口
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
telnet 服务
telnet 是明文传输, 危险, 因而不能利用于远程管理.
装置服务
## telnet 是客户端工具
## telnet-server 是服务端服务
## xinetd 是因为 telnet-server 无奈自启动, 因而须要应用它来治理 telnet-server 的启动
yum install telnet telnet-server xinetd -y
启动服务
systemctl start xinetd
systemctl start telnet.socket
telnet 不负责端口的监听, 只负责解决传过来的数据.
端口监听工作交由 xinetd 负责, xinetd 负责端口监听并将申请转发给 telnet
root 用户无奈用于 telnet 近程登录
SSH 服务
客户端配置文件 /etc/ssh/ssh_config
服务配置文件 /etc/ssh/sshd_config
Port 22 # 服务端口号(默认是 22)
PermitRootLogin yes # 是否容许 root 登录
AuthorizedKeysFile .ssh/authorized_keys # 密钥验证的公钥存储文件. 默认是放在 ~/.ssh/authorized_keys
使配置失效
systemctl restart sshd.service
ssh 命令
ssh 选项 [<user>@]<host>
选项
罕用
-p <port> # 指定连贯端口
-4 # 强制 ssh 只应用 IPv4 地址
-f # 要求 ssh 在执行命令前退至后盾.
端口转发
-N # 不执行近程命令. 用于转发端口.
-L port:host:hostport # local, 将本地机 (客户机) 的某个端口转发到远端指定机器的指定端口
# 工作原理是这样的, 本地机器上调配了一个 socket 侦听 port 端口, 一旦这个端口上有了连贯, 该连贯就通过平安通道转发进来, 同时近程主机和 host 的 hostport 端口建设连贯. 能够在配置文件中指定端口的转发.
# 只有 root 能力转发特权端口. IPv6 地址用另一种格局阐明: port/host/hostport
-R port:host:hostport # remote, 将近程主机 (服务器) 的某个端口转发到本地端指定机器的指定端口
# 工作原理是这样的, 近程主机上调配了一个 socket 侦听 port 端口, 一旦这个端口上有了连贯, 该连贯就通过平安通道转向进来, 同时本地主机和 host 的 hostport 端口建设连贯.
# 能够在配置文件中指定端口的转发. 只有用 root 登录近程主机 能力转发特权端口. IPv6 地址用另一种格局阐明: port/host/hostport
示例
ssh -fNL 27117:127.0.0.1:27017 < 近程主机地址 > # 建设 local 隧道, 将来自 27117 的连贯通过 < 近程主机 > 转发至 127.0.0.1(其实还是 < 近程主机 >)的 27017 端口
# 通常实用于 < 近程主机 > 未对外开放 27017 端口
ssh -fNR 2222:127.0.0.1:22 < 近程主机地址 > # 建设 remote 隧道(也叫反向隧道), 将来自 < 近程主机 >2222 端口的连贯通过本机转发给 127.0.0.1(实际上还是本机)
# 通常实用于外网拜访内网服务
示例: 配置拜访特定主机时应用特定的私钥文件
- 以后主机存在多个私钥文件
- 拜访特定主机时需应用特定私钥文件(非默认)
# 假如私钥文件门路: ~/.ssh/xxx_id_rsa
cat > ~/.ssh/config <<'EOF'
Host 192.168.0.143
PubkeyAuthentication yes
IdentityFile ~/.ssh/xxx_id_rsa
EOF
# 留神 config 文件和私钥文件的权限都必须是 600
chmod 600 ~/.ssh/config
公钥认证
ssh-keygen 命令
生成密钥对
ssh-keygen [选项]
选项
-t < 密钥类型 =rsa> # 指定密钥类型: dsa|ecdsa|ed25519|rsa|rsa1
-C <comment=$USER@$HOSTNAME> # 正文(追加在公钥文件最初)
留神:
- 生成密钥对肯定是在客户端上做, 而后再将公钥传给服务端.
默认生成的文件
~/.ssh/id_rsa
~/.ssh/id_rsa.pub
ssh-copy-id 命令
将公钥 (通过 ssh) 拷贝到指标主机
ssh-copy-id 选项 [user@]hostname
选项
-n # dry-run, 不真正执行命令
-i <identity_file=~/.ssh/id_rsa.pub> # 手动指定公钥文件
-p port
-o ssh_option
留神:
- 指标主机的公钥存储文件
~/.ssh/authorized_keys
, 600 权限
scp 命令
近程文件复制
scp [选项] <src> <dest>
选项
-C 容许压缩
-r 递归复制整个目录
-P port
src 和 dest 能够是以下任意的
[<user>@]<host>:/remote/path # 指定近程文件或目录
/local/path # 指定本地文件或目录
示例
scp a.txt 192.168.0.16:/tmp/ # 拷贝本地的 a.txt 到近程的 /tmp/ 目录下
传递大文件更举荐用 rsync(断点续传, 压缩)
rsync 命令
疾速、通用的近程和本地文件传输工具
语法
# 本地复制
rsync [选项] <src> <dest>
# 通过 ssh 近程复制
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
# 通过 rsync 服务
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
选项
# 罕用
-P # 断点续传(保留那些因故没有齐全传输的文件,以便放慢随后的再次传输), 等同于 --partial --progress
-z, --compress # 对备份的文件在传输时进行压缩解决, 放慢传输
-e, --rsh=<COMMAND> # 以 ssh 形式进行数据传输, -e "ssh -p2222" 指定连贯 2222 端口, 如果是 ssh 形式默认应用 22 端口
--bwlimit # 限速, 字节 / 秒
-r,--recursive # 对子目录以递归模式解决
--progress # 显示传输进度
--partial # 断点续传
-c, --checksum # 关上校验开关,强制对文件传输进行校验。(而不是基于文件的批改工夫及大小)
--delete # 删除那些 DEST 中 SRC 没有的文件。--delete-before # rsync 首先读取 src 和 dest 的文件列表, 并删除那些 DEST 中 SRC 没有的文件, 之后再执行同步操作。# 因为分两步骤执行, 因而须要更多的内存耗费以及工夫耗费. 因而仅在 dest 的可用空间较小时用这种形式.
--delete-excluded # 除了删除 DEST 中 SRC 没有的文件外, 还会一并移除 dest 中 --exclude 或 --exclude-from 指定的文件 / 目录.
-u, --update # 如果 DEST 中的文件比 SRC 新(指批改工夫), 就不会对该文件进行同步.
--exclude=PATTERN # 指定排除不须要传输的文件, 比方 --exclude="logs" 会过滤掉文件名蕴含 "logs" 的文件或目录, 不对齐同步.
--include=PATTERN # 指定不排除而须要传输的文件模式。-v, --verbose # 具体模式输入。-q, --quiet # 精简输入模式。-a, --archive # 归档模式,示意以递归形式传输文件,并放弃所有文件属性,等于 -rlptgoD
-t, --list # list the contents of an archive
-l, --links # 保留软链
-L, --copy-links # 同步软链时, 以理论的文件来代替
-p, --perms # 放弃文件的权限属性
-o, --owner # 保留文件的属主(super-user only)
-g, --group # 保留文件的属组
-D # 放弃设施文件信息, 等同于 "--devices --specials"
-t, --times # 放弃文件的工夫属性
示例
rsync -P -z -r root@xx.xx.xx.xx:/data/transfer/archive.zip /data/archive.zip
rsync -P -e "ssh -p2222" --bwlimit=200 root@xx.xx.xx.xx:/data/transfer/archive.zip /data/archive.zip
当带宽足够大时, 应用
-z
反而会拖慢速度.
FTP 服务
ftp 协定
ftp 协定: 文件传输协定
- 须要同时建设命令链路 (21 端口, 先建设, 传输命令) 和数据链路(传输文件名称, 目录名称, 文件数据)
-
数据链路
-
被动模式
命令链路建设后, 服务端 (应用 20 端口) 被动向客户端发动建设数据链路申请(理论可能会被客户端防火墙之类的挡住, 导致无响应)
-
被动模式(理论罕用)
命令链路建设后, 服务端会凋谢大于 1024 的端口被动等客户端连贯.
-
vsftpd 服务
# 装置必要软件
## vsftpd 是服务端
## ftp 是客户端
yum install vsftpd ftp
# 启动 vsftpd 服务
systemctl start vsftpd.service && systemctl enable vsftpd.service
通过
man 5 vsftpd.conf
能够查看配置文件详解.留神
- 默认提供匿名账号:
ftp
- 默认以后零碎的账号
vsftpd 配置文件
/etc/vsftpd/vsftpd.conf
主配置文件/etc/vsftpd/ftpusers
用户相干/etc/vsftpd/user_list
用户黑白名单, 比方禁止 root 登录
vsftpd.conf
配置
anonymous_enable=YES # 是否容许匿名用户(ftp)
local_enable=YES # 是否容许零碎本地用户账号登录. 同时会受到 SELinux(ftp_home_dir 项)的影响
write_enable=YES # 本地用户是否可写
connect_from_port_20=YES # 是否容许开启被动模式(不会影响被动模式)
userlist_enable=YES # 是否启用用户黑白名单
userlist_deny=YES # 管制用户列表是黑名单还是白名单, YES 示意黑名单.
# 仅在 userlist_enable=YES 时失效
# 虚构用户配置相干
guest_enable=YES # 容许虚构用户进行验证
guest_username=< 零碎用户名 > # 指定登录身份为某个零碎用户
user_config_dir=/etc/vsftpd/< 零碎用户名 >config # 指定虚构用户权限管制文件所在目录
allow_writeable_chroot=YES # 虚构用户是否可写
pam_service_name=vsftpd.vuser # 虚构用户的 "可插拔验证模块(pam)" 对应文件名称
YES
和NO
必须是大写的.能够应用
man 5 vsftpd.conf
来查看该配置文件的帮忙
强制访问控制对 ftpd 的影响
# 查看 SELinux 中和 ftpd 相干的布尔配置项 getsebool -a | grep ftpd # 批改 ## -P 同时写入配置文件 ## 0 示意 off, 敞开 ## 1 示意 on, 关上 setsebool -P < 配置项名 > 1|0
默认匿名账号
- 账号:
ftp
- 明码: 空
- 默认目录:
/var/ftp/
一般账号
- 账号: 零碎账号
- 明码: 零碎账号的明码
- 默认目录:
~
- 能拜访一般账号的 home 目录
ftpusers 配置
vsftp 虚构用户
示例: 新增 3 个虚构用户
# 1. 建设一个实在零碎账号
## 指定 /data/ftp 为该用户的 home 目录
## 指定该用户不可登录到零碎
useradd -d /data/ftp -s /sbin/nologin vuser
# 2. 编写存储虚构用户账号和明码的临时文件
## 该文件格式是: 一行虚构用户名, 一行对应明码
cat <<'EOF' > /etc/vsftpd/vuser.tmp
u1
123456
u2
123456
u3
123456
EOF
# 3. 将上述临时文件转成数据库专用格局
db_load -T -t hash -f /etc/vsftpd/vuser.temp /etc/vsftpd/vuser.db
# 4. 创立可插拔验证模块配置
cat <<'EOF' > /etc/pam.d/vsftpd.vuser
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
EOF
# 5. 批改 /etc/vsftpd/vsftp.conf 确保其中相干配置如下
guest_enable=YES
guest_username=vuser
user_config_dir=/etc/vsftpd/vuserconfig
allow_writeable_chroot=YES
pam_service_name=vsftpd.vuser
# 正文掉以下语句后, 就不再反对匿名和本地用户登录了
#pam_service_name=vsftpd
# 6. 创立虚构用户配置所在目录
mkdir /etc/vsftpd/vuserconfig
# 7. 在虚构用户配置目录中创立和所要创立虚构用户名同名的配置文件
## 此处创立 u1, u2, u3 的配置文件
## 省略 u2 的...
## 省略 u3 的...
cat <<'EOF' > /etc/vsftpd/vuserconfig/u1
local_root=/data/ftp # 用户登录后进入的目录
write_enable=YES # 可写
anon_umask=022
anon_world_readable_only=NO # 可写?
anon_upload_enable=YES # 可上传
anon_mkdir_write_enable=YES # 可创立目录?
anon_other_write_enable=YES # 可写?
download_enable=YES # 可下载
EOF
# 8. 重启 vsftpd 服务
systemctl restart vsftpd.service
ftp 命令
ftp 客户端
ftp < 地址 >
选项
如果提醒 ” 没有到主机的路由 ”, 个别是因为被防火墙挡住.
相干命令
ls # 在近程执行 ls
!ls # 在本地执行 ls
pwd # 在近程执行 pwd
!pwd # 在本地执行 pwd
cd # 切换近程目录
lcd # 切换本地目录
put <file> # 上传文件, 若提醒无权限则应查看 "write_enable" 配置项
get <file> # 下载文件
samba 服务
samba 服务
- 应用 smb 协定
- 应用 cifs 文件系统
/etc/samba/smb.conf
配置文件
smb 协定是微软持有的版权, 用于 windows 之间的共享.
而 samba 则是模仿这种协定, 次要用于共享给 windows.
若是 Linux 之间的共享则倡议应用 nfs
# 装置
yum install samba
# 服务
systecmtl start|stop|restart|reload smb.service
配置文件
配置文件 /etc/samba/smb.conf
局部格局阐明
[global] # 全局设置
workgroup = SAMBA
security = user
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
[share] # 共享名
comment = my share
path = /data/share # 共享门路
read only = No # 是否只读, No 示意可写
man 5 smb.conf
可查看该配置文件的帮忙文档
smbpasswd 命令
samba 用户的创立和删除
smbpasswd [选项]
选项
-a # 增加用户(零碎中必须有一个同名的用户, samba 用户拜访权限是参考零碎同名用户的)
-x # 删除用户
-s # silent, 从规范输出上读取原口令和新口令, 罕用于脚本解决 smb
新创建的用户默认会间接共享出本人的 home 目录, 也就是
/home/ 用户名
这个目录.
pdbedit 命令
samba 用户查看
pdbedit [选项]
选项
-L # 查看用户
示例
# 1. 创立零碎用户, 此处以 user1 为例
useradd user1
# 2. 创立同名 samba 用户
echo -e "123456\n123456" | smbpasswd -a user1
# 3. 启动 samba 服务
systemctl start smb.service
# 4. 应用
## windows 客户端能够通过映射网络驱动器或 windows 共享来应用
## Linux 客户端能够通过磁盘挂载应用(将 127.0.0.1 上的 /home/user1 挂载到了以后的 /mnt 目录)
### -t cifs 可省略, 由 mount 自行判断
### 输出明码后就挂载胜利了
### 挂载结束后可通过 df -hT 或 mount | tail -1 查看挂载信息
mount -t cifs -o username=user1 //127.0.0.1/user1 /mnt # 挂载后面在 /etc/samba/smb.conf 里配置的 [share] 共享所指定的目录
mount -t cifs -o username=user1 //127.0.0.1/share /mnt2 # 此处举例, 挂载在 /mnt2 文件夹上
# 不须要后就卸载掉
umount /mnt
umount /mnt2
nfs 服务
次要用于 Linux 之间的共享服务.
默认已装置
治理
systemctl start|stop|reload nfs.service
/etc/exports 主配置文件
man 5 exports
可查看帮忙
配置格局
< 共享目录 > < 容许起源主机 >(权限)...
???? 这里不得有空格
可指定多个
共享目录
必须是已存在的目录.
容许起源主机
* # 任意主机
具体 ip # 指定该 ip 可拜访
权限(用逗号分隔)
rw # 读写权限
ro # 只读权限
sync # (内存)数据同步写入磁盘, 防止失落数据
all_squash # 应用 nfsnobody 零碎用户
示例
/data/share *(rw,sync,all_squash)
若权限设置了
all_squash
, 则会应用 nfsnobody 这个用户来做实际操作, 因而须要将该共享目录的属主和属组设为 nfsnobodychown -R nfsnobody:nfsnobody /data/share/
showmount 命令
显示对于 NFS 服务器文件系统挂载的信息
showmount [选项] <host>
选项
-e, --exports # 查看所有共享的目录
挂载
mount 主机:/path/dir /local/path/to/mount
示例
mount localhost:/data/share /mnt # 将 localhost 上共享的 /data/share 目录挂载到本地的 /mnt 目录
Nginx/OpenResty
- Nginx(engine X) 是一个高性能的 Web 和反向代理服务器.
-
Nginx 反对 HTTP, HTTPS 和电子邮件代理协定
Nginx 模块因为是用 c /c++ 编写的, 要增加新模块还须要从新编译.
- OpenResty 是基于 Nginx 和 Lua 实现的 Web 利用网关, 集成了大量的第三方模块.
装置
# 增加 yum 源
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
# 装置 openresty
yum install -y openresty
治理
systemctl start|reload|stop openresty
配置文件
/usr/local/openresty/nginx/conf/nginx.conf
Nginx 配置
/usr/local/openresty/nginx/conf/nginx.conf
worker_processes 1; # 配置多少个 worker 过程, 最大值倡议不大于 CPU 外围数
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid;
events {
# use epoll;
worker_connections 1024; # 每个 worker 容许的并发连贯, 超过会返回 503 Service Unavailable 谬误
}
http {
# 此处的配置会对上面所有 server 失效
# 拜访日志格局定义
log_format main '$remote_addr - $remote_user [$time_local]"$request"''$status $body_bytes_sent "$http_referer" ''"$http_user_agent""$http_x_forwarded_for"';
# 拜访日志记录文件及采纳的格局配置
access_log logs/access.log main;
# sendfile 和 tcp_nopush 是在内核层面上优化传输链路
sendfile on; # 传输文件时的优化: 间接在内核中将文件数据拷贝给 socket.
tcp_nopush on; # 仅 sendfile 启用时失效, 将 http 头和实体一起返回, 缩小报文段数量
keepalive_timeout 65; # HTTP 协定的 keepalive, 建设长连贯, 重用 TCP 连贯
gzip on; # 传输时启用 gzip 压缩, 节俭带宽, 造成 CPU 额定耗费.
server {
listen 80; # 监听端口
server_name localhost; # 域名(虚拟主机)
location / {
root html;
index index.html index.htm;
}
}
}
上述配置中的相对路径是基于编译 nginx 时指定的特定门路, 个别是 nginx 所在目录, 对应此处是
`/usr/local/openresty/nginx/
LNMP
MySQL
- mariadb 是 MySQL 的社区版
# 装置
# mariadb 是客户端
#
yum install mariadb mariadb-server
批改配置文件 /etc/my.cnf
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
或者是采纳 utf8mb4 编码, 兼容 4 字节的 unicode, 须要存 emoji 表情的话应应用 utf8mb4
PHP
yum install php-fpm php-mysql
systemctl start php-fpm.service
默认源的版本是 5.4, 须要更高的能够用 webtatic 源
此处仅作示范
Nginx
server {
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
通过 fastcgi 协定将申请转发给 php-fpm
DNS 服务
DNS 服务介绍
- DNS(Domain Name System) 域名零碎
- FQDN(Full Qualified Domain Name) 齐全限定域名
- 域分类: 根域、顶级域(TLD)
- 查问形式: 递归、迭代
- 解析形式: 正向解析(主机 -> ip)、反向解析(ip -> 主机)
- DNS 服务器的类型: 缓存域名服务器、主域名服务器(master)、从域名服务器(salve)
www.baidu.com.
???? ???? ????
主机名 域名 根域
.com 顶级域
. 根域
BIND 软件
提供 DNS 服务
# 装置
## bind 提供服务的软件包
## bind-utils DNS 服务的相干工具
yum install bind bind-utils
# 服务治理
systemctl start named.service
主配置文件: /etc/named.conf
options {listen-on port 53 { any;}; // 监听端口及对应网卡
...
allow-query {any;}; // any 容许任何人查问
}
// 根域
zone "." IN {
type hint;
file "named.ca"; // /var/named/named.ca
};
named-checkconf
确认配置文件是否正确
named-checkconf
………..DNS 本节课后续略过, 看不下去
NAS
NAS(Network attached storage)网络从属存储
反对的协定:
- nfs
- cifs
- ftp
个别是通过创立磁盘阵列 RAID 后, 再通过上述协定共享.
创立步骤
假如此处提供了 2 个新硬盘
- /dev/sde
- /dev/sdf
1. 创立共享空间
# 磁盘分区
fdisk /dev/sde
fdisk /dev/sdf
# 创立 RAID
## 此处创立 RAID1 级别的磁盘阵列
mdadm -C /dev/md0 -a yes -l 1 -n 2 /dev/sd{e,f}1
# 长久化 RAID 配置信息
mdadm --detail --scan --verbose > /etc/mdadm.conf
# 通过逻辑卷的形式以不便后续扩容
## 初始化物理卷
pvcreate /dev/md0
## 创立卷组
vgcreate vg1 /dev/md0
## 创立逻辑卷
### 此处示例, 因而只创立个 200M 的逻辑卷
lvcreate -L 200M -n nas vg1
# 分区格式化
mkfs.xfs /dev/vg1/nas
# 分区挂载
mkdir /share
mount /dev/vg1/nas /share
2. 通过协定共享
# 创立专用用户 shareuser
useradd shareuser -d /share/shareuser
echo 123456 | passwd --stdin shareuser
# 1. 配置 ftp 共享 - 通过 shareuser 用户登录 ftp 并拜访 home 目录 (也能够用虚构用户)
确认 /etc/vsftpd/vsftpd.conf 配置
pam_service_name=vsftpd
local_enable=YES
write_enable=YES
systemctl restart vsftpd.service
# 2. 配置 samba 服务
echo -e "123456\n123456" | smbpasswd -a shareuser
systemctl restart smb.service
# 3. 配置 nfs 服务
## 配置为 ro (nfs 因为没有用户级别的限度, 因而这种状况下不举荐设置为 rw)
echo '/share/shareuser *(ro)' >> /etc/exports
systemctl restart nfs.service
## 配置为 rw (配合 facl 权限访问控制列表)
echo '/share/shareuser *(rw,sync,all_squash)' >> /etc/exports
setfacl -d -m u:nfsnobody:rwx /share/shareuser
setfacl -m u:nfsnobody:rwx /share/shareuser