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

– 比如,访问以下两个地址可以看到相同的页面:

http://172.25.0.11:5423/

http://172.25.0.11/

从客户机访问 ------》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


Day-02

修改两台虚拟机防火墙默认区域为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.confvim命令模式,/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  用户名密码不一致


Day-03

修改两台虚拟机防火墙默认区域为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/


Day-04

修改两台虚拟机防火墙默认区域为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;


Day-05

修改两台虚拟机防火墙默认区域为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个站点响应


Day-06

修改两台虚拟机防火墙默认区域为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的主要内容,如果未能解决你的问题,请参考以下文章

Linux菜鸟的学习之法--纯属个人意见

Linux学习-kubernetes学习之kubectl命令

Linux学习-Docker学习之私有Registry

Linux学习之iptables

Linux快速入门打开你的学习之道

linux_学习之vim的学习