1. 配置网络,要求如下:
• 主机名: servera.lab.example.com• IP 地址: 172.25.250.10
• 子网掩码: 255.255.255.0
• 网关: 172.25.250.254
• DNS: 172.25.250.254
题目内容解析:
• 配置好网卡的信息,网卡的配置文件在/etc/sysconfig/network-scripts目录下的ifcfg-*的文件• 配置主机名的信息
• 配置网卡和主机名需要生效,并设置为开机生效
(推荐,不会错)
• 网络的配置
[root@servera ~]# nmtui
选择编辑网卡配置
选择当前的网卡配置
配置网卡的信息,确认之后选择OK就可以了
主机名的配置
编辑主机名
通过nmcli命令的方式设置网卡的配置,hostsname命令配置主机信息
查看所有的网络连接信息
[root@servera yum.repos.d]# nmcli connection show
NAME UUID TYPE DEVICE
ens33 ff5a9e65-ff7d-4604-a069-ef96544fce4f ethernet ens33
设置网卡的配置信息,如IP地址、dns,网关,设置为开机自启网卡(间隔为空格)
[root@servera ~]# nmcli connection modify "ens33"
ipv4.addresses 172.25.250.10/24
ipv4.gateway 172.25.250.254
ipv4.dns 172.25.250.254
ipv4.method manual connection.autoconnect yes
命令参数解析:
modify:选择需要修改的网卡,一般是网卡的名称
ipv4.address:配置ipv4的地址
ipv4.gateway:配置ipv4的网关地址
ipv4.dns:配置ipv4的dns配置
ipv4.method:ipv4的模式类型
connection.autoconnect:配置ipv4网卡是否自动连接,就是自动启动
启用网卡的配置信息
[root@servera yum.repos.d]# nmcli connection up "ens33"
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
设置主机名
[root@servera ~]# hostnamectl set-hostname servera.lab.example.com
Linux操作系统的主机名的配置文件为:
[root@servera ~]# cat /etc/hostname
servera.lab.example.com
linux的特点就是一切皆文件,所以配置网卡可以直接去网卡的配置进行配置
[root@servera network-scripts]# pwd
/etc/sysconfig/network-scripts
[root@servera network-scripts]# vim ifcfg-ens33
[root@servera network-scripts]# cat ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
UUID=ff5a9e65-ff7d-4604-a069-ef96544fce4f
DEVICE=ens33
ONBOOT=yes
IPADDR=172.25.250.10
NETMASK=255.255.255.0
PREFIX=24
GATEWAY=172.25.250.254
IPV6_PRIVACY=no
DNS1=172.25.250.254
网卡的配置修改完成之后需要生效,这时需要重启network服务即可
[root@servera network-scripts]# nmcli c up ens33
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
主机名的设置也可以直接到主机名配置里修改即可
[root@servera network-scripts]# cat /etc/hostname
servera.lab.example.com
验证网卡的IP地址和网卡的配置
[root@servera ~]# ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:3b:22:06 brd ff:ff:ff:ff:ff:ff
inet 172.25.250.7/24 brd 172.25.250.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe3b:2206/64 scope link noprefixroute
valid_lft forever preferred_lft forever
主机名的验证
[root@servera bin]# nslookup servera.lab.example.com
Server: 172.25.250.254
Address: 172.25.250.254#53
** server can't find servera.lab.example.com: NXDOMAIN
题目
YUM 的两个存储库的地址分别是:
http://content.example.com/rhel8.2/x86_64/dvd/BaseOS
http://content.example.com/rhel8.2/x86_64/dvd/AppStream
• 创建一个yum源配置文件,在/etc/yum.repo.d/目录下
• 配置yum源配置文件中包含了AppStream(软件应用仓库)和BaseOS(基本软件仓库)
yum源文件的存放路径如下:
[root@servera network-scripts]# cd /etc/yum.repos.d/
[root@servera yum.repos.d]# pwd
/etc/yum.repos.d
创建一个yum源,编辑的内容如下:
[root@servera ~]# vim /etc/yum.repos.d/test.repo
新增如下的内容
[base]
name=BaseOS
baseurl=http://content.example.com/rhel8.2/x86_64/dvd/BaseOS
enabled=1
gpgcheck=0
[app]
name=appstream
baseurl=http://content.example.com/rhel8.2/x86_64/dvd/AppStream
enabled=1
gpgcheck=0
yum配置文件的格式
[rhel-source] #yum标签
name=Red Hat Enterprise Linux #yum源的描述信息
baseurl=file/http/ftp #指定yum仓库的位置,可以是本地文件/http的url/ftp远程url
enabled=0 #是否启用yum的校验规则 0不启用,1启用
gpgcheck=1 #是否启用rpm签名 ,0不启用,1启用
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release #启动签名到时候需要校验key内容。表示key文件的路径
生效yum源文件并生成本地yum缓存
[root@servera yum.repos.d]# yum clean all
Repository base is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Repository PowerTools is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
18 files removed
生成本地缓存
[root@servera yum.repos.d]# yum makecache
CentOS-8 - Base - mirrors.aliyun.com 26 kB/s | 3.9 kB 00:00
CentOS-8 - Extras - mirrors.aliyun.com 12 kB/s | 1.5 kB 00:00
CentOS-8 - AppStream - mirrors.aliyun.com 27 kB/s | 4.3 kB 00:00
Metadata cache created.
查看yum源信息
[root@servera yum.repos.d]# yum repolist
repo id repo name
AppStream CentOS-8 - AppStream - mirrors.aliyun.com
base CentOS-8 - Base - mirrors.aliyun.com
extras CentOS-8 - Extras - mirrors.aliyun.com
题目
背景:非标准端口82上运行的WEB 服务器但是在提供web内容时遇到问题。根据需要调试并解决该问题,并使其满足以下条件:
• 系统上的web 服务器能够提供/var/www/html 中所有现在有的html文件(注意:不要删除或者其他方式改动现有的文件内容)
• Web 服务器通过82端口访问
• Web 服务器在系统启动时自动启动
• 82端运行web服务,需要部署http服务,并设置监听端口为82
• 提供html的web页面是在/var/www/html/并需要设置selinux的上下属性httpd_sys_content_t
• web服务是运行状态,同时设置开机自动
• selinux防护是处于强制模式并需要配置selinux防护放开http的82端口
web环境检查: 考试时一般是不需要的,但是还是要进行检查
[root@servera ~]# rpm -qa | grep http
httpd-filesystem-2.4.37-47.module_el8.6.0+1111+ce6f4ceb.1.noarch
httpd-2.4.37-47.module_el8.6.0+1111+ce6f4ceb.1.x86_64
libnghttp2-1.33.0-3.el8_2.1.x86_64
httpd-tools-2.4.37-47.module_el8.6.0+1111+ce6f4ceb.1.x86_64
centos-logos-httpd-85.8-2.el8.noarch
mod_http2-1.15.7-5.module_el8.6.0+1111+ce6f4ceb.x86_64
httpd没有安装的时候就安装运行并设置为开机自启
[root@servera conf]# yum install httpd -y
......
[root@servera conf]# systemctl start httpd
[root@servera html]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
#将http服务监听的端口是否 Listen 82 考试时一般是不需要的,但是还是要进行检查
[root@servera ~]# netstat -anlp | grep 82
tcp 0 0 0.0.0.0:44821 0.0.0.0:* LISTEN -
tcp6 0 0 :::82 :::* LISTEN 1014/httpd
raw6 0 0 :::58 :::* 7 982/NetworkManager
unix 2 [ ACC ] STREAM LISTENING 36882 1961/systemd /run/user/0/bus
unix 3 [ ] STREAM CONNECTED 27482 902/VGAuthService
unix 2 [ ] STREAM CONNECTED 41985 982/NetworkManager
unix 3 [ ] STREAM CONNECTED 29185 982/NetworkManager
unix 2 [ ] DGRAM 29321 982/NetworkManager
unix 3 [ ] STREAM CONNECTED 25282 784/systemd-udevd
unix 3 [ ] STREAM CONNECTED 29328 982/NetworkManager
unix 3 [ ] STREAM CONNECTED 30796 982/NetworkManager
没有监听是82端,就修改一下http的监听配置
[root@servera conf]# vim /etc/httpd/conf/httpd.conf
.........
# Listen 80
Listen 82
验证一下
[root@servera ~]# cat /etc/httpd/conf/httpd.conf | grep -A 3 -B 3 Listen
ServerRoot "/etc/httpd"
#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 82
#
# Dynamic Shared Object (DSO) Support
检查/var/www/html目录存在的文件,做实验如果没有自己创建
[root@servera ~]# ll -Z /var/www/html/
total 4
-rw-r--r--. 1 root root unconfined_u:object_r:httpd_sys_content_t:s0 14 Sep 5 22:57 index.html
检查是否具备了selinux的http的上下属性
如果不具备selinux的httpd的安全上下文,则进行授权就可以了
[root@servera ~]# restorecon -Rv /var/www/html/
配置selinux防护的放开http的82端口
先检查selinux处于的模式
[root@servera yum.repos.d]# getenforce
Enforcing
selinux防护的配置主要是有semanage服务在管理的
如果semanage命令不存在时则需要安装该命令对应的软件
[root@servera conf]# semana #这里tab没有自动补全时就是该selinux配置的命令不存在,需要进行安装
yum查找该命令对应的软件服务
[root@servera conf]# yum provides semanage
Last metadata expiration check: 0:04:09 ago on Fri 19 Aug 2022 10:52:07 PM CST.
policycoreutils-python-utils-2.9-16.el8.noarch : SELinux policy core python utilities
Repo : base
Matched from:
Filename : /usr/sbin/semanage
安装semanage命令的软件服务就可以提供相关的命令了,不用启动相关服务的
[root@servera conf]# yum install -y policycoreutils-python-utils
......
Complete!
查看selinux防护策略中关于http的配置情况
[root@servera ~]# semanage port -l | grep http
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
注:如上的配置表示http服务对应的端口没有配置82端口的,需要进行配置一下。
设置http服务的新端口,并验证
[root@servera conf]# semanage port -a -t http_port_t -p tcp 82
命令解析:
-a:add新增配置
-t: 执行需要修改配置的类型
-p:指定对应的协议类型
-d:表示删除带哦semanage的策略配置
[root@servera ~]# semanage port -l | grep http
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 82, 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
验证是否可以访问web服务
[root@servera html]# curl http://servera.lab.example.com:82
welcome httpd 82
题目:
要求:创建下列用户、用户组,并按如下要求相关完成设置
• 用户组名为 sysmgrs
• natasha 用户的附属组是 sysmgrs
• harry 用户的附属组是 sysmgrs
• john 用户的 shell 是非交互式shell,且不是 sysmgrs 组的成员
• natasha、harry、john 的密码是 redhat
• 创建用户组需要groupadd命令操作
• 创建用户useradd命令,指定附属组时需要在创建用户的是-G指定
• 创建的用户是非交互式shell,也就是不能登入的、就可以使用/sbin/nologin
• 设置密码可以passwd命令即可
创建sysmgrs用户组
[root@servera conf]# groupadd sysmgrs
创建用户配置指定的配置
[root@servera conf]# useradd -G sysmgrs natasha
[root@servera conf]# useradd -G sysmgrs harry
[root@servera conf]# useradd -s /sbin/nologin john
命令解析:
groudadd:创建用户组
useradd:创建用户
-G:表示指定用户的附属组
-s:表示指定用户shell的解释器,也就是shell环境
注:如果在创建用户没有指定用户组时,默认是同时创建相同的用户组信息
设置指定用户的密码
[root@servera conf]# echo redhat | passwd --stdin natasha
Changing password for user natasha.
passwd: all authentication tokens updated successfully.
[root@servera conf]# echo redhat | passwd --stdin harry
Changing password for user harry.
passwd: all authentication tokens updated successfully.
[root@servera conf]# echo redhat | passwd --stdin john
Changing password for user john.
passwd: all authentication tokens updated successfully.
命令解析:
--stdin : 从标准输入读取令牌(只有root(根)用户才能进行此操作)
echo:打印并输出内容
或者
[root@servera conf]# id natasha && id harry && id john
uid=1000(natasha) gid=1001(natasha) groups=1001(natasha),1000(sysmgrs)
uid=1001(harry) gid=1002(harry) groups=1002(harry),1000(sysmgrs)
uid=1002(john) gid=1003(john) groups=1003(john)
[root@servera conf]# passwd john
Changing password for user john.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
或者
[root@servera html]# for i in natasha harry john; do echo redhat | passwd --stdin $i; done
Changing password for user natasha.
passwd: all authentication tokens updated successfully.
Changing password for user harry.
passwd: all authentication tokens updated successfully.
Changing password for user john.
passwd: all authentication tokens updated successfully.
验证密码是否设置的正确
格式:su - 用户名称
注:如果是登入的是root用户,然后切换到普通用户的话,系统默认不用校验密码的
题目:
要求如下:
• 配置cron 作业,以用户natasha身份运行,该作业每隔5分钟运行并执行以下命令:
logger “EX200 in progress”
• 配置cron 作业,以用户natasha来执行该任务,每天15:36分时执行以下命令:
logger "hello rhcsa"
• 创建cron定时任务,指定运行用户为natasha,第一个每5分钟执行一次
• 创建cron定时任务,指定用户natasha,并定时在每天的15:36执行一次
cron配置如下:
[root@servera ~]# crontab -e -u natasha
*/5 * * * * logger "EX200 in progress"
36 15 * * * logger "hello rhcsa"
命令解析:
-u:表示默认执行该定时任务的用户,一般默认是当前登入的用户
-e :表示编辑定时任务配置文件内容,编辑的内容也是当前用户下的
-l : 表示查看当前用户下的定时任务列表
cron定时任务的时间格式为:分 时 日 月 周
注意:week (0 - 6) (Sunday=0 or 7)也就是说星期日的值为0或者是7
验证
[root@servera ~]# crontab -l -u natasha
*/5 * * * * logger "EX200 in progress"
36 15 * * * logger "hello rhcsa"
知识扩展:
每个用户都有专用的cron任务文件:/var/spool/cron/USERNAME,并且是创建才会存在对应的文件的
使用crontab命令创建用户计划任务
格式:crontab [-u user] [-l | -r | -e] [-i]
选项解析:
-l #列出所有任务,默认为当前用户的
-e #编辑任务,默认为当前用户的
-r #移除所有任务,默认为当前用户的
-i #同-r一同使用,以交互式模式移除指定任务
-u #user指定用户管理cron任务,仅root可运行
题目:
要求如下:
• /home/managers目录属于 sysmgrs 组
• 此目录可以被sysmgrs 的组成员读取、写入和访问,但是其他任何用户不具备这些权限。(不包括 root 用户)
• 在/home/managers 目录中创建的文件的所属组自动变成sysmgrs 组
• /home/managers目录属于sysmgrs组,首选需要确认该用户组和目录存在不,不存在就创建了,同时这里只说了属于sysmgrs组,所以这里使用chgrp命令就可以了
• 该目录对sysmgrs组有读写执行的权限那么就是权限组的位置是rwx权限了7,其他人没有任何权限那就是---权限/0,用户权限是rwx,因为是目录的
• 该目录具下创建的文件自动继承了目录属组的权限,那就是继承权限,特殊权限中具有继承权限的就是sgid权限,数字用2表示,所以设置权限时的数字为2770了
创建目录并设置目录的用户组
确认sysmgrs用户组存在不
[root@servera home]# cat /etc/gshadow | grep sysmgrs
sysmgrs:!::natasha,harry
创建目录
[root@servera ~]# mkdir /home/managers/
设置属组
[root@servera ~]# chgrp sysmgrs /home/managers
设置权限
[root@servera ~]# chmod 2770 /home/managers
命令解析:
chgrp : 表示修改文件或目录的所属组
chmod: 表示修改文件的权限
2770:前面2是隐藏权限是sgid,代表给目录设置rwx rwxs - - -权限,
隐藏权限包含:SUID(4)、SGID(2)、SBIT(1)
rws(1、所有者)rws(2、所属组)rwt(3、其他用户)
1(rws)suid权限:即使不是文件所有者也可以暂时拥有文件所有者的权利
2(rws)sgid权限:在拥有这个属性的目录内创建的东西,所属组都属于这个目录的所属组,不属于创建人本身。
3(rwt)sticky权限:在拥有这个属性的目录内创建的东西,除了root和创建者本身,谁都不能删
注:在chmod时,特殊权限写在第一位。
或者是
[root@servera ~]# mkdir /home/managers/
[root@servera ~]# chown root:sysmgrs /home/managers
[root@servera ~]# chmod 770 /home/managers
[root@servera ~]# chmod g+s /home/managers
[root@servera conf]# ls -l /home/mamagers
total 0
drwxrws---. 2 root sysmgrs 6 May 1 03:59 managers
注:在/home/managers 目录中创建的文件的所属组自动变成sysmgrs 组表示需要用户组的超级权限,即sgid权限
知识扩展:
SUID特殊权限(u+/-s):功能是让普通用户以命令文件的属主的身份去执行该命令,而并非以普通用户自己的身份去执行命令,仅用于系统命令(不安全)。
SGID特殊权限(g+/-s):功能让任何人在这个目录中创建的文件的属组跟这个目录的属组相同,即继承权限,仅用于目录(用于文件共享时)。
Sticky特殊权限(o+/-t):功能是在某个目录中,让任何人只能删除自己的文件,而不能删除其他人的文件。对此目录添加t权限即可。
隐藏的特殊权限
i 权限 : 功能只可以查看文件内容,但不能删除文件和修改内容
a 权限 : 功能可以查看内容, 可以追加内容,但其他的什么都不可以干(通常用于系统的日志文件)
chattr命令控制,lsattr查看
题目:
• 配置servera作为NTP的客户端,跟时间服务器172.25.254.254同步时间。
• 首选需要安装时间服务chrony,运行并设置为开机自启
• 配置同步时间服务的配置文件,设置时间的服务器为172.25.254.254
安装chrony时间同步服务
[root@servera managers]# yum install -y chrony
............
Complete!
启动chrony服务并设置为开机自启
[root@servera ~]# systemctl enable chronyd
[root@servera ~]# systemctl start chronyd
配置chrony时间同步服务器的配置文件
[root@servera managers]# vim /etc/chrony.conf
新增的内容如下:
server 172.25.250.254 iburst
重启chrony服务
[root@servera managers]# systemctl restart chronyd
验证与时间服务器的时间差
[root@servera managers]# chronyc sources -v
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- time.cloudflare.com 3 6 17 16 +1620us[+1613us] +/- 94ms
^* 111.230.189.174 2 6 17 15 -647us[ -653us] +/- 17ms
^+ time.neu.edu.cn 1 6 17 16 +594us[ +588us] +/- 31ms
^? 172.25.254.254 0 7 0 - +0ns[ +0ns] +/- 0ns
[root@servera yum.repos.d]# nslookup 172.25.254.254
题目
按照以下要求自动挂载远程用户的家目录,要求如下:
• NFS 服务器 172.25.254.254 的共享目录是/rhome,此文件系统包含为用户 remoteuser 预配置的家目录
• remoteuser 的家目录是 172.25.254.254:/rhome/remoteuser
• remoteuser 的家目录应该自动挂载到/rhome 下的/rhome/remoteuser
• 家目录必须可供其用户写入
• remoteuser 的密码是 redhat
注:练习时没有 remoteuser 用户,将配置文件做好即可
• nfs服务器端提供了共享目录,并且在共享目录下存在remoteuser用户的家目录,也就是说servera的remoteuser的家目录为:/rhome/remoteuser
题目内容解析:
• nfs共享提供的目录需要自动挂载到servera上,这就需要使用到autofs自动挂载服务
• 家目录是可供其他用户写入的,所以autofs的配置文件需要rw权限
• 设置remoteuser用户的密码是redhat
实验环境里如果没有挂的服器我们可以在serverb上建立一个nfs服务端,serverb是有一个网卡配置IP地址是172.25.254.254
[root@serverb ~]# yum install nfs-utils rpcbind -y
..........
[root@serverb ~]# systemctl start rpcbind
[root@serverb ~]# systemctl enable rpcbind
[root@serverb ~]# systemctl start nfs-server
[root@serverb ~]# systemctl enable nfs-server
防火墙默认是开启的需要配置一下防火墙策略
[root@serverb ~]# firewall-cmd --permanent --add-service=rpc-bind
[root@serverb ~]# firewall-cmd --permanent --add-service=mountd
[root@serverb ~]# firewall-cmd --permanent --add-service=nfs
[root@serverb ~]# firewall-cmd --reload
配置nfs共享目录
[root@serverb system]# mkdir /rhome
[root@serverb system]# vim /etc/exports
/rhome *(rw,async)
[root@serverb system]# exportfs -rv
exporting *:/rhome
[root@serverb system]# systemctl restart rpcbind
[root@serverb system]# systemctl restart nfs-server
根据题目的内容remoteuser用户在/etc/passwd文件中存在的,并且家目录是不存在的,所以在serverb创建一个和servera上一样的用户,但是serverb有存在remoteuser的家目录的,
[root@serverb rhome]# useradd -u 1011 -d /rhome/remoteuser remoteuser
[root@serverb rhome]# id remoteuser
uid=1011(remoteuser) gid=1011(remoteuser) groups=1011(remoteuser)
[root@serverb rhome]# ll /rhome/
total 0
drwx------. 2 1001 1001 62 Sep 3 16:38 remoteuser
servera的/etc/passwd配置文件中的remoteuser的配置,这里只能是写入,不能通过useradd去创建的
[root@servera rhome]# cat /etc/passwd | grep remoteuser
remoteuser:x:1011:1011::/rhome/remoteuser:/bin/bash
[root@servera rhome]# id remoteuser
uid=1011(remoteuser) gid=1011(remoteuser) groups=1011(remoteuser)
[root@servera rhome]# ll /rhome/
total 0
先检查remoteuser用户是否存在,考试一般都是存在的
[root@servera rhome]# id remoteuser
uid=1011(remoteuser) gid=1011(remoteuser) groups=1011(remoteuser)
• 设置用户密码根据题目的要求
[root@servera rhome]# echo redhat | passwd --stdin remoteuser
Changing password for user remoteuser.
passwd: all authentication tokens updated successfully.
检查需要挂载的nfs共享目录是否提供了并创建指定的目录
[root@servera ~]# mkdir /rhome/
[root@servera rhome]# showmount -e 172.25.254.254
Export list for 172.25.254.254:
/rhome *
• 安装autofs服务
[root@servera ~]# yum install -y autofs
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
.......
Complete!
• 编辑配置文件添加虚拟共享/rhome的映射关系
注:/etc/auto.master是autofs示例文件,同时记录路共享目录的映射关系
[root@servera rhome]# vim /etc/auto.master
#add
/rhome /etc/rhome.misc
参数解析:
/etc/auto.master:表示autofs自动挂载的父目录地址,并且同时制定子目录的配置文件路径
/etc/rhome.misc :表示autofs自动挂载的子目录配置文件,并配置挂载的具体目录
• 创建共享目录配置文件
注:共享目录需要通过/etc/rhome.misc这个文件找到真正的映射远程目录,这个文件默认是没有的,需要编辑创建一下
[root@servera managers]# vim /etc/rhome.misc
#add
remoteuser -rw,sync 172.25.254.254:/rhome/remoteuser
• 设置启动autofs服务并设置开机子启动
[root@servera ~]# systemctl enable autofs
[root@servera ~]# systemctl restart autofs
• 验证效果:
[remoteuser@servera ~]$ df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 877M 0 877M 0% /dev
tmpfs tmpfs 896M 0 896M 0% /dev/shm
tmpfs tmpfs 896M 8.7M 887M 1% /run
tmpfs tmpfs 896M 0 896M 0% /sys/fs/cgroup
/dev/mapper/cl-root xfs 47G 2.9G 45G 7% /
/dev/sda1 xfs 1014M 216M 799M 22% /boot
tmpfs tmpfs 179M 0 179M 0% /run/user/0
172.25.254.254:/rhome/remoteuser nfs4 47G 3.1G 44G 7% /rhome/remoteuser
问题:
将文件/etc/fstab 复制到 /var/tmp/fstab。配置/var/tmp/fstab 的权限以满足如下条件
• /var/tmp/fstab 属于 root 用户和 root 组
• /var/tmp/fstab 不能被任何人执行
• 用户 natasha 有读写权限
• 用户 harry 没有读写权限
• 所有其他用户(当前或者未来)能够读取/var/tmp/fstab
• 先复制/etc/fstab复制到/var/tmp/fstab文件
• 设置/var/tmp/fstab用户和属组是root
• 不能被任何人执行需要全部去掉x权限
• natasha和harry的权限属于特殊的权限,这里是指定用户的,需要使用acl的权限
• 其他用户和读取那是需要r权限
复制文件
[root@servera ~]# cp /etc/fstab /var/tmp/fstab
检查文件的用户属组
[root@servera tmp]# chown root:root /var/tmp/fstab
设置任务都没有执行权限
[root@servera tmp]# chmod a-x /var/tmp/fstab
设置natasha用户的读写权限
[root@servera tmp]# getfacl fstab
# file: fstab
# owner: root
# group: root
user::rw-
group::r--
other::r--
设置natasha的读写权限
[root@servera ~]# setfacl -m u:natasha:rw /var/tmp/fstab
[root@servera tmp]# getfacl fstab
# file: fstab
# owner: root
# group: root
user::rw-
user:natasha:rw-
group::r--
mask::rw-
other::r--
设置harry用户的没有读写权限
[root@servera ~]# setfacl -m u:harry:0 /var/tmp/fstab
[root@servera tmp]# getfacl fstab
# file: fstab
# owner: root
# group: root
user::rw-
user:natasha:rw-
user:harry:---
group::r--
mask::rw-
other::r--
命令解析:
setfacl:表示需要设置文件或目录的acl权限
-m:修改facl规则,一般后续需要接u为用户,g为组,o为其他人的acl权限
u:harry:0:表示需要修改用户的acl规则,用户的名称,用户设置的权限,0表示没有权限
验证特殊权限
[root@servera tmp]# getfacl fstab
# file: fstab
# owner: root
# group: root
user::rw-
user:natasha:rw-
user:harry:---
group::r--
mask::rw-
other::r--
知识扩展
setfacl -m # 修改添加权限
setfacl --set #先清除再重设所有权限
setfacl -b # 清除所有已有权限
setfacl -x # 删除后续acl
题目:
• 配置用户账户alex,用户的ID为1234,此用户的密码应当为redhat.
[root@servera ~]# useradd -u 1234 alex
[root@servera ~]# echo redhat | passwd --stdin alex
命令解析:
useradd:表示来创建用户
-u:表示用来指定用户的uid值
passwd:表示用来设置用户的密码,--stdin需要在root用户下才可以使用的
或者
[root@servera tmp]# useradd -u 1234 alex
[root@servera tmp]# passwd alex
Changing password for user alex.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
知识扩展
-u UID
-o 配合-u 选项,不检查UID的唯一性
-g GID 指明用户所属基本组,可为组名,也可以GID
-c "COMMENT“ 用户的注释信息
-d HOME_DIR 以指定的路径(不存在)为家目录
-s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,...] 为用户指明附加组,组须事先存在
-N 不创建私用组做主组,使用users组做主组
-r 创建系统用户 CentOS 6之前: ID<500,CentOS7 以后: ID<1000
-m 创建家目录,用于系统用户
-M 不创建家目录,用于非系统用户
-p 指定加密的密码
题目:
• 查找属于 harry 用户所属的目录,并拷贝到/root/findlist/目录下
[root@servera tmp]# mkdir /root/findlist
[root@servera ~]# find / -user harry -type d -exec cp -av {} /root/findlist/ \;
命令解析:
find:查找需要的内容
/:表示需要查找的范围
-user:表示匹配的用户规则
-type:表匹配的类型
d:表示匹配目录
-exec:表示查找匹配之后需要关联的动作
{}:表示前面find查到的内容形成的数组
\;:表示结束标志
验证
[root@servera ~]# cd /root/findlist/
[root@servera findlist]# ll
total 0
drwx------. 2 root root 62 May 2 02:14 harry
find语法:
find 路径 选项 动作
find 查询的路径 查询的条件 条件相关的参数 动作
路径:
不指定路径 默认查找当前目录的文件 在查找的时候是递归查找(目录及其子目录下查找)
动作:
对find找到的文件执行指定的操作,可以是复制、删除等
选项:
选项的作用:定义以名称、类型、大小、时间、权限、用户、组等各种条件来查找。
-name 文件名 //按文件名查找,
问题:
• 查找文件/etc/passwd 中包含字符串root 的所有行。并将所有这些行的内容 放到文件/root/list 中,/root/list不得包含空行。
[root@servera ~]# grep root /etc/passwd | grep -v “^$” > /root/list
命令解析:
grep:过滤指定的内容
|:管道符,用于连接后续的动作
-v:表示取反,也就是不匹配符合的内容
^$:表示开头并且是为空的行
>:重定向,覆盖,将匹配的内容写入到指定的文件中,文件不存在,则自动回创建的
或者
[root@servera ~]# cat /etc/passwd | grep root | grep -v "^$" > /root/list
查看写入的情况是否满足要求的
[root@ervera ~]# cat list
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
知识扩展
grep文本搜索工具
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行
模式:由正则表达式字符及文本字符所编写的过滤条件
grep [OPTIONS] <查找匹配的内容> [FILE...]
grep常用选项Options
-color=auto 对匹配到的文本着色显示
-m # 匹配#次后停止
-v 显示不被pattern匹配到的行,即取反
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A # after, 后#行
-B # before, 前#行
-C # context, 前后各#行
-e 实现多个选项间的逻辑or关系,如:grep –e ‘cat ' -e ‘dog' file
-w 匹配整个单词
-E 使用ERE,相当于egrep
-F 不支持正则表达式,相当于fgrep
-f file 根据模式文件处理
-r 递归目录,但不处理软链接
-R 递归目录,但处理软链接
题目:
• 创建一个名为/root/backup.tar.bz2 的tar 包,用来压缩/usr/local 目录。
[root@servera ~]# tar -cvjf /root/backup.tar.bz2 /usr/local/
...............
命令解析:
tar:将文件或文件夹进行打包
-c:表示进行tar打包动作
v:打印打包的过程
j:表示采用bzip2压缩规则
f:表示是指定压缩包文件名称
-z:有gzip属性的
-J:具有xz属性的
-Z:有compress属性的
-v:显示所有过程
-x: 解压
-O:将文件解开到标准输出
-f: 输出到文件
验证
[root@servera ~]# ll /root/backup.tar.bz2
total 12
-rw-r--r--. 1 root root 0 May 2 14:22 backup.tar.bz2
题目:
• 将 harry用户组提升成与管理员相同的权限,并且无密码执行特权命令。
[root@servera ~]# visudo
# %wheel ALL=(ALL) NOPASSWD: ALL
%harry ALL= NOPASSWD: ALL
命令解析:
%:表示对整个用户组生效掉
ALL=:表示指定的用户或用户组与什么用户具有相同的权限
NOPASSWD:表示无需要输入密码进行验证,也就是免密
验证
查看/etc/shadow文件时是需要root用户的权限的,普通用户是无法有这个权限
[root@servera ~]# su - harry
Last login: Wed Aug 3 21:30:57 CST 2022 on pts/0
[harry@servera ~]$ sudo tail -1 /etc/shadow
注:这里普通用户查看时是需要提示输入密码才行
nfsnobody:!!:19206::::::
[root@servera ~]# su - natasha
Last login: Wed Aug 3 21:31:17 CST 2022 on pts/0
[natasha@servera ~]$ sudo tail -1 /etc/shadow
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for natasha:
注:如果不是harry用户组的,去查看/etc/shadow文件时就需要提示输入密码了
题目:
‘
题目:
• 创建一个名为myshell 的脚本
• 该脚本放置在 /usr/local/bin 下
• 该脚本用于查找 /usr 下所有大小在50K~10m 之间且具有修改组ID权限的文件,
• 将这些文件放置于/root/myfiles下
• 在 /usr/local/bin目录下创建myshell.sh脚本文件
• 脚本编写的内容是find,查找 /usr 下所有大小在50K~10m 之间且具有修改组ID权限的文件
• 具有修改组ID权限的文件是说有特殊权限位SGID的文件,数字表示为2000
• 创建/root/myfiles目录
• 创建目录
[root@servera ~]# mkdir /root/myfiles
• 查看满足条件的文件
[root@servera ~]# find /usr -type f -and -perm -2000 -and -size +50k -size -10M /usr/libexec/openssh/ssh-keysign
• 编辑myshell脚本
[root@servera openssh]# cd /usr/local/bin/
[root@servera bin]# ls
[root@servera bin]# vim myshell.sh
#!/bin/bash
#time:2022-09-03
#auor:xionghj
find /usr -type f -and -perm -2000 -and -size +50k -size -10M -exec cp -av {} /root/myfiles/ \;
• 授权给执行的权限
[root@servera bin]# chmod +x myshell.sh
• 验证脚本功能
[root@servera bin]# sh myshell.sh
'/usr/libexec/openssh/ssh-keysign' -> '/root/myfiles/ssh-keysign'
知识扩展:
find查找满足条件的文件或者文件夹
-perm 按照文件权限查找
-perm -4000 :查找文件权限设置了suid的文件
-perm -2000 :查找文件权限设置了sgid的文件
-perm -0755 :查找权限等于0755的文件
-type 根据文件类型查找
d 目录(即文件夹)
f 普通文件,即word文档、txt文本文档、jpg图片、mp3音乐、avi视频。find /etc -type f
b 块设备文件,即硬盘、u盘、硬盘分区,例:find /dev -type b
c 字符设备文件,即终端tty,例:find /dev -type c
p 管道文件
l 符号链接(也称软链接),即快捷方式,例:find / -type l
s 套接字,ip+port。例:find / -type s
-exec 连接需要的做的动作
-and 并且
-or 或
-size 按文件大小查找,+表示大于 -表示小于 没有+-表示等于
题目:
• 为 servera 机器设置欢迎界面,在机器登录时可以弹出 Hello RHCSA!
[root@servera ~]# vim /etc/motd
Hello RHCSA!
/etc/motd :通常在用户成功登录到Linux Shell(非交互登录)时
不管你是 TTY 还是 PTS 登录,
也不管是 Telnet 或 SSH 都显示这个文件里面的信息
该信息可以从/etc/motd文本文件中找到。
验证:重新登入会弹出
Connecting to 172.25.250.10:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
WARNING! The remote SSH server rejected X11 forwarding request.
Last login: Mon May 2 02:03:54 2022 from 172.25.250.1
Hello RHCSA!
二十,创建容器化服务
题目:
要求
利用注册表服务器上的nginx 镜像地址为registry.lab.example.com/library/nginx,创建名为 sunserver 的容器
• 将其配置为以 systemd 服务的形式运行,且仅面向现有用户 contsvc
• 该服务应命名为 container-sunserver.service,此服务在系统重启后将自动启动
将创建的容器服务配置为使用永久存储,要求如下:
• 在容器主机的 /home/contsvc下创建一个名为container_journal 的目录
• 容器服务应将主机目录 /home/contsvc/container_journal 挂载到容器上的 /var/log/journal 下面
• 启动容器服务时,应自动挂载永久存储
• 在容器上执行命令 : echo RHCSA > /var/log/journal/rhcsa.log,
• 容器上的 /var/log/journal/rhcsa.log 和容器主机上的/home/contsvc/container_journal/rhcsa.log均应显示:RHCSA
注意:#注册表服务器地址:registry.lab.example.com。账号: admin/redhat321
• 在servera上部署容器服务,centos8的容器服务是podman
• 在servera上创建一个sunserver容器,使用镜像是Nginx镜像,同时该容器是普通用户contsvc用户创建的
• 创建的sunserver容器需要设置为系统服务,通过系统命令进行启停操作,并设置为开机自启
• 创建的sunserver容器需要挂载存储目录/home/contsvc/container_journal映射到容器的/var/log/journal目录
• 在容器内执行echo RHCSA > /var/log/journal/rhcsa.log命令
考试的时候镜像仓库和podman容器服务都是搭建好的,但是自己实验需要自己完善的
安装podman容器服务
[root@servera ~]# yum install -y podman
...........
[root@servera ~]# podman --version
podman version 3.3.1
配置镜像加速器
[root@servera ~]# vim /etc/containers/registries.conf
#add
unqualified-search-registries = ["docker.io"]
[[registry]]
prefix = "docker.io"
location = "8hqtcyi2.mirror.aliyuncs.com"
[[registry.mirror]]
prefix = "docker.io"
location = "hub-mirror.c.163.com"
普通用户默认是没有使用podman的权限的,所以需要做一些配置调整,让其可以使用podman
[root@servera ~]# yum install -y crun
普通用户虚拟文件服务
[root@servera ~]# rpm -qa | fuse-overlayfs
普通用户虚拟网络服务
[root@servera ~]# rpm -qa | grep slirp4netns
开启虚拟文件服务调用
[root@servera ~]# vim /etc/containers/storage.conf
#取消注释
mount_program = "/usr/bin/fuse-overlayfs"
配置那些普通用户使用podman的功能,/etc/subuid和/etc/subgid配置
[root@servera ~]# yum install -y shadow-utils
[root@servera ~]# useradd contsvc
[root@servera ~]# id contsvc
uid=1236(contsvc) gid=1236(contsvc) groups=1236(contsvc)
[root@servera ~]# cat /etc/subuid
contsvc:296608:65536
[root@servera ~]# cat /etc/subgid
contsvc:296608:65536
配置普通用户可以使用系统环境配置
[root@servera ~]# vim /etc/sysctl.conf
[root@severa ~]# sysctl -p
net.ipv4.ping_group_range = 0 200000
设置contsvc用户的密码
[root@servera ~]# echo redhat | passwd --stdin contsvc
Changing password for user contsvc.
passwd: all authentication tokens updated successfully.
验证普通用户是否可以使用podman服务
[root@servera ~]# ssh contsvc@servera
The authenticity of host 'servera (172.25.250.7)' can't be established.
ECDSA key fingerprint is SHA256:1507YKxFMsfKUk7KYZfRo0Dm+yaTW7qOrXWghM3GgBw.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Waring: Permanently added 'servera,172.25.250.7' (ECDSA) to the list of known hosts.
contsvc@servera's password:
Hello RHCSA!
[contsvc@servera user]$ podman version
Client: Podman Engine
Version: 4.2.0
API Version: 4.2.0
Go Version: go1.18.4
Built: Tue Aug 30 22:20:51 2022
OS/Arch: linux/amd64
注:到这里基础的环境就准备好了,后面就可以开始进行实验了
登入到contsvc用户下,一定要ssh登入的,su -的方式不行
创建映射挂载的目录
[contsvc@servera ~]$ mkdir -pv /home/contsvc/container_journal
mkdir: created directory '/home/contsvc/container_journal'
• 登入到注册镜像中心
[contsvc@servera ~]$ podman login
Username:
Password:
Login Succeeded!
下载Nginx镜像到本地
[contsvc@servera ~]$ podman search nginx
考试的时候直接下载镜像可能下载不了,需要告诉podman从那里去下载
[contsvc@servera ~]$ podman pull docker.io/library/nginx:latest
Trying to pull docker.io/library/nginx:latest...
Getting image source signatures
Copying blob 7247f6e5c182 skipped: already exists
Copying blob 7a6db449b51b skipped: already exists
Copying blob ca1981974b58 skipped: already exists
Copying blob d4019c921e20 skipped: already exists
Copying blob 7cb804d746d4 skipped: already exists
Copying blob e7a561826262 skipped: already exists
Copying config 2b7d6430f7 done
Writing manifest to image destination
Storing signatures
2b7d6430f78d432f89109b29d88d4c36c868cdbf15dc31d2132ceaa02b993763
• 创建运行的容器并挂载存储
[contsvc@servera ~]$ podman run -it -d --name sunserver -v /home/contsvc/container_journal:/var/log/journal:Z nginx
68f3da1e783508d2d0b1d66468eec62bcef082413a91f3867dc4bebe2d500fc3
[cotsvc@servera ~]$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68f3da1e7835 docker.io/library/nginx:latest nginx -g daemon o... 5 seconds ago Up 5 seconds ago sunserver
考试的时候直接下载镜像可能下载不了,需要告诉podman从那里去下载,需要使用如下的创建容器的命令
[contsvc@servera ~]$ podman run -it -d --name sunserver -v /home/contsvc/container_journal:/var/log/journal:Z registry.lab.example.com/library/nginx
podman run --name <题目中要求的容器名>
-it ## 给他一个终端
-d ## 允许后台运行
-v /home/contsvc/container_journal:/var/log/journal:Z ## 挂载本地存储映射关系,再给一个大Z权限
registry.lab.example.com/library/nginx ## 上面podman search找到的镜像完整路径
进入到sunserver容器内执行命令
[contsvc@servera ~]$ podman exec -it sunserver /bin/bash
root@68f3da1e7835:~# echo RHCSA > /var/log/journal/rhcsa.log
• 宿主机上验证rhcsa.log 文件
[contsvc@servera ~]$ cd container_journal/
[contsvc@servera container_journal]$ cat rhcsa.log
RHCSA
设置sunserver容器为系统服务,并设置为开机自启
• 创建当前用户的systemd目录
[contsvc@servera ~]$ mkdir -pv ~/.config/systemd/user
mkdir: created directory '/home/contsvc/.config/systemd'
mkdir: created directory '/home/contsvc/.config/systemd/user'
切换到本地用户的systemd服务下
[contsvc@servera ~]$ cd ~/.config/systemd/user/
创建容器的systemd服务
[contsvc@servera user]$ podman generate systemd --name sunserver --files
/home/contsvc/.config/systemd/user/container-sunserver.service
[contsvc@servera user]$ ls
container-sunserver.service
加载新服务文件
[contsvc@servera user]$ systemctl --user daemon-reload
开启普通用户使用systemd自我管理权限
[contsvc@servera user]$ loginctl enable-linger
设置sunserver容器为开机自启
[contsvc@servera user]$ systemctl --user enable container-sunserver.service
Created symlink /home/contsvc/.config/systemd/user/default.target.wants/container-sunserver.service → /home/contsvc/.config/systemd/user/container-sunserver.service.
验证sunserver容器是否是systemd服务
[contsvc@servera user]$ podman stop sunserver
sunserver
[contsvc@servera user]$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
通过systemd系统方式启动sunserver服务
[contsvc@servera user]$ systemctl --user start container-sunserver.service
查看sunserver服务的状态
[contsvc@servera user]$ systemctl --user status container-sunserver.service
● container-sunserver.service - Podman container-sunserver.service
Loaded: loaded (/home/contsvc/.config/systemd/user/container-sunserver.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2022-09-03 20:55:47 CST; 7s ago
Docs: man:podman-generate-systemd(1)
Process: 2506 ExecStart=/usr/bin/podman start sunserver (code=exited, status=0/SUCCESS)
Main PID: 2519 (conmon)
CGroup: /user.slice/user-1000.slice/[email protected]/container-sunserver.service
├─2516 /usr/bin/slirp4netns --disable-host-loopback --mtu=65520 --enable-sandbox --enable-seccomp --enable-ipv6 -c -e 3 -r 4 --net>
├─2519 /usr/bin/conmon --api-version 1 -c 68f3da1e783508d2d0b1d66468eec62bcef082413a91f3867dc4bebe2d500fc3 -u 68f3da1e783508d2d0b1>
└─68f3da1e783508d2d0b1d66468eec62bcef082413a91f3867dc4bebe2d500fc3
├─2528 nginx: master process nginx -g daemon off;
└─2556 nginx: worker process
查看sunserver容器的状态
[contsvc@servera user]$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68f3da1e7835 docker.io/library/nginx:latest nginx -g daemon o... 13 minutes ago Up 13 seconds ago sunserver