RHCSA实验总结-点击跳转
RHCE实验
RHCE这边我简单分了下类:
## 网络与安全
1. IPv6 设置(推荐使用GUI程序 nm-connection-editor来完成)
2. team 聚合设置
3. 防火墙端口过滤
4. 防火墙端口转发
## 网络共享服务
6. iSCSI 服务 7. nfs/smb 挂载 7.1 kerbose验证的nfs 7.2 samba多用户挂载 ## web服务 8. https, wsgi服务器 9. http 虚拟主机 ## db服务 11. mariadb 数据库 ## 其他 7. shell 脚本 10. smtp 邮件服务
提供Apache HTTPD Web服务
成果:
TLS虚拟主机,在https://webapp0.example.com 域中提供Python WSGI Web应用程序
准备:
1、开始前重置server和desktop虚机: rht-vmctl reset desktop rht-vmctl reset server
2、在server上执行实验初始化脚本: lab webapp setup
需求和资料:
您的开发者正在处理一个使用Python编写并基于Web的新应用程序。他们要求您在server0上配置httpd服务以使用TLS加密在https://webapp0.example.com域中运行此应用程序
要配置应用程序,您将需要以下信息
文件 | 下载位置 |
TLS证书 | http://classroom/pub/tls/certs/webapp0.crt |
TLS私钥 | http://classroom/pub/tls/private/webapp0.key |
TLS CA证书 | http://classroom/pub/example-ca.crt |
Python应用程序 | /home/student/webapp.wsgi |
验证:
在desktop虚机上运行:lab webapp grade
需求分析拆解:
1、安装支持httpd、TLS、WSGI的所需软件包
2、下载创建一个目录并把应用程序复制到这个目录,后续httpd访问它提供服务
3、下载配置证书和秘钥
4、配置httpd基于TLS的新虚机主机,并配置域名/访问web应用程序,并使用之前下载的证书和秘钥
5、启动并启用web服务支持TLS的web服务可以被外部访问
6、从desktop上测试是否可以通过httpd正常访问到web应用程序
7、在desktop上执行 lab webapp grade验证
具体实验步骤:
1、安装支持httpd、TLS、WSGI的所需软件包 [root@server0 ~]# yum -y install httpd mod_ssl mod_wsgi 2、下载创建一个目录并把应用程序复制到这个目录,后续httpd访问它提供服务 2.1、创建目录 [root@server0 srv]# mkdir -p /srv/webapp0/www [root@server0 srv]# rsync -avgp /home/student/webapp.wsgi /srv/webapp0/www/ sending incremental file list webapp.wsgi sent 476 bytes received 31 bytes 1014.00 bytes/sec total size is 397 speedup is 0.78 [root@server0 srv]# 2.2、还原selinux标签 [root@server0 srv]# restorecon -vvR webapp0 restorecon reset /srv/webapp0/www context unconfined_u:object_r:var_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0 restorecon reset /srv/webapp0/www/webapp.wsgi context unconfined_u:object_r:var_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0 [root@server0 srv]# semanage fcontext -l |grep -i www /srv/([^/]*/)?www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0 /srv/([^/]*/)?www/logs(/.*)? all files system_u:object_r:httpd_log_t:s0 3、下载配置证书和秘钥 3.1、下载ca证书 [root@server0 tls]# /etc/pki/tls/certs [root@server0 tls]# wget http://classroom.example.com/pub/example-ca.crt 3.2、下载tls证书 [root@server0 certs]# wget http://classroom.example.com/pub/tls/certs/webapp0.crt 3.3、下载私钥 [root@server0 certs]# cd /etc/pki/tls/private/ [root@server0 private]# wget http://classroom.example.com/pub/tls/private/webapp0.key 4、配置httpd基于TLS的新虚机主机,并配置域名/访问web应用程序,并使用之前下载的证书和秘钥 [root@server0 conf.d]# cat 001-webapp0.example.com.conf443> ServerName webapp0.example.com ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 # public crt SSLCertificateFile /etc/pki/tls/certs/webapp0.crt # prive key SSLCertificateKeyFile /etc/pki/tls/private/webapp0.key # ca crt SSLCertificateChainFile /etc/pki/tls/certs/example-ca.crt # wsgi location WSGIScriptAlias / /srv/webapp0/www/webapp.wsgi [root@server0 conf.d]# 5、启动并启用web服务支持TLS的web服务可以被外部访问配置防火墙 [root@server0 ~]# firewall-cmd --add-service=https [root@server0 ~]# firewall-cmd --add-service=https --permanent 6、从desktop上测试是否可以通过httpd正常访问到web应用程序 [root@desktop0 ~]# curl https://webapp0.example.com -k UNIX EPOCH time is now: 1563355750.07 7、在desktop上执行 lab webapp grade验证 [root@desktop0 ~]# lab webapp grade Checking for web application... SUCCESS [root@desktop0 ~]#"/srv/webapp0/www"> Require all granted
实验总结:
1、域名证书申请
- 可以通过网站:https://myssl.com/csr_create.html 或者通过命令生成csr(证书签名请求文件)和私钥
- 拿着csr去CA证书颁发机构申请带签名的证书(带CA签名的公钥)
- 把公钥和私钥放到服务器上即可
curl "https://baidu.com" -v * Rebuilt URL to: https://baidu.com/ * Trying 220.181.38.148... * TCP_NODELAY set * Connected to baidu.com (220.181.38.148) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH * successfully set certificate verify locations: * CAfile: /etc/ssl/cert.pem CApath: none * TLSv1.2 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS change cipher, Client hello (1): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS change cipher, Client hello (1): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 * ALPN, server accepted to use http/1.1 * Server certificate: * subject: C=CN; L=Beijing; O=BeiJing Baidu Netcom Science Technology Co., Ltd; OU=service operation department; CN=www.baidu.cn * start date: Mar 18 00:00:00 2019 GMT * expire date: Mar 17 12:00:00 2020 GMT * subjectAltName: host "baidu.com" matched cert's "baidu.com" * issuer: C=US; O=DigiCert Inc; CN=DigiCert SHA2 Secure Server CA * SSL certificate verify ok. > GET / HTTP/1.1 > Host: baidu.com > User-Agent: curl/7.54.0 > Accept: */* > < HTTP/1.1 302 Moved Temporarily < Server: bfe/1.0.8.18 < Date: Mon, 12 Aug 2019 12:13:28 GMT < Content-Type: text/html < Content-Length: 161 < Connection: keep-alive < Location: http://www.baidu.com/ <302 Found 302 Found
bfe/1.0.8.18 * Connection #0 to host baidu.com left intact
HTTPS认证流程解释:
CA可以理解为工商局 证书可以理解为经营许可证书(带签名的公钥)、key可以理解为身份证(私钥)
想开公司的去工商局申请一个经营许可,但是这个许可是可以伪造的,你想投资这个公司但是你不知道这个公司是不是正规的怎么办?去工商局一查不都知道了吗?原理是一样的
如上图和请求逻辑字符串所示:
1、TLS handshake, Client Hello 【发送hello启动会话】
客户端通过发送Client Hello报文开始建立SSL通信,报文包含客户端支持的SSL版本,加密套件列表,随机数。
上面例子中:ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH 就是客户端支持的加密套件的表达式。
2、TLS handshake, Server Hello 【应答hello】
服务端回复Server Hello作为应答,报文包含服务端选择好的SSL版本,加密套件,随机数。
上面例子中服务器选择了:SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
3、TLS handshake, Certificate 【拿出证明,客户端验证("用户去工商局认证它的公司是否合法“)】
服务端发送证书链(从根证书到自身的证书)。证书包含证书所有者、颁发机构以及公钥、数字签名等信息。
客户端会预制一些CA公钥证书,如果发现服务端发送过来的证书不是预制的CA机构颁发的会提示。
客户端会用CA公钥对数字签名进行解密获取证书信息,然后和服务端传递过来的信息进行对比是否有效
4、TLS handshake, Server key exchange【服务端将数据加密方法和参数传递给客户后端】
5、TLS handshake, Server finished 【就这些了没了,等待客户端后续传递消息】
6、TLS handshake, Client key exchange 【客户端将数据加密方法和参数传递给服务端】
7、TLS change cipher, Client hello 【我用发给你的加密方法和参数加密了一条信息你验证下】服务端发送更改加密方式信号。TLS1.3将其移除
8、TLS handshake, Finished 【服务端OK我也用发给你的加密方法加密了一条数据你也验证下】
开始数据传输-------
ISCSI 提供基于块的存储
成果:
从server0计算机上导出的ISCSI目标用ACL进行了限制,以便次目标只能由您的desktop0使用并持久挂载
准备:
1、重置server、destop系统:rht-vmctl reset desktop rht-vmctl reset server
2、您已被要求在server0计算机上创建一个新的1G ISCSI目标,此目标应该称为: iqn.2014-06.com.example:server0 且只能被:iqn.2014-06.com.example:desktop0的客户端使用
需求分析:
1、在Server上创建一个新的1 G分区留作备用
2、在Server上安装所需的安装包,然后启动并启用所有相关服务
3、创建以个名为iqn.2014-06.com.example:server0的ISCSI目标,使用创建的1G分区作为后备存储,并设置ACL只允许iqn.2014-06.com.example:desktop0访问
4、在防火墙开放ISCSI服务端口
5、在desktop0上,验证是否安装了:iscsi-initiator-util软件包,然后将initiatorname设置为iqn.2014-06.com.example:desktop0
6、发现server0的共享,并登陆测试
7、挂载fstable持久挂载(创建挂载点/iscsidisk并永久挂载至/iscsidisk)
具体实验步骤:
-----------------------------------------server # 创建硬盘 [root@server0 ~]# fdisk /dev/vdb # 扫描分区改动 [root@server0 ~]# partprobe # 安装ISCSI共享所需软件包 [root@server0 ~]# yum -y install targetcli # 启动服务并设置为开机启动 [root@server0 ~]# systemctl start target [root@server0 ~]# systemctl enable target ln -s '/usr/lib/systemd/system/target.service' '/etc/systemd/system/multi-user.target.wants/target.service' [root@server0 ~]# systemctl status target target.service - Restore LIO kernel target configuration Loaded: loaded (/usr/lib/systemd/system/target.service; enabled) Active: active (exited) since 三 2019-07-17 18:22:18 CST; 12s ago Main PID: 1745 (code=exited, status=0/SUCCESS) 7月 17 18:22:18 server0.example.com target[1745]: No saved config file at /etc/target/saveconfig.json, ok, exiting 7月 17 18:22:18 server0.example.com systemd[1]: Started Restore LIO kernel target configuration. # 先创建一个后备的块存储-table可以补全 targetcli /> backstores/block create dev=/dev/vdb1 name=disk1 Created block storage object disk1 using /dev/vdb1. # 在创建一个ISCSI分享目标,名称为:iqn.2014-06.com.example:server0 /> iscsi/ create wwn=iqn.2014-06.com.example:server0 Created target iqn.2014-06.com.example:server0. Created TPG 1. # 设置目标[acl/lun/port] = [允许谁来访问/这个目标分享的设备/这个目标通过什么IP什么端口访问] ## acl /> iscsi/iqn.2014-06.com.example:server0/tpg1/acls create wwn=iqn.2014-06.com.example:desktop0 Created Node ACL for iqn.2014-06.com.example:desktop0 ## lun /> iscsi/iqn.2014-06.com.example:server0/tpg1/luns create /backstores/block/disk1 Created LUN 0. Created LUN 0->0 mapping in node ACL iqn.2014-06.com.example:desktop0 ## port iscsi 默认端口是3260如果不使用这个端口需要对selinux进行配置 /> iscsi/iqn.2014-06.com.example:server0/tpg1/portals create ip_address=172.25.0.11 ip_port=3260 # 保存退出 /> saveconfig Last 10 configs saved in /etc/target/backup. Configuration saved to /etc/target/saveconfig.json /> exit Global pref auto_save_on_exit=true Last 10 configs saved in /etc/target/backup. Configuration saved to /etc/target/saveconfig.json # 添加防火墙允许端口访问 [root@server0 ~]# firewall-cmd --add-port=3260/tcp [root@server0 ~]# firewall-cmd --add-port=3260/tcp --permanent -----------------------------------------desktop # 修改配置设置server端允许的iscsi的客户端 [root@desktop0 ~]# cat /etc/iscsi/initiatorname.iscsi InitiatorName=iqn.2014-06.com.example:desktop0 # 发现server端的共享设备 [root@desktop0 ~]# iscsiadm -m discovery -t st -p 172.25.0.11:3260 172.25.0.11:3260,1 iqn.2014-06.com.example:server0 # 登录设备 [root@desktop0 ~]# iscsiadm -m node -T iqn.2014-06.com.example:server0 -l # 查看设备 [root@desktop0 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 1G 0 disk <----------- 多出一个1G的设备 vda 253:0 0 10G 0 disk └─vda1 253:1 0 10G 0 part / vdb 253:16 0 10G 0 disk # 格式化分区 [root@desktop0 ~]# mkfs.xfs /dev/sda # 创建挂载点 [root@desktop0 ~]# mkdir -p /iscsidisk # 获取uuid [root@desktop0 ~]# blkid /dev/vda1: UUID="9bf6b9f7-92ad-441b-848e-0257cbb883d1" TYPE="xfs" /dev/sda: UUID="ab154cb3-c4b0-4f63-82db-c499a2b5ec7d" TYPE="xfs" # 修改fstab持久挂载 / 这里需要注意需要指定_netdev 因为网络挂载 UUID=ab154cb3-c4b0-4f63-82db-c499a2b5ec7d /iscsidisk xfs _netdev 0 0 # 测试,然后umount后重启,尽量不要强制重启 [root@desktop0 ~]# mount -a [root@desktop0 ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/vda1 10G 3.0G 7.1G 30% / devtmpfs 906M 0 906M 0% /dev tmpfs 921M 80K 921M 1% /dev/shm tmpfs 921M 17M 904M 2% /run tmpfs 921M 0 921M 0% /sys/fs/cgroup /dev/sda 1014M 33M 982M 4% /iscsidisk [root@desktop0 ~]# umount /iscsidisk [root@desktop0 ~]# reboot # 验证重启能否自动挂载 df -h ISCSI 提供基于块的存储-具体实验步骤
实验总结:
1、iscsi 存储资源可以包含多个TGP,每个TGP有一个唯一限定名:iqn
2、每个TGP可以理解为一个对外暴露的可访问资源:这个资源定义了3个属性:
- ACL 谁可以访问我
- luns 我能提供那些共享资源
- portals 要访问我通过那个IP那个端口
kerbose验证的nfs挂载和samba多用户挂载(autofs是rchsa)
成果:
根据给定的要求在server0上
与 NFS 和 Kerberos 安全性共享目录,然后将它挂载到desktop0上
在Server0上共享某个目录,然后将其挂载到desktop0上
NFS需求:
- 在具有krb5p的安全性的server0上共享创建的/krbnfs目录
- 允许从desktp0系统中对共享进行读写访问
- 支持SELinux标签导出
- server0 和 desktop0系统的预配置 krb5 keytab在一下一下网址中提供
http://classroom.example.com/pub/keytabs/server0.keytab
http://classroom.example.com/pub/keytabs/desktop0.keytab
- 允许通过防火墙来访问NFS服务
- 在desktop0上创建新的挂载点 /mnt/securespace 并永久挂载 NFS 共享 server0:/krbnfs
SAMBA需求:
- 使用 SMB 来共享创建的目录 /smbaspace
- 辅助组 sales 成员对共享具有读写权限
- 确保新创建的文件均具有组所有权sales
- sales 组成员之外的所有用户具有读权限
- Samba服务器位于 salesdep 工作组中,Samba中的共享名为 smbspace
- 创建Samba用户 frank 此用户属于时长销售团队:sales 密码为 redhat
- 创建Samba用户 martin 此用户不属于销售团队,密码为 redhat
- 允许通过防火墙来访问SMB
- 以多用户方式将Samba共享永久挂载到desktop0上的 /mnt/salesshare 挂载点,使用新创建的凭据文件 /root/smb-multiuser.txt 进行身份验证。使用 frank 的凭据来挂载 Samba共享
准备:
开始前重置:server 和 desktop机器 并执行初始化
[root@foundation0 ~]# rht-vmctl reset server
[root@foundation0 ~]# rht-vmctl reset desktop
在server和desktop上执行:lab storageshares setup
实验完成后在desktop执行: lab storageshares grade 进行验证
具体实验步骤:
# krb5 nfs -------------------------server # 创建共享目录 mkdir -p /krbnfs # 检查nfs软件包是否安装 [root@server0 ~]# rpm -qa |grep -i nfs libnfsidmap-0.25-9.el7.x86_64 nfs-utils-1.3.0-0.el7.x86_64 # 修改配置文件设置共享目录以及共享目录允许谁来访问 [root@server0 ~]# cat /etc/exports /krbnfs 172.25.0.10(sec=krb5p,rw) [root@server0 ~]# # 因为需要支持krb5所以需要下载keytab [root@server0 ~]# wget http://classroom.example.com/pub/keytabs/server0.keytab -O /etc/krb5.keytab # 允许selinux标签导出需要使用v4.2修改nfs的配置文件 [root@server0 ~]# cat /etc/sysconfig/nfs |grep RPCNFSDARGS RPCNFSDARGS="-V4.2" [root@server0 ~]# # 启动服务并设置为开机启动 [root@server0 ~]# systemctl start nfs-secure-server [root@server0 ~]# systemctl enable nfs-secure-server ln -s '/usr/lib/systemd/system/nfs-secure-server.service' '/etc/systemd/system/nfs.target.wants/nfs-secure-server.service' [root@server0 ~]# systemctl status nfs-secure-server nfs-secure-server.service - Secure NFS Server Loaded: loaded (/usr/lib/systemd/system/nfs-secure-server.service; enabled) Active: active (running) since Fri 2019-07-19 07:42:08 CST; 13s ago Main PID: 1956 (rpc.svcgssd) CGroup: /system.slice/nfs-secure-server.service └─1956 /usr/sbin/rpc.svcgssd Jul 19 07:42:08 server0.example.com systemd[1]: Starting Secure NFS Server... Jul 19 07:42:08 server0.example.com systemd[1]: Started Secure NFS Server. # 防火墙允许服务通过 [root@server0 ~]# firewall-cmd --add-service=nfs --permanent success [root@server0 ~]# firewall-cmd --add-service=nfs success [root@server0 ~]# firewall-cmd --reload success -------------------------desktop # 因为需要支持krb5所以需要下载keytab [root@desktop0 ~]# wget http://classroom.example.com/pub/keytabs/desktop0.keytab -O /etc/krb5.keytab # 创建挂载目录 [root@desktop0 ~]# mkdir /mnt/securespace # 启动服务 [root@desktop0 ~]# systemctl start nfs-secure [root@desktop0 ~]# systemctl enable nfs-secure ln -s '/usr/lib/systemd/system/nfs-secure.service' '/etc/systemd/system/nfs.target.wants/nfs-secure.service' [root@desktop0 ~]# systemctl status nfs-secure nfs-secure.service - Secure NFS Loaded: loaded (/usr/lib/systemd/system/nfs-secure.service; enabled) Active: active (running) since Fri 2019-07-19 07:49:41 CST; 10s ago Main PID: 2022 (rpc.gssd) CGroup: /system.slice/nfs-secure.service └─2022 /usr/sbin/rpc.gssd Jul 19 07:49:41 desktop0.example.com systemd[1]: Starting Secure NFS... Jul 19 07:49:41 desktop0.example.com systemd[1]: Started Secure NFS. # 添加/etc/fstab配置 server0:/krbnfs /mnt/securespace nfs defaults,v4.2,sec=krb5p 0 0 # 挂载 mount -a # 验证selinux标签是否导出 server上创建一个文件看看selinux标签
# samba mutiuser -------------------------server # 安装samba所需安装包 [root@server0 ~]# yum -y install samba* # 创建共享目录 [root@server0 ~]# mkdir -p /smbaspace # 创建辅助组 [root@server0 ~]# groupadd sales # 创建用户和根据需求把用户加入sales辅助组 [root@server0 ~]# useradd frank -G sales -s /usr/sbin/nologin [root@server0 ~]# useradd martin -s /usr/sbin/nologin # 根据需求smbaspace目录属于sales且新文件自动属于sales组 [root@server0 ~]# chown :sales /smbaspace [root@server0 ~]# chmod g+s /smbaspace # samba用户frank要对共享有读写权限,frank属于sales我们对应的也需要对目录的组设置相应的权限 [root@server0 ~]# chmod 775 /smbaspace [root@server0 ~]# ll -d /smbaspace drwxrwsr-x. 2 root sales 6 Jul 19 07:53 /smbaspace # 添加selinux标签,以通过selinux权限 [root@server0 ~]# semanage fcontext -a -t samba_share_t '/smbaspace(/.*)?' [root@server0 ~]# restorecon -vvFR /smbaspace restorecon reset /smbaspace context unconfined_u:object_r:default_t:s0->system_u:object_r:samba_share_t:s0 [root@server0 ~]# # 按需修改配置 [root@server0 ~]# cat /etc/samba/smb.conf |grep workgroup |grep -v "#" workgroup = salesdep [root@server0 ~]# cat /etc/samba/smb.conf |grep -A 3 smbspace [smbspace] path = /smbaspace write list = @sales [root@server0 ~]# # 创建samba用户 [root@server0 ~]# smbpasswd -a frank New SMB password: Retype new SMB password: Added user frank. [root@server0 ~]# smbpasswd -a martin New SMB password: Retype new SMB password: Added user martin. # 启动服务并设置为开机启动 [root@server0 ~]# systemctl start smb nmb [root@server0 ~]# systemctl enable smb nmb ln -s '/usr/lib/systemd/system/smb.service' '/etc/systemd/system/multi-user.target.wants/smb.service' ln -s '/usr/lib/systemd/system/nmb.service' '/etc/systemd/system/multi-user.target.wants/nmb.service' [root@server0 ~]# systemctl status smb nmb smb.service - Samba SMB Daemon Loaded: loaded (/usr/lib/systemd/system/smb.service; enabled) Active: active (running) since Fri 2019-07-19 08:02:28 CST; 14s ago Main PID: 2765 (smbd) Status: "smbd: ready to serve connections..." CGroup: /system.slice/smb.service ├─2765 /usr/sbin/smbd └─2766 /usr/sbin/smbd Jul 19 08:02:28 server0.example.com smbd[2765]: [2019/07/19 08:02:28.330058, 0] ../lib/util/become_daemon.c:136(daemon_ready) Jul 19 08:02:28 server0.example.com systemd[1]: Started Samba SMB Daemon. nmb.service - Samba NMB Daemon Loaded: loaded (/usr/lib/systemd/system/nmb.service; enabled) Active: active (running) since Fri 2019-07-19 08:02:28 CST; 14s ago Main PID: 2764 (nmbd) Status: "nmbd: ready to serve connections..." CGroup: /system.slice/nmb.service └─2764 /usr/sbin/nmbd Jul 19 08:02:27 server0.example.com systemd[1]: Starting Samba NMB Daemon... Jul 19 08:02:28 server0.example.com systemd[1]: Started Samba NMB Daemon. [root@server0 ~]# # 本机验证 [root@server0 ~]# smbclient -L //localhost/smbspace -U frank Enter frank's password: Domain=[SALESDEP] OS=[Unix] Server=[Samba 4.1.1] Sharename Type Comment --------- ---- ------- smbspace Disk IPC$ IPC IPC Service (Samba Server Version 4.1.1) frank Disk Home Directories Domain=[SALESDEP] OS=[Unix] Server=[Samba 4.1.1] Server Comment --------- ------- SERVER0 Samba Server Version 4.1.1 Workgroup Master --------- ------- SALESDEP SERVER0 # 防火墙允许服务 [root@server0 ~]# firewall-cmd --add-service=samba --permanent success [root@server0 ~]# firewall-cmd --add-service=samba success [root@server0 ~]# firewall-cmd --reload success [root@server0 ~]# -------------------------desktop # 安装samba所需安装包 [root@desktop0 ~]# yum -y install samba* cifs-utils # 验证server共享desktop是否可以看到 [root@desktop0 ~]# smbclient -L //server0/smbspace -U frank Enter frank's password: Domain=[SALESDEP] OS=[Unix] Server=[Samba 4.1.1] Sharename Type Comment --------- ---- ------- smbspace Disk IPC$ IPC IPC Service (Samba Server Version 4.1.1) frank Disk Home Directories Domain=[SALESDEP] OS=[Unix] Server=[Samba 4.1.1] Server Comment --------- ------- SERVER0 Samba Server Version 4.1.1 Workgroup Master --------- ------- SALESDEP SERVER0 [root@desktop0 ~]# # 创建挂载目录 [root@desktop0 ~]# mkdir /mnt/salesshare # 根据需求创建credentials文件 [root@desktop0 ~]# cat /root/smb-multiuser.txt username=frank password=redhat [root@desktop0 ~]# # 添加/etc/fstab配置 //server0/smbspace /mnt/salesshare cifs defaults,multiuser,credentials=/root/smb-multiuser.txt,sec=ntlmssp 0 0 # 挂载 mount -a
验证:
[root@desktop0 ~]# lab storageshares grade
实验总结:
1、nfs和samba区别
nfs和samba都是共享协议但是nfs使用的是标准的unix文件权限和验证所以在window上不支持,samba使用权限和认证可以看出并没有使用unix这一套,所以它可以通用windows和unix
2、区分下实验
- autofs 添加配置文件就行了 nfs.autofs指定挂载的目录和映射文件 在映射文件指定挂载点、挂载点权限-typefs=rw、要挂载的文件系统
# 添加配置文件 [root@desktop0 ~]# vim /etc/auto.master.d/nfs.autofs #挂载的目录 映射配置文件 /- /etc/auto.home # 添加映射文件 [root@desktop0 ~]# vim /etc/auto.home #挂载点 挂载选项 要挂载的文件系统 /home/guests -typefs=rw classroom.example.com:/home/guests
- iscsi
挂载iscsi共享的对象: 1、先的发现那台机器在共享 iscsiadm -m discovery -t st -p 172.25.0.11:1234 # 解释-t type sendtarget 2、登录下 iscsiadm -m node -T iqn.2014-06.com.example:server0 -l # 解释-T 指定上面发现的targetname # 解释-l 登录logging 3、当发现了硬盘设备后就和标准的设备挂载一样了唯一区别是,需要在挂载属性上加一个属性标识它是一个网络设备(_netdev) UUID=ab154cb3-c4b0-4f63-82db-c499a2b5ec7d /iscsidisk xfs _netdev 0 0
- nfs
注意如果支持标签导出的话改下server配置 [root@server0 ~]# vim /etc/sysconfig/nfs RPCNFSDARGS="-V 4.2" 如果需要支持krb5需要下载“护照”keytab 在server端和client端 wget http://xxxx/keytab -O /etc/krb5.keytab 在挂载的时候 文件类型nfs 挂载选项v4.2,sec=krb5p
- samba
server端注意启动:smb nmb 服务 server端注意文件夹权限、selinux标签权限 配置也需要注意下 [smbspace] path = /sambaspace write list = @salses
网络安全[IPV6/防火墙转发/聚合team]
IPV6配置
这个没什么说的标准命令配置按照规则来即可 有需求可以通过GUI来配置: nm-con
实验需求:
1、配置server的eno1的链接配置IPV4地址 192.168.0.100/24 和IPV6地址 fddb:fe2a:ab1e::c0a8:64/64 16进制:0-9 A-F 别记错
2、ipv4网关:192.168.0.254 ipv6网关:fddb:fe2a:ab1e::c0a8:fe
实验准备:在server上执行 lab ipv6 setup
实验验证:lab ipv6 grade
实验步骤:
# 添加NetworkManager链接 对应的设备是: eno1 [root@server0 ~]# nmcli connection add con-name eno1 type ethernet ifname eno1 Connection 'eno1' (e80e5350-5a76-40bc-a1d4-fbf63da498db) successfully added. # 添加IPV4配置 [root@server0 ~]# nmcli connection modify eno1 ipv4.addresses 192.168.0.100/24 # 修改IPV4链接方式为手工 [root@server0 ~]# nmcli connection modify eno1 ipv4.method manual # 添加IPV6配置 [root@server0 ~]# nmcli connection modify eno1 ipv6.addresses fddb:fe2a:ab1e::c0a8:64/64 # 修改IPV6链接方式为手工 [root@server0 ~]# nmcli connection modify eno1 ipv6.method manual # 重启网卡 [root@server0 ~]# nmcli connection down eno1 [root@server0 ~]# nmcli connection up eno1 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2) # 测试 [root@server0 ~]# ping 192.168.0.254 PING 192.168.0.254 (192.168.0.254) 56(84) bytes of data. 64 bytes from 192.168.0.254: icmp_seq=1 ttl=64 time=1.88 ms ^C --- 192.168.0.254 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 1.883/1.883/1.883/0.000 ms [root@server0 ~]# ping6 fddb:fe2a:ab1e::c0a8:fe PING fddb:fe2a:ab1e::c0a8:fe(fddb:fe2a:ab1e::c0a8:fe) 56 data bytes 64 bytes from fddb:fe2a:ab1e::c0a8:fe: icmp_seq=1 ttl=64 time=3.23 ms 64 bytes from fddb:fe2a:ab1e::c0a8:fe: icmp_seq=2 ttl=64 time=0.044 ms ^C --- fddb:fe2a:ab1e::c0a8:fe ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 0.044/1.638/3.233/1.595 ms [root@server0 ~]# # 验证 [root@server0 ~]# lab ipv6 grade
端口聚合
实验需求:
在server上创建一个聚合接口team0,具有静态IP地址:192.168.0.100/24 并且根据 eno1 和 eno2 创建一个容错的主备接口
实验准备:在server上执行 lab teambridge setup 使用root用户操作
实验步骤:
# 添加聚合接口 [root@server0 ~]# nmcli connection add type team con-name team0 config '{"runner": {"name": "activebackup"}}' Connection 'team0' (a4c4d11a-2f89-4540-9c69-70c7a46e429a) successfully added. [root@server0 ~]# # 设置端口IP [root@server0 ~]# nmcli connection modify team0 ipv4.addresses 192.168.0.100/24 [root@server0 ~]# nmcli connection modify team0 ipv4.method manual [root@server0 ~]# # 针对team0分配eno1和eno2物理接口 [root@server0 ~]# nmcli connection add type team-slave con-name team0-p1 ifname eno1 master team0 [root@server0 ~]# nmcli connection add type team-slave con-name team0-p2 ifname eno2 master team0 # 查看team状态 [root@server0 ~]# teamdctl team0 state setup: runner: activebackup ports: eno1 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up eno2 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up runner: active port: eno1 # 验证 [root@server0 ~]# ping 192.168.0.254 PING 192.168.0.254 (192.168.0.254) 56(84) bytes of data. 64 bytes from 192.168.0.254: icmp_seq=1 ttl=64 time=0.086 ms ^C --- 192.168.0.254 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.086/0.086/0.086/0.000 ms
防火墙转发
实验需求:将desktop来的登录443的请求转到22端口
实验准备:重置server、destop系统:rht-vmctl reset desktop rht-vmctl reset server
实验步骤:
[root@server0 ~]# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="172.25.0.10/32" forward-port port="443" protocol="tcp" to-port="22"' --permanent success [root@server0 ~]# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="172.25.0.10/32" forward-port port="443" protocol="tcp" to-port="22"' success [root@server0 ~]# firewall-cmd --list-rich-rules rule family="ipv4" source address="172.25.0.10/32" forward-port port="443" protocol="tcp" to-port="22" [root@server0 ~]# [root@desktop0 ~]# ssh -p 443 172.25.0.11 The authenticity of host '[172.25.0.11]:443 ([172.25.0.11]:443)' can't be established. ECDSA key fingerprint is 65:4d:ac:8a:c9:58:82:b5:0c:91:c4:ef:a5:e6:f6:65. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[172.25.0.11]:443' (ECDSA) to the list of known hosts. root@172.25.0.11's password: Last login: Thu Jul 18 17:25:49 2019 from 172.25.0.250 [root@server0 ~]#
配置MariaDB数据库
实验需求:
部署一个MariaDB、并恢复数据库表、插入数据
设置db用户权限
用户 | 密码 | 权限 |
mary | mary_password | 对传统数据库中所有表有选择操作 |
legacy | legacy_password | 对传统数据库中所有表有选择、插入、更新、删除操作 |
report | report_password | 对传统数据库中所有表有选择操作 |
插入数据条目在表:manufacturer
名称 | 销售员 | 电话号码 |
HP | Joe Doe | +1 (432) 754-3509 |
Dell | Luke Skywalker | +1 (431) 219-4589 |
Lenovo | Darth Vader | +1 (327) 647-6784 |
实验准备:
1、重置desktop和server的系统:rht-vmctl reset desktop rht-vmctl reset server
2、执行实验初始化
server:lab mariadb setup
desktop:lab mariadb setup
实验需求分析:
1、安装mariaDB所需软件包
2、启动服务并设置为开机启动
3、防火墙开放mysql服务允许外部访问mysql
4、创建legacy数据库
5、恢复数据库备份:/home/student/mariadb.dump
6、根据需求创建用户并设置权限
7、插入新的数据在数据库表:manufacturer
8、验证在desktop执行:lab mariadb grade
实验详细步骤:
# 安装所需mariaDB所需软件包 Server & Client mariadb # 启动服务并设置为开机启动 Server [root@server0 ~]# systemctl start mariadb [root@server0 ~]# systemctl status mariadb mariadb.service - MariaDB database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled) Active: active (running) since 四 2019-07-18 21:26:43 CST; 6s ago Process: 1731 ExecStartPost=/usr/libexec/mariadb-wait-ready $MAINPID (code=exited, status=0/SUCCESS) Process: 1651 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir %n (code=exited, status=0/SUCCESS) Main PID: 1730 (mysqld_safe) CGroup: /system.slice/mariadb.service ├─1730 /bin/sh /usr/bin/mysqld_safe --basedir=/usr └─1887 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/va... 7月 18 21:26:41 server0.example.com mariadb-prepare-db-dir[1651]: The latest information about MariaDB is available at http://mariadb.org/. 7月 18 21:26:41 server0.example.com mariadb-prepare-db-dir[1651]: You can find additional information about the MySQL part at: 7月 18 21:26:41 server0.example.com mariadb-prepare-db-dir[1651]: http://dev.mysql.com 7月 18 21:26:41 server0.example.com mariadb-prepare-db-dir[1651]: Support MariaDB development by buying support/new features from 7月 18 21:26:41 server0.example.com mariadb-prepare-db-dir[1651]: SkySQL Ab. You can contact us about this at [email protected]. 7月 18 21:26:41 server0.example.com mariadb-prepare-db-dir[1651]: Alternatively consider joining our community based development effort: 7月 18 21:26:41 server0.example.com mariadb-prepare-db-dir[1651]: http://mariadb.com/kb/en/contributing-to-the-mariadb-project/ 7月 18 21:26:41 server0.example.com mysqld_safe[1730]: 190718 21:26:41 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'. 7月 18 21:26:41 server0.example.com mysqld_safe[1730]: 190718 21:26:41 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql 7月 18 21:26:43 server0.example.com systemd[1]: Started MariaDB database server. [root@server0 ~]# systemctl enable mariadb ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service' # 防火墙开放mysql服务允许外部访问mysql [root@server0 ~]# firewall-cmd --add-service=mysql success [root@server0 ~]# firewall-cmd --add-service=mysql --permanent success [root@server0 ~]# firewall-cmd --reload success # 创建 legacy 数据库 MariaDB [(none)]> CREATE DATABASE legacy; # 恢复数据库备份:/home/student/mariadb.dump MariaDB [(none)]> USE legacy; MariaDB [legacy]> source /home/student/mariadb.dump; # 根据需求创建用户并设置权限 # 创建用户 > CREATE USER mary@'%' IDENTIFIED BY 'mary_password'; Query OK, 0 rows affected (0.01 sec) > CREATE USER legacy@'%' IDENTIFIED BY 'legacy_password'; Query OK, 0 rows affected (0.00 sec) > CREATE USER report@'%' IDENTIFIED BY 'report_password'; Query OK, 0 rows affected (0.00 sec) # 授权 > GRANT SELECT ON legacy.* TO mary@'%'; > GRANT SELECT ON legacy.* TO report@'%'; > GRANT SELECT,INSERT,UPDATE,DELETE ON legacy.* TO legacy@'%'; # 插入新的数据在数据库表:manufacturer MariaDB [legacy]> INSERT INTO manufacturer(name,seller,phone_number) VALUES ('HP','Joe Doe','+1 (432) 754-3509'),('Dell','Luke Skywalker','+1 (431) 219-4589'),('Lenovo','Darth Vader','+1 (327) 647-6784'); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 # 验证在desktop执行:lab mariadb grade
配置邮件传输
实验成果:
将在本地邮件服务器配置为充当空客户端,已将所有邮件都转发到中央服务器已进行发送(中继)
将server0.exampl.com上的Postfix邮件服务器配置为空客户端,以通过: smtp0.example.com 来中继邮件,并且在发送电子邮件中使用:desktop0.exampl.ecom作为您的组织域名。
通过支持IMAPS功能的点在邮件从imap0.example.com(以用户和邮件收件人 student 的身份,并且使用 IMAP密码: student)检索测试邮件,验证邮件服务器是否运行
实验需求分析:
1、在server0上切换为root用户,然后将 relayhost 指令指向公司邮件服务器(邮件中继给谁)。需要将邮件服务器的主机名括在方括号中,你防止空客户端使用DNS执行 MX 记录查找
2、将Postfix邮件服务器配置为仅回复来自本地系统的邮件
3、配置空客户端,以便所有发出去的消息都将其发件人域重写为公司域:desktop0.example.com
4、禁止Postfix邮件服务器将任何邮件发送到本地账户
5、在server0上重新启动本地Postfix空客户端
6、在server0上打开一个新终端,并且通过mail命令发送一份邮件测试
[root@server0 ~]# mail -s "server0 null client" [email protected] null client test EOT
7、执行验证
lab smtp-nullclient grade
实验准备:
1、重置server和desktop机器:rht-vmctl reset desktop rht-vmctl reset server
2、执行初始化在server和desktop
[root@server0 ~]# lab smtp-nullclient setup
[root@desktop0 ~]# lab smtp-nullclient setup
实验步骤:
# 指定邮件收到后转发给谁 [root@server0 ~]# postconf -e 'relayhost=smtp0.example.com' # 仅回复本地邮件 ## [设置受信的SMTP客户端IP段, 设置发送邮件的接口为:lookback-only接口] [root@server0 ~]# postconf -e 'mynetworks=127.0.0.0/8 [::1]/128' [root@server0 ~]# postconf -e 'inet_interfaces=loopback-only' # 所有发出去的消息都将其发件人域重写为公司域 [root@server0 ~]# postconf -e 'myorigin=desktop0.example.com' # 禁止Postfix邮件服务器将任何邮件发送到本地账户 ## 设置本地邮件的目的为空 [root@server0 ~]# postconf -e 'mydestination=' ## 并对发往本地邮件的动作设为为报错 postconf -e 'local_transport=error: local delivary disable' # 重启服务 [root@server0 ~]# systemctl restart postfix.service # 发邮件验证 [root@server0 ~]# systemctl restart postfix.service [root@server0 ~]# mail -s "server0 null client" [email protected] null client test EOT # 测试邮件是否收到 [root@server0 ~]# curl -k --user student:student imaps://imap0.example.com null client test
实验总结:
1、每个linux都有发邮件到外面的需求,Linux从之前的sendmail到现在的postfix
linux从6以后就自带了postfix,所以每个linux都有一个postfix邮件服务器,由软件包:postfix 提供
# relayhost relayhost=['smtp0.example.com'] """ 默认情况下postfix会尝试将邮件发送到Internet,但是有时候你们有办法链接internet比如上班时间禁止链接internet,这个时候可能就需要指定一个中继的专门发送邮件的服务器,默认为空,如果设置了中继服务器,本机postfix服务受到邮件后,会把邮件发送到中继服务器上 用中括号括起来:postfix就不会进行MX记录查询了(类似DNS查询) """ # inet_interfaces # inet_interfaces=loopback-only # default all """ 以哪个IP发送邮件 当inet_interfaces只指定一个IPv4和/或IPv6地址而不是回送地址时,Postfix SMTP客户机将使用这个地址作为出站邮件的IP源地址。 当设置为空客户端的时候:inet_interfaces需要设置为:inet_interfaces=loopback-only """ # mynetworks # mynetworks=127.0.0.0/8 [::1]/128 """ 信任来自哪里的SMTP客户端,只有在我允许的SMTP客户端才能通过postfix服务器进行中继 """ # myorigin # myorigin=[email protected] """ 默认我们使用root发送邮件默认是:root@主机名 设定了myorigin之后就是 root@[email protected] """ # mydestination # mydestination= """ 配置postfix邮件服务器是那些域的终点,这个选项一般只针对本机,本机发送本机域的终点就是本机 mydestination = $myhostname, localhost.$mydomain, localhost # default 如果设置为空客户端那么本机域的终点应该去掉设置为空mydestination= """ # local_transport # local_transport=error: local delivery disabled """ 它是指定$mydestination的电子邮件的传递方式,默认设置为:local_transport = local:$myhostname 会把$mydestination邮件发送到:/var/spool/maill中存储位置 """
练习环境获取方法
1、关注公众号
2、输入:rhce