Linux学习之Engineer
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习之Engineer相关的知识,希望对你有一定的参考价值。
Day-01
1、系统安全保护 SELinux概述
? Security-Enhanced Linux
– 美国NSA国家安全局主导开发,一套增强Linux系统安全的强制访问控制体系
– 集成到Linux内核(2.6及以上)中运行
– RHEL7基于SELinux体系针对用户、进程、目录和文件
提供了预设的保护策略,以及管理工具
? SELinux的运行模式
– enforcing(强制)、permissive(宽松)
– disabled(彻底禁用)
? 切换运行模式
– 临时切换:setenforce 1|0
– 固定配置:/etc/selinux/config 文件
– 如果修改SELinux状态为disabled(彻底禁用),需要修改/etc/selinux/config 文件并且重起
[[email protected] ~]# vim /etc/selinux/config
SELINUX=permissive
2、配置聚合连接
(网卡绑定、链路聚合)
HSRP热备份路由协议: 备份网关设备
活跃路由器 备份路由器
虚拟路由器
网卡绑定: 备份网卡
网卡1 :eth1 网卡2 :eth2
虚拟网卡team
建立网卡绑定
虚拟机Server0上
1)建立team虚拟的网卡
参考 man teamd.conf ——
'{"runner":{"name":"activebackup"}}' #热备份
'{"runner":{"name":"roundrobin"}}' #轮询式
nmcli connection add type team
con-name team0 ifname team0 autoconnect yes
config '{"runner": {"name": "activebackup"}}'
建立一个类型为team的网卡,配置文件名字为team0,
ifconfig命令显示的设备名为team0,每次开机自动启动
team运行的模式为热备份方式
# vim /etc/sysconfig/network-scripts/ifcfg-team0
# ifconfig team0
2)添加奴隶
nmcli connection add type team-slave con-name team0-1 ifname eth1 master team0
nmcli connection add type team-slave con-name team0-2 ifname eth2 master team0
添加一个类型为team-slave的成员,配置文件名team0-1,设备为eth1,添加到team0组队中
3)配置IP地址
nmcli connection modify team0
ipv4.method manual ipv4.addresses 192.168.1.1/24
connection.autoconnect yes
4)激活
[[email protected] ~]# nmcli connection up team0
[[email protected] ~]# nmcli connection up team0-1
[[email protected] ~]# nmcli connection up team0-2
[[email protected] ~]# ifconfig team0
5)查看team信息
[[email protected] ~]# teamdctl team0 state
6)配置错误,删除重做
[[email protected] ~]# nmcli connection delete team0
[[email protected] ~]# nmcli connection delete team0-1
[[email protected] ~]# nmcli connection delete team0-2
3、配置IPV6地址
ip地址:唯一标识,网络一个节点的地址
ipv4: 32个二进制 点分4个10进制
ipv6: 128个二进制 以":"分隔8段,每段用16进制表示
案例3:配置IPv6地址
nmcli connection modify 'System eth0'
ipv6.method manual ipv6.addresses 2003:ac18::305/64 connection.autoconnect yes
nmcli connection up 'System eth0'
ping6 2003:ac18::305
配置用户环境(永久别名的定义)
alias别名设置
? 查看已设置的别名
– alias [别名名称]
? 定义新的别名
– alias 别名名称= '实际执行的命令行'
? 取消已设置的别名
– unalias [别名名称]
用户个性化配置文件
? 影响指定用户的 bash 解释环境
– ~/.bashrc,每次开启 bash 终端时生效
全局环境配置
? 影响所有用户的 bash 解释环境
– /etc/bashrc,每次开启 bash 终端时生效
[[email protected] ~]# vim /root/.bashrc #root用户自定义别名
alias hello='echo hi'
[[email protected] ~]# vim /etc/bashrc #所有用户自定义别名
alias myls='ls -ld'
[[email protected] ~]# vim /home/student/.bashrc #student用户
alias hi='echo hello'
[[email protected] ~]# vim /etc/bashrc #所有用户自定义别名
alias qstat='/bin/ps -Ao pid,tt,user,fname,rsz'
4、防火墙策略管理
Web服务器
Server服务端 :服务端软件
客户端:客户端软件,访问服务端资源
1)安装服务端软件httpd(d:daemon 守护进程)
[[email protected] ~]# yum -y install httpd
2)启动httpd服务,设置为开机自起
[[email protected] ~]# systemctl restart httpd
[[email protected] ~]# systemctl enable httpd
3)验证
[[email protected] ~]# firefox http://172.25.0.11
4)书写一个页面
默认网页文件路径:/var/www/html
默认网页文件名称:index.html
[[email protected] ~]# vim /var/www/html/index.html(固定格式)
<marquee><font color=red><h1>hahaxixihehelele
FTP服务器
1)安装服务端软件vsftpd
[[email protected] ~]# yum -y install vsftpd
vsftpd:服务端的包
ftp:客户端的包
2)启动vsftpd服务,设置为开机自起
[[email protected] ~]# systemctl restart vsftpd
[[email protected] ~]# systemctl enable vsftpd
3)验证
[[email protected] ~]# firefox ftp://172.25.0.11
默认的共享路径:/var/ftp
? 系统服务:firewalld
? 管理工具:firewall-cmd、firewall-config
[[email protected] ~]# systemctl restart firewalld
作用:隔离, 严格控制入站请求,放行所有出站
? 根据所在的网络场所区分,预设保护规则集
– public:仅允许访问本机的sshd等少数几个服务
– trusted:允许任何访问
– block:拒绝任何来访请求
– drop:丢弃任何来访的数据包
防火墙判定的规则:
1)客户端数据中的源IP地址,查看所有区域中那个区域有该地址的规则,如果有则进入该区域
2)进入默认区域(管理员可以设置默认区域)
虚拟机server0:
firewall-cmd --get-default-zone #查看默认区域
firewall-cmd --zone=public --list-all #查看区域规则
虚拟机desktop0:
ping -c 2 172.25.0.11 #可以通信
虚拟机server0:
firewall-cmd --get-default-zone #查看默认区域
firewall-cmd --set-default-zone=block #修改默认区域
firewall-cmd --get-default-zone
虚拟机desktop0:
ping -c 2 172.25.0.11 #不能通信,当可以收到回应
虚拟机server0:
firewall-cmd --set-default-zone=drop #修改默认区域
firewall-cmd --get-default-zone #查看默认区域
虚拟机desktop0:
ping -c 2 172.25.0.11 #不能通信,没有回应
虚拟机server0:
firewall-cmd --set-default-zone=public
firewall-cmd --get-default-zone
firewall-cmd --zone=public --list-all #查看区域策略
firewall-cmd --zone=public --add-service=http #添加服务
虚拟机desktop0:
firefox http://172.25.0.11 #可以访问
firefox ftp://172.25.0.11 #不可以访问
虚拟机server0:
firewall-cmd --zone=public --list-all #查看区域策略
firewall-cmd --zone=public --add-service=ftp #添加服务
虚拟机desktop0:
firefox http://172.25.0.11 #可以访问
firefox ftp://172.25.0.11 #可以访问
永久配置(permanent)
虚拟机server0:
firewall-cmd --reload #重新加载防火墙配置
firewall-cmd --zone=public --list-all #查看防火器规则
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --zone=public --list-all #查看防火器规则
firewall-cmd --reload #重新加载防火墙配置
firewall-cmd --zone=public --list-all
实现本机的端口映射
? 本地应用的端口重定向(端口1 --> 端口2)
– 从客户机访问 端口1 的请求,自动映射到本机 端口2
– 比如,访问以下两个地址可以看到相同的页面:
从客户机访问 ------》172.25.0.11:5423-----------》172.25.0.11:80
虚拟机Server0
firewall-cmd --permanent --zone=public --add-forward-port=port=5423:proto=tcp:toport=80
firewall-cmd --add-source=ip/24 --zone=block
firewall-cmd --reload
firewall-cmd --zone=public --list-all
虚拟机Desktop0:
firefox http://172.25.0.11:5423
删除:
[[email protected] ~]# firewall-cmd --permanent --remove-service=http
[[email protected] ~]# firewall-cmd --permanent --zone=public --remove-service=ftp
[[email protected] ~]# firewall-cmd --reload
修改两台虚拟机防火墙默认区域为trusted:
[[email protected] ~]# firewall-cmd --set-default-zone=trusted
[[email protected] ~]# firewall-cmd --set-default-zone=trusted
1、samba
Samba共享服务,跨平台的共享(Windows与Linux)
– 用途:为客户机提供共享使用的文件夹
– 协议:SMB(TCP 139)、CIFS(TCP 445)
? 所需软件包:samba
? 系统服务:smb
? Samba用户 —— 专用来访问共享文件夹的用户
– 采用独立设置的密码
– 但需要提前建立同名的系统用户(可以不设密码)
? 使用 pdbedit 管理工具
– 添加用户:pdbedit -a 用户名
– 查询用户:pdbedit -L [用户名]
– 删除用户:pdbedit -x 用户名
? 修改 /etc/samba/smb.conf
[自定共享名]
path = 文件夹绝对路径
; public = no|yes //默认no
; browseable = yes|no //默认yes
; read only = yes|no //默认yes
; write list = 用户1 .. .. //默认无
; valid users = 用户1 .. .. //默认任何用户
; hosts allow = 客户机地址 .. ..
; hosts deny = 客户机地址 .. ..
装包、配置(修改主配置文件)、起服务
实验1:通过samba发布共享目录,并满足以下条件
共享名称和共享目录为/common;工作组为STAFF;
允许172.25.0.0网段访问;用户harry能够读取共享中的内容
在服务端Server0上的操作:
1.安装samba软件,服务端软件
2.建立Samba账户
[[email protected] ~]# useradd -s /sbin/nologin harry
[[email protected] ~]# pdbedit -a harry #添加设置Samba帐号
[[email protected] ~]# pdbedit -L #查看所有Samba账户
3.修改 /etc/samba/smb.conf(vim命令模式,/workgroup 全文查找)
[[email protected] ~]# mkdir /common #创建共享目录
[[email protected] ~]# echo 123 > /common/a.txt #创建测试文件
[[email protected] ~]# ls /common
[[email protected] ~]# vim /etc/samba/smb.conf
.......
workgroup = STAFF #设置工作组
.......
[common] #设置共享名
path = /common #设置共享的实际路径
hosts allow = 172.25.0.0/24 #允许这个网段的访问
4.启动smb服务,设置为开机自起
[[email protected] ~]# systemctl restart smb
[[email protected] ~]# systemctl enable smb
在客户端Desktop0上的操作
1.安装软件包:samba-client
2.列出共享资源
– smbclient -L 服务器地址
[[email protected] ~]# smbclient -L 172.25.0.11
Enter root's password: 直接回车
3.连接到共享文件夹
– smbclient -U 用户名 //服务器地址/共享名
[[email protected] ~]# smbclient -U harry //172.25.0.11/common
Enter harry's password: 输入密码123
Domain=[STAFF] OS=[Unix] Server=[Samba 4.1.1]
smb: \>ls
NT_STATUS_ACCESS_DENIED listing \* #权限不够访问被拒
客户端访问服务端资源
1.服务端,服务的访问控制
2.服务端,防火墙
3.服务端,SELinux策略
4.服务端,本地权限
SELinux策略,布尔值(开启或关闭)
虚拟机Server0:开启SELinux功能的开关
? getsebool 查看 SELinux 开关
[[email protected] ~]# getsebool -a | grep samba
samba_export_all_ro --> off
samba_export_all_rw --> off
? setsebool 控制 SELinux 开关
– 需要加 -P 选项才能实现永久设置
[[email protected] ~]# setsebool samba_export_all_ro on #开启可读权限
[[email protected] ~]# getsebool -a | grep samba
客户端Desktop方便的访问
[[email protected] ~]# mkdir /mnt/nsd01
[[email protected] ~]# ls /mnt/nsd01
安装一个可以支持挂载Samba的软件cifs-utils
[[email protected] ~]# yum -y install cifs-utils
mount -o username=harry,password=123 //172.25.0.11/common /mnt/nsd01/ #手动挂载
df -h
完成开机自动挂载
_netdev:在开机启动时,先启动完网络服务,在挂载该设备
[[email protected] ~]# vim /etc/fstab
//172.25.0.11/common /mnt/nsd01 cifs username=harry,password=123,_netdev 0 0
[[email protected] ~]# mount -a
[[email protected] ~]# df -h
[[email protected] ~]# touch /mnt/samba/d.txt
touch: 无法创建"/mnt/samba/d.txt": 权限不够
实验2:完成读写的Samba共享
服务端Server0
1.安装samba软件,服务端软件
2.建立Samba账户
[[email protected] ~]# useradd -s /sbin/nologin chihiro
[[email protected] ~]# useradd -s /sbin/nologin kenji
[[email protected] ~]# pdbedit -a chihiro
[[email protected] ~]# pdbedit -a kenji
3.修改配置文件/etc/samba/smb.conf
[[email protected] ~]# mkdir /devops
[[email protected] ~]# touch /devops/b.txt
[[email protected] ~]# vim /etc/samba/smb.conf
[devops]
path = /devops
write list = chihiro #允许chihiro可以写
4.重起smb服务
5.修改SELinux开关
[[email protected] ~]# getsebool -a | grep samba
[[email protected] ~]# setsebool samba_export_all_rw on
[[email protected] ~]# getsebool -a | grep samba
6.赋予chihiro本地权限
[[email protected] ~]# setfacl -m u:chihiro:rwx /devops/
[[email protected] ~]# getfacl /devops/
客户端Desktop完成开机自动挂载
[[email protected] ~]# mkdir /mnt/nsd02
[[email protected] ~]# vim /etc/fstab
//172.25.0.11/devops /mnt/nsd02 cifs username=chihiro,password=123,_netdev 0 0
[[email protected] ~]# mount -a
[[email protected] ~]# df -h
[[email protected] ~]# touch /mnt/samba/d.txt #成功
multiuser机制(多用户的Samba挂载)
– multiuser,提供对客户端多个用户身份的区分支持
– sec=ntlmssp,提供NT局域网管理安全支持
客户端Desktop完成开机自动挂载
[[email protected] /]# vim /etc/fstab (man mount.cifs)
//172.25.0.11/devops /mnt/nsd02 cifs username=kenji,password=123,_netdev,multiuser,sec=ntlmssp 0 0
[[email protected] /]# umount /mnt/nsd02
[[email protected] /]# mount -a
[[email protected] /]# df -h
[[email protected] /]# su - student
[[email protected] ~]$ cifscreds add -u chihiro 172.25.0.11
[[email protected] ~]$ touch /mnt/nsd02/10.txt #成功
[[email protected] ~]$ ls /mnt/nsd02
[[email protected] ~]$ exit
Sticky Bit
? 附加在其他人的 x 位上
– 其他人的权限标识会变为 t
– 适用于开放 w 权限的目录,可以阻止用户滥用 w 写入
权限(禁止操作别人的文档)
[[email protected] ~]# mkdir /public
[[email protected] ~]# chmod u=rwx,g=rwx,o=rwx /public
[[email protected] ~]# ls -ld /public
[[email protected] ~]# chmod o+t /public
[[email protected] ~]# ls -ld /public
服务端:netstat -antp | grep smb
mount error 13 :permission deny 用户名密码不一致
修改两台虚拟机防火墙默认区域为trusted
[[email protected] ~]# firewall-cmd --set-default-zone=trusted
[[email protected] ~]# firewall-cmd --set-default-zone=trusted
1、NFS共享服务(Linux与Linux)
普通NFS服务
? Network File System,网络文件系统
– 用途:为客户机提供共享使用的文件夹
– 协议:NFS(TCP/UDP 2049)、RPC(TCP/UDP 111)
? 所需软件包:nfs-utils
? 系统服务:nfs-server
? 列出有哪些NFS共享资源
– showmount -e 服务器地址
? 手动挂载NFS共享
– mount 服务器地址:文件夹路径 挂载点
? 开机挂载配置 /etc/fstab
– 服务器地址:文件夹路径 挂载点 nfs _netdev 0 0
服务端:Server0
1.安装服务端软件包,nfs-utils
2.修改 /etc/exports
文件夹路径 客户机地址(权限)
[[email protected] ~]# mkdir /public
[[email protected] ~]# echo 123 > /public/123.txt
[[email protected] ~]# vim /etc/exports
/public 172.25.0.0/24(ro) #只读
3.重起服务
[[email protected] ~]# systemctl restart nfs-server
[[email protected] ~]# systemctl enable nfs-server
客户端:Desktop0 (vim命令模式下,按o可以另起一行进入插入模式)
[[email protected] ~]# showmount -e 172.25.0.11 #查看共享
[[email protected] ~]# mkdir /mnt/nfs01
[[email protected] ~]# vim /etc/fstab
172.25.0.11:/public /mnt/nfs01 nfs _netdev 0 0
[[email protected] ~]# mount -a
[[email protected] ~]# df -h
安全的NFS服务(必须还原所有classroom、server、desktop的环境)
1.还原所有classroom、server、desktop
2.修改两台虚拟机server、desktop防火墙默认区域为trusted
[[email protected] ~]# firewall-cmd --set-default-zone=trusted
[[email protected] ~]# firewall-cmd --set-default-zone=trusted
3.实现用户统一
– 结合 LDAP + kerberos 技术,实现认证和加密支持
– 同一个 kerberos 领域内,认证用密码
[[email protected] ~]# lab nfskrb5 setup #加入 LDAP+kerberos (提前做好的命令)
[[email protected] ~]# lab nfskrb5 setup #加入 LDAP+kerberos
4.验证:
[[email protected] ~]# id ldapuser10
[[email protected] ~]# id ldapuser10
搭建安全的NFS服务
服务端Server
1.部署与kerberos通信加密的密钥
wget http://classroom/pub/keytabs/server0.keytab -O /etc/krb5.keytab
2.配置NFS读写的共享
[[email protected] ~]# mkdir /nsd
[[email protected] ~]# touch /nsd/123.txt
[[email protected] ~]# vim /etc/exports
/nsd 172.25.0.0/24(rw,sec=krb5p)
3.必须同时重起服务nfs-server、nfs-secure-server
# systemctl restart nfs-server nfs-secure-server
4.为了做题,让ldapuser0具备写权限,赋予他本地的写权限
# setfacl -m u:ldapuser0:rwx /nsd
客户端Desktop:
1.部署与kerberos通信加密的密钥
wget http://classroom/pub/keytabs/desktop0.keytab -O /etc/krb5.keytab
2.修改/etc/fstab开机自动挂载配置文件
[[email protected] ~]# mkdir /mnt/test
[[email protected] ~]# vim /etc/fstab
172.25.0.11:/nsd /mnt/test nfs _netdev,sec=krb5p 0 0
重起客户端nfs加密服务
[[email protected] ~]# systemctl restart nfs-secure
[[email protected] ~]# mount -a
[[email protected] ~]# df -h
3.验证ldapuser0是否有写权限:
[[email protected] ~]# ssh [email protected]
[email protected]'s password: 密码为 kerberos
[[email protected] test]$ cd /mnt/test
[[email protected] test]$ touch ldapuser0.txt
chown ldapuserX /protected/project/
[[email protected] ~]# chown ldapuser0 /protected/project/
修改两台虚拟机防火墙默认区域为trusted
[[email protected] ~]# firewall-cmd --set-default-zone=trusted
[[email protected] ~]# firewall-cmd --set-default-zone=trusted
1、parted
划分分区的指令:parted (专门做大空间划分 2T)
GPT: 突破了4个主分区限制,可以有128主分区
[[email protected] ~]# parted /dev/vdb
(parted) print #输出分区表
(parted) mktable gpt #设置分区模式为GPT
(parted) mkpart #划分新的分区
分区名称? []? haha #分区名称随便起:
文件系统类型? [ext2]? ext4 #文件系统不起作用
起始点? 0 #上一个分区的结束,是下一个分区的开始
结束点? 2G
忽略/Ignore/放弃/Cancel? Ignore #忽略,分区表信息会占用一部分空间
(parted) print #输出分区表
(parted) quit
[[email protected] ~]# ls /dev/vdb1
非交互式分区
parted -s /dev/vdc mklabel gpt
parted -s /dev/vdc mkpart primary 0G 10240M
mkfs.ext4 /dev/vdc1
2、iSCSI网络磁盘
? Internet SCSI,网际SCSI接口
– 一种基于C/S架构的虚拟磁盘技术
– 服务器提供磁盘空间,客户机连接并当成本地磁盘使用
服务端思路:
1.划分分区
2.运行targetcli命令
------>建立后端存储
------>建立共享磁盘起名
------>关系将共享磁盘名字与后端存储联系起来
------>做ACL 允许客户端通过那个名字来访问
------>启用端口和IP
? ISCSI Qualified Name 名称规范
– iqn.yyyy-mm.倒序域名:自定义标识
– 用来识别 target 磁盘组,也用来识别客户机身份
服务端server0:
1.服务端软件,targetcli
2.运行targetcli命令进行配置
[[email protected] ~]# targetcli
/> ls
/> backstores/block create nsd /dev/vdb1 #创建后端存储并起名
/> iscsi/ create iqn.2017-12.com.example:server0 #为共享磁盘起名
/> iscsi/iqn.2017-12.com.example:server0/tpg1/luns create /backstores/block/nsd #关联后端存储
/> iscsi/iqn.2017-12.com.example:server0/tpg1/acls create iqn.2017-12.com.example:desktop0 #设置客户端名称
/> iscsi/iqn.2017-12.com.example:server0/tpg1/portals create 172.25.0.11 #启用端口与IP
Using default IP port 3260
Created network portal 172.25.0.11:3260.
/> saveconfig //保存配置结果(缺省
/> exit
3.重起服务,设置为开机自起
[[email protected] ~]# systemctl restart target
[[email protected] ~]# systemctl enable target
客户端desktop0:
1.安装一个客户端软件
[[email protected] ~]# yum repolist
[[email protected] ~]# yum -y install iscsi-initiator-utils.i686
2.指定客户端自称的名字
[[email protected] ~]# vim /etc/iscsi/initiatorname.iscsi
#指明访问服务端,客户端自称的名字,是服务端ACL指定的名称
InitiatorName=iqn.2017-12.com.example:desktop0
[[email protected] ~]# systemctl restart iscsid
3.发现服务端位置
[[email protected] ~]# man iscsiadm
[[email protected] ~]# iscsiadm --mode discoverydb --type sendtargets --portal 172.25.0.11 --discover
[[email protected] ~]# iscsiadm -m discovery -t st -p serverX //发现磁盘
[[email protected] ~]# iscsiadm -m node -L all //连接磁盘
[[email protected] ~]# vim /var/lib/iscsi/nodes/iqn.2016-02.com.example\:server0/*/default
node.conn[0].startup = automatic
//把 manual 改成 automatic
.. ..
[[email protected] ~]# systemctl enable iscsid
//将 iscsi 服务设开机自启
4.加载共享存储
[[email protected] ~]# lsblk
[[email protected] ~]# systemctl restart iscsi
[[email protected] ~]# systemctl daemon-reload
[[email protected] ~]# systemctl restart iscsi
[[email protected] ~]# systemctl enable iscsi
[[email protected] ~]# lsblk
5.开机自动挂载
[[email protected] ~]# lsblk //确认多出的磁盘,比如/dev/sda
[[email protected] ~]# fdisk /dev/sda
Command (m for help): n // n 新建分区
[[email protected] ~]# partprobe /dev/sda //刷新分区表
[[email protected] ~]# mkfs.ext4 /dev/sda1 //按要求格式化分区
[[email protected] ~]# mkdir /mnt/data //创建挂载点
[[email protected] ~]# blkid /dev/sda1 //找到分区 UUID
/dev/sda1: UUID="6ff20bb3-7543-4fa0-b4fa-bdc99a1e63ce" .. ..
[[email protected] ~]# vim /etc/fstab
UUID="6ff20bb3-7543-4fa0-b4fa-bdc99a1e63ce" /mnt/data ext4 _netdev 0 0
[[email protected] ~]# mount -a
[[email protected] ~]# sync ; reboot -f //先存盘再强制重启,避免关机卡死
客户端:刷新/etc/iscsi/initiatorname.iscsi文件的服务
[[email protected] ~]# systemctl restart iscsid
[[email protected] ~]# systemctl restart iscsi
3、MariaDB数据库
database:数据库
什么是数据库
? DB,数据库:一批数据的集合,主流的数据库多用来存放关系型表格数据
虚拟机Server:安装MariaDB数据库
[[email protected] ~]# yum -y install mariadb-server
MariaDB数据库 ,端口:3306
启动数据库服务
[[email protected] ~]# systemctl restart mariadb
[[email protected] ~]# systemctl enable mariadb
MariaDB数据库基本操作
[[email protected] ~]# mysql #默认没有密码
MariaDB [(none)]> show databases; #查看所有库
MariaDB [(none)]> create database nsd1710; #创建库
MariaDB [(none)]> show databases;
MariaDB [(none)]> drop database nsd1710; #删除库
MariaDB [(none)]> show databases;
MariaDB [(none)]> quit
设置MariaDB数据库管理员的密码
数据库管理员名:root MariaDB数据库 mysql-----》user
系统管理员名:root /etc/passwd
– mysqladmin [-u用户名] [-p[旧密码]] password '新密码'
[[email protected] ~]# mysqladmin -u root password '123'
[[email protected] ~]# mysql -u root -p
Enter password: 输入密码
[[email protected] ~]# mysql -u root -p123 #非交互输入密码进入
? 禁止监听,只服务于本机
[[email protected] ~]# vim /etc/my.cnf
[mysqld]
skip-networking //跳过网络监听,数据库只能被 localhost 访问
.. ..
[[email protected] ~]# systemctl restart mariadb
– 使用/选择数据库:USE 数据库名;
– 列出库里有哪些表:SHOW TABLES;
[[email protected] ~]# mysql -u root -p123
MariaDB [mysql]> show databases;
MariaDB [mysql]> use mysql;
MariaDB [mysql]> show tables;
MariaDB [mysql]> create database nsd1710;
MariaDB [mysql]> show databases;
在虚拟机Server0上操作:下载事先备份好的数据库文件
wget http://classroom/pub/materials/users.sql
导入数据到数据库中
[[email protected] ~]# mysql -u root -p123 nsd1710 < users.sql
[[email protected] ~]# mysql -u root -p123
MariaDB [(none)]> use nsd1710;
MariaDB [nsd1710]> show tables;
查询数据库中表记录
select 表字段 from 库.表名
select * from nsd1710.base;
MariaDB [nsd1710]> select * from location;
MariaDB [nsd1710]> select * from base;
增 insert
删 delete
改 update
查 select
有条件的查询
1.在base表中查询密码为123的用户的名字?
[[email protected] ~]# mysql -u root -p123
MariaDB [(none)]> use nsd1710;
MariaDB [nsd1710]> show tables;
> select * from base where password='123';
> select name,password from base where password='123';
> select name from base where password='123';
> select id,name from base;
并使用相 应的 SQL 查询以回答下列问题:
1)密码是 solicitous 的人的名字?
> select name from base where password='solicitous';
2)有多少人的姓名是 Barbara 同时居住在 Sunnyvale?
> select * from base,location where base.name='Barbara' and location.city='Sunnyvale' and base.id=location.id;
> select count(*) from base,location where base.name='Barbara' and location.city='Sunnyvale' and base.id=location.id;
> insert base values (6,'Barbara','321'); #插入表记录
> insert location values (6,'Sunnyvale'); #插入表记录
> select * from base;
> select * from location ;
> select * from base,location where base.name='Barbara' and location.city='Sunnyvale' and base.id=location.id;
数据库授权
– 除了 root 用户,此nsd1710数据库只能被用户 lisi 查询,此用户的密码为123
MariaDB数据库 mysql-----》user
– GRANT 权限列表 ON 数据库名.表名 TO 用户名@ 客户机地址 IDENTIFIED BY '密码';
[[email protected] ~]# mysql -u root -p123
grant select on nsd1710.* to [email protected] identified by '123';
当lisi从本地localhost登陆,输入密码123.将会获得nsd1710库中所有表的查询的权限
验证:测试lisi登陆
[[email protected] ~]# mysql -u lisi -p123
DELETE 删除表记录
? MariaDB [(none)]> 交互指令
– DELETE FROM [数据库.]表名 WHERE 条件语句;
1. 禁止空密码root用户访问 mariadb 数据库
[[email protected] ~]# mysql -u root -p123
> use mysql;
> select user,host,password from user;
> select user,host,password from user where password='';
> delete from user where password='';
> select user,host,password from user;
刷新user表的记录:
MariaDB [(none)]> flush privileges;
修改两台虚拟机防火墙默认区域为trusted
[[email protected] ~]# firewall-cmd --set-default-zone=trusted
[[email protected] ~]# firewall-cmd --set-default-zone=trusted
1、web
案例1搭建基本的Web服务
? 基于 B/S (Browser/Server)架构的网页服务
– 服务端提供网页
– 浏览器下载并显示网页
? Hyper Text Markup Language,超文本标记语言
? Hyper Text Transfer Protocol,超文本传输协议
装包、起服务
服务端:Server
1. 安装软件httpd
2. 启动httpd服务,设置开机自起
默认网页文件的位置:/var/www/html/index.html
3. 书写一个页面文件
# echo '<h1>My First Web' > /var/www/html/index.html
客户端:Desktop
#前提:真机所有浏览器关闭
1.测试访问:firefox 172.25.0.11
2.测试访问:命令行测试工具
[[email protected] ~]# yum -y install elinks
[[email protected] ~]# elinks -dump 172.25.0.11
设置Web的域名
DNS服务器:classroom.example.com
server0.example.com
www0.example.com
webapp0.example.com
虚拟机Server0:
1.修改配置文件/etc/httpd/conf/httpd.conf
#补充vim 命令模式 /ServerName 全文查找ServerName 按n、N跳转
#将开头的‘#’去掉
ServerName server0.example.com:80
2.重起httpd服务
虚拟机desktop0:
测试:elinks -dump server0.example.com
DocumentRoot:网页根目录(/var/www/html)
虚拟机Server0:
1.修改配置文件/etc/httpd/conf/httpd.conf
#补充vim 命令模式 /Doc 全文查找Doc 按n、N跳转
DocumentRoot "/var/www/myweb"
2.创建目录/var/www/myweb,重起httpd服务
3.书写新的测试页面
[[email protected] ~]# echo woshi myweb > /var/www/myweb/index.html
虚拟机desktop0:
测试:elinks -dump server0.example.com
服务端与客户端路径的对照:
客户端: elinks -dump server0.example.com
服务端: /var/www/myweb
客户端: elinks -dump server0.example.com/abc
服务端: /var/www/myweb/abc
客户端: server0.example.com/abc/private
服务端: /var/www/myweb/abc/private
虚拟Web主机
一台服务器,提供多个不同的Web站点
? 区分方式
– 基于域名的虚拟主机
– 基于端口的虚拟主机
– 基于IP地址的虚拟主机
案例2基于域名的虚拟主机
一旦启用 虚拟Web主机功能,所有的站点都必须用虚拟Web主机来实现
/etc/httpd/conf.d/*.conf
? 为每个虚拟站点添加配置
<VirtualHost IP地址:端口>
ServerName 此站点的DNS名称
DocumentRoot 此站点的网页根目录
</VirtualHost>
#帮助文档 /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf
虚拟机Server0:
[[email protected] ~]# vim /etc/httpd/conf.d/nsd01.conf #调用配置
<VirtualHost *:80> #虚拟Web主机开始
DocumentRoot /var/www/qq #指定网页文件根目录
ServerName www0.example.com #指定域名
</VirtualHost> #虚拟Web主机结束
<VirtualHost *:80>
DocumentRoot /var/www/baidu
ServerName webapp0.example.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/myweb
ServerName server0.example.com
</VirtualHost>
[[email protected] virtual]# httpd -t #确保语法检查OK
Syntax OK
[[email protected] ~]# mkdir /var/www/qq #建立相应的网页目录
[[email protected] ~]# mkdir /var/www/baidu #建立相应的网页目录
[[email protected] ~]# echo QQ > /var/www/qq/index.html
[[email protected] ~]# echo baidu > /var/www/baidu/index.html
[[email protected] ~]# systemctl restart httpd
案例3实现httpd访问控制,实现仅本机访问页面
? 使用 <Directory> 配置区段
– 每个文件夹自动继承其父目录的ACL访问权限
– 除非针对子目录有明确设置
<Directory 目录的绝对路径>
.. ..
Require all denied|granted
Require ip IP或网段地址 .. ..
</Directory>
虚拟机Server:
1.建立目录
# mkdir /var/www/myweb/private
2.写入网页文件
# echo woshi private > /var/www/myweb/private/index.html
测试:
虚拟机Server: elinks -dump server0.example.com/private
虚拟机Desktop: elinks -dump server0.example.com/private
3.实现httpd服务访问控制
[[email protected] ~]# vim /etc/httpd/conf.d/nsd02.conf
<Directory "/var/www/myweb/private">
Require ip 127.0.0.1 172.25.0.11
</Directory>
4.重起httpd服务
测试:
虚拟机Server: elinks -dump server0.example.com/private #可以
虚拟机Desktop: elinks -dump server0.example.com/private #失败
SELinux 安全上下文(标签)
? 方式1:参照标准目录,重设新目录的属性
– chcon [-R] --reference=模板目录 新目录
案例4:使用自定Web根目录
调整 Web 站点 http://server0.example.com 的网页
目录,要求如下:
1)新建目录 /webroot,作为此站点新的网页目录
[[email protected] ~]# mkdir /webroot
[[email protected] ~]# echo woshi webroot > /webroot/index.html
[[email protected] ~]# vim /etc/httpd/conf.d/nsd01.conf
<VirtualHost *:80>
DocumentRoot /webroot
ServerName server0.example.com
</VirtualHost>
[[email protected] ~]# vim /etc/httpd/conf.d/nsd02.conf
<Directory "/webroot">
Require all granted
</Directory>
[[email protected] ~]# ls -Zd /var/www
[[email protected] ~]# ls -Zd /webroot
[[email protected] ~]# chcon -R --reference=/var/www /webroot/
[[email protected] ~]# ls -Zd /webroot
[[email protected] ~]# systemctl restart httpd
cp会继承标签值,mv不会继承: 尽量用cp
案例5部署动态Web站点
1.在虚拟机Server上,下载动态页面(Python页面)
# wget http://classroom/pub/materials/webinfo.wsgi
# cat webinfo.wsgi
2.在虚拟机Server上,放入webapp0.example.com默认网页根目录
[[email protected] ~]# vim /etc/httpd/conf.d/nsd01.conf
[[email protected] ~]# cp webinfo.wsgi /var/www/baidu/
[[email protected] ~]# ls /var/www/baidu/
3.安装Python程序,解析识别 Python页面
[[email protected] ~]# yum -y install mod_wsgi
4.Desktop测试:
# elinks -dump webapp0.example.com/webinfo.wsgi
# 可以看到Python代码
5.方便访问,让客户端访问webapp0.example.com可以直接看到 Python页面
虚拟机Server0上:网页跳转(网页别名)
[[email protected] ~]# vim /etc/httpd/conf.d/nsd01.conf
<VirtualHost *:80>
DocumentRoot /var/www/baidu
ServerName webapp0.example.com
alias / /var/www/baidu/webinfo.wsgi
</VirtualHost>
[[email protected] ~]# systemctl restart httpd
6. 客户端测试访问
[[email protected] ~]# elinks -dump webapp0.example.com
7. 程序 Python 的翻译
虚拟机Server0上:
[[email protected] ~]# vim /etc/httpd/conf.d/nsd01.conf
<VirtualHost *:80>
DocumentRoot /var/www/baidu
ServerName webapp0.example.com
wsgiscriptalias / /var/www/baidu/webinfo.wsgi
</VirtualHost>
[[email protected] ~]# systemctl restart httpd
8. 客户端测试访问
[[email protected] ~]# elinks -dump webapp0.example.com
9.此webapp0.example.com侦听在端口8909
虚拟机Server0上:
[[email protected] ~]# vim /etc/httpd/conf.d/nsd01.conf
Listen 8909
<VirtualHost *:8909>
DocumentRoot /var/www/baidu
ServerName webapp0.example.com
WsgiScriptAlias / /var/www/baidu/webinfo.wsgi
</VirtualHost>
显示SELinux开放的所有接口
[[email protected] ~]# semanage port -l
[[email protected] ~]# semanage port -l | grep http
[[email protected] ~]# semanage port -a -t http_port_t -p tcp 8909
-a :添加
-t:类型
-p:协议
[[email protected] ~]# systemctl restart httpd
[[email protected] ~]# elinks -dump webapp0.example.com:8909
需要注意的是,原始的独立站点可能出现异常,访问时并不是原始的网页:
[[email protected] ~]# elinks -dump http://server0.example.com/
Virtual Site.
原因是一旦启用虚拟站点机制以后:
外部的 DocumentRoot、ServerName 会被忽略
第1个虚拟站点被视为默认站点,若客户机请求的URL不属于任何已知站点,则由第1个站点响应
修改两台虚拟机防火墙默认区域为trusted
[[email protected] ~]# firewall-cmd --set-default-zone=trusted
[[email protected] ~]# firewall-cmd --set-default-zone=trusted
1、搭建安全的Web服务
http------》https
1.安装,实现Web加密传输的软件
[[email protected] ~]# yum -y install mod_ssl
[[email protected] ~]# ls /etc/httpd/conf.d/
autoindex.conf README userdir.conf
nsd01.conf ssl.conf welcome.conf
2.部署网站数字证书(营业执照)
cd /etc/pki/tls/certs/
wget http://classroom/pub/tls/certs/server0.crt
3.部署网站根证书(公安局信息)
cd /etc/pki/tls/certs/
wget http://classroom/pub/example-ca.crt
4.部署私钥(用于解密)
cd /etc/pki/tls/private/
wget http://classroom/pub/tls/private/server0.key
5.修改配置文件/etc/httpd/conf.d/ssl.conf
vim /etc/httpd/conf.d/ssl.conf
补充:vim 末行模式 :set nu 添加行号
59 DocumentRoot "/var/www/html" #去掉注释
60 ServerName server0.example.com:443 #去掉注释,修改域名
指定网站证书位置及名称
100 SSLCertificateFile /etc/pki/tls/certs/server0.crt
指定私钥位置及名称
107 SSLCertificateKeyFile /etc/pki/tls/private/server0.key
指定根证书位置及名称
122 SSLCACertificateFile /etc/pki/tls/certs/example-ca.crt
6.重起httpd服务
7.Desktop验证:
[[email protected] ~]# firefox https://server0.example.com
点击: 我以了解安全的风险
添加例外
确认安全例外
2、配置邮件服务器
? 电子邮件服务器的基本功能
– 为用户提供电子邮箱存储空间(用户名@邮件域名)
– 处理用户发出的邮件 —— 传递给收件服务器
– 处理用户收到的邮件 —— 投递到邮箱
SMTP(发邮件的协议 端口:25)
pop3(收邮件的协议 端口:110)
DNS:classrom.example.com
server0.example.com
虚拟机Server0
1.安装postfix,提供邮件功能的软件
2.建立邮件账户,邮件服务器上本地用户
[[email protected] /]# useradd -s /sbin/nologin yg
[[email protected] /]# useradd -s /sbin/nologin xln
[[email protected] /]# echo 123 | passwd --stdin yg
[[email protected] /]# echo 123 | passwd --stdin xln
3.配置邮件服务器 /etc/postfix/main.cf
[[email protected] /]# vim /etc/postfix/main.cf
99 myorigin = server0.example.com #默认补全的邮件域名后缀
116 inet_interfaces = all #允许所有的网络接口 监听接口
164 mydestination = server0.example.com #判断为本域邮件
myhostname #本服务器主机名称
relayhost #目标邮件服务器
4.重起postfix服务
[[email protected] /]# systemctl restart postfix
测试:
使用mail命令发信/收信
? mail 发信操作
– mail -s '邮件标题' -r 发件人 收件人
非交互式使用:
echo abc | mail -s 'first' -r
? mail 收信操作
– mail [-u 用户名]
[[email protected] /]# mail -s 'test01' -r yg xln
AAAAAAAAAAAAAA
BBBBBBBBBBBBBB
.
EOT
[[email protected] /]# mail -u xln
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/mail/xln": 1 message 1 new
>N 1 [email protected] Tue Dec 5 14:18 19/598
& 1
nullclient邮件服务(邮件空客户端)
? nullclient,空客户端
– 不提供任何邮箱账号,因此不需要投递邮件
– 但是可以为用户代发邮件
1.把Desktop配置成邮件服务器
[[email protected] ~]# lab smtp-nullclient setup
2.配置Server为邮件空客户端
[[email protected] /]# vim /etc/postfix/main.cf
– 所发出的邮件显示来自于 desktop0.example.com
99 myorigin = desktop0.example.com
116 inet_interfaces = localhost
164 mydestination =
317 relayhost = [172.25.0.10] #将邮件移交给那台服务器
3.重起postfix服务
[[email protected] /]# systemctl restart postfix
验证:
在Server上发一封邮件,给本地的Student
[[email protected] /]# mail -s 'test02' -r yg student
abc
.
EOT
到Desktop:最终由Desktop上的student收到
[[email protected] /]# mail -u student
inet_interfaces = loopback-only //仅本机
mynetworks = 127.0.0.0/8 [::1]/128 //信任网络
local_transport = error:local delivery disabled //返回错误信息给客户端
以上是关于Linux学习之Engineer的主要内容,如果未能解决你的问题,请参考以下文章