#######################################################################3
###################vsftpd服务###########################################
#########################################################################
1.什么时ftp
2.安装ftp
yum install vsftpd -y
systemctl start vsftpd
systemctl stop firewalld
systemctl enable vsftpd
setenforce 0
lftp ip ##能登陆并且显示,表示安装成功
3.vsftpd文件信息
/var/ftp ##默认发布目录
/etc/vsftpd ##配置目录
[root@localhost Desktop]# vim /etc/vsftpd/vsftpd.conf
4.vsftpd服务的配置参数
1)匿名用户设定
anonymous_enable=YES|NO ##匿名用户登陆限制
#<匿名用户上传>
vim /etc/vsftpd/vsftpd.conf
write_enable=YES
anon_upload_enable=YES
chgrp ftp /var/ftp/pub
chmod 775 /var/ftp/pub
eg:
[root@localhost Desktop]# ll -ld /var/ftp/pub/
drwxr-xr-x. 2 root ftp 6 Mar 7 2014 /var/ftp/pub/
[root@localhost Desktop]# lftp 172.25.254.141
lftp 172.25.254.141:~> cd pub/
lftp 172.25.254.141:/pub> put /etc/passwd
2005 bytes transferred
lftp 172.25.254.141:/pub> quit
#<匿名用户家目录修改> #################
anon_root=/direcotry
[root@localhost Desktop]# lftp 172.25.254.141
lftp 172.25.254.141:~> pwd
ftp://172.25.254.141
#<匿名用户上传文件默认权限修改>
anon_umask=xxx
#<匿名用户建立目录>
anon_mkdir_write_enable=YES|NO
[root@localhost Desktop]# lftp 172.25.254.141
lftp 172.25.254.141:~> cd pub/
lftp 172.25.254.141:/pub> mkdir test
mkdir ok, `test' created
#<匿名用户下载>
anon_world_readable_only=YES|NO ##设定参数值为no表示匿名用户可以下载
lftp 172.25.254.141:/pub> get passwd
2005 bytes transferred
#<匿名用户删除>
anon_other_write_enable=YES|NO
lftp 172.25.254.141:/pub> rm -fr passwd
rm ok, `passwd' removed
#<匿名用户使用的用户身份修改>
chown_uploads=YES
chown_username=student
#<最大上传速率>
anon_max_rate=102400
lftp student@172.25.254.141:~> put /etc/vimrc
1982 bytes transferred in 10 seconds (197b/s)
#<最大链接数>
max_clients=2
2)本地用户设定
local_enable=YES|NO ##本地用户登陆限制
write_enable=YES|NO ##本地用户写权限限制
#<本地用户家目录修改> ###
local_root=/directory
#<本地用户上传文件权限> ################33333
local_umask=xxx
local_umask=022
lftp student@172.25.254.141:~> ls /etc/passwd
-rw-r--r-- 1 0 0 2040 Apr 11 03:05 passwd
local_umask=044
-rw-w--w-- 1 1000 1000 2040 Apr 11 03:15 passwd
local_umask=066
-rw------- 1 1000 1000 813 Apr 11 03:21 yum.conf
#<限制本地用户浏览/目录>
所有用户被锁定到自己的家目录中
chroot_local_user=YES
chmod u-w /home/*
lftp student@172.25.254.141:~> cd /
lftp student@172.25.254.141:/> ls
lrwxrwxrwx 1 0 0 7 May 07 2014 bin -> usr/bin
dr-xr-xr-x 4 0 0 4096 Jul 10 2014 boot
drwxr-xr-x 19 0 0 2960 Apr 11 02:37 dev
drwxr-xr-x 134 0 0 8192 Apr 11 03:10 etc
drwxr-xr-x 4 0 0 29 Apr 11 03:05 home
dr-xr-xr-x 10 0 0 4096 May 07 2014 iso
lrwxrwxrwx 1 0 0 7 May 07 2014 lib -> usr/lib
lrwxrwxrwx 1 0 0 9 May 07 2014 lib64 -> usr/lib64
drwxr-xr-x 2 0 0 6 Mar 13 2014 media
drwxr-xr-x 2 0 0 43 Apr 11 02:33 mnt
drwxr-xr-x 3 0 0 15 Jul 10 2014 opt
dr-xr-xr-x 166 0 0 0 Apr 11 02:04 proc
dr-xr-x--- 15 0 0 4096 Apr 11 03:22 root
drwxr-xr-x 38 0 0 1200 Apr 11 02:52 run
lrwxrwxrwx 1 0 0 8 May 07 2014 sbin -> usr/sbin
drwxr-xr-x 2 0 0 6 Mar 13 2014 srv
dr-xr-xr-x 13 0 0 0 Apr 11 02:04 sys
drwxrwxrwt 12 0 0 4096 Apr 11 02:50 tmp
drwxr-xr-x 13 0 0 4096 May 07 2014 usr
drwxr-xr-x 23 0 0 4096 Apr 11 02:39 var
没改权限
lftp student@172.25.254.141:~> cd /
cd: Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
改过权限
lftp student@172.25.254.141:/> ls
-rw------- 1 1000 1000 861 Apr 11 03:19 group
-rw-r--r-- 1 1000 1000 2040 Apr 11 03:15 passwd
-rw--w--w- 1 1000 1000 1982 Apr 11 03:23 vimrc
-rw------- 1 1000 1000 813 Apr 11 03:21 yum.conf
用户黑名单建立 #####################33
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
用户白名单建立
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
#<限制本地用户登陆>
vim /etc/vsftpd/ftpusers ##用户黑名单
vim /etc/vsftpd/user_list ##用户临时黑名单
[root@localhost Desktop]# vim /etc/vsftpd/ftpusers
student
[root@localhost Desktop]# lftp 172.25.254.141 -u student
Password:
lftp student@172.25.254.141:~> cd /
cd: Login failed: 530 Login incorrect. ##530认证失败
用户白名单设定
userlist_deny=NO
/etc/vsftpd/user_list ##参数设定,此文件变成用户白名单,只在名单中出现的用户可以登陆ftp
#<ftp虚拟用户的设定>
创建虚拟帐号身份)
vim /etc/vsftpd/loginusers ##文件名称任意
ftpuser1
123
ftpuser2
123
ftpuser3
123
db_load -T -t hash -f /etc/vsftpd/loginusers loginusers.db
vim /etc/pam.d/ckvsftpd ##文件名称任意
account required pam_userdb.so db=/etc/vsftpd/loginusers
auth required pam_userdb.so db=/etc/vsftpd/loginusers
vim /etc/vsftpd/vsftpd.conf
pam_service_name=ckvsftpd
guest_enable=YES
eg:
[root@localhost ~]# vim /etc/vsftpd/userfile
user1
123
user2
123
user3
123
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# db_load -T -t hash -f userfile userfile.db
[root@localhost vsftpd]# ls
chroot_list userfile user_list vsftpd_conf_migrate.sh
ftpusers userfile.db vsftpd.conf vsftpd.conf.rpmsave
[root@localhost vsftpd]# cat userfile.db
��~^�O����эh^123user2[root@localhost vsftpd]# cd /etc/pam.d/
[root@localhost pam.d]# vim pamftp
account required pam_userdb.so db=/etc/vsftpd/userfile
auth required pam_userdb.so db=/etc/vsftpd/userfile
[root@localhost pam.d]# vim /etc/vsftpd/vsftpd.conf
pam_service_name=pamftp
guest_enable=yes
guest_username=student ##############
[root@localhost pam.d]# systemctl restart vsftpd
测试:
[kiosk@foundation41 Desktop]$ lftp 172.25.254.241 -u user1
口令:
lftp user1@172.25.254.241:~> quit
[kiosk@foundation41 Desktop]$ lftp 172.25.254.241 -u user2
口令:
虚拟帐号身份指定)
guest_username=ftpuser
chmod u-w /home/ftpuser
虚拟帐号家目录独立设定)2
vim /etc/vsftpd/vsftpd.conf
local_root=/ftpuserhome/$USER
user_sub_token=$USER
mkdir /ftpuserhome
chgrp ftpuser /ftpuserhome
chmod g+s /ftpuserhome
mkdir /ftpuserhome/ftpuser{1..3}
虚拟帐号配置独立)
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/userconf
mkdir -p /etc/vsftpd/userconf
vim /etc/vsftpd/userconf/ftpuser1
在此文件中设定配置文件中的所有参数,此文件的优先级搞
#######################第十单元selinux 的管理
一、基本 SELINUX 安全性概念
[root@localhost userdir]# rm -fr /etc/vsftpd/vsftpd.conf
[root@localhost userdir]# yum reinstall vsftpd.x86_64 -y
......
完毕!
[root@localhost userdir]# vim /etc/sysconfig/selinux
SELINUX=disabled
[root@localhost userdir]# reboot
• SELINUX ( 安全增强型 Linux ) 是可保护你系统安全性的额外机制
• 在某种程度上 , 它可以被看作是与标准权限系统并行的权限系统。在常规模式中 , 以用户身份运行进程 ,并且系统上的文件和其他资源都设置了权限 ( 控制哪些用户对哪些文件具有哪些访问权 SELINUX 的
另一个不同之处在于 , 若要访问文件 , 你必须具有普通访
• 问权限和 SELINUX 访问权限。因此 , 即使以超级用户身份 root 运行进程 , 根据进程以及文件或资源的 SELinux 安全性上下文可能拒绝访问文件或资源限 ) 标签
二、示例:
Apache:/var/www/html、/tmp、/var/tmp。
• 在无 selinux 保护时 , 恶意人员可以尝试利用 web 服务器中的安全漏洞强行进入系统。如果成功 , 将会控制以用户apache 身份运行的进程 , 这时再由一个本地安全漏洞就可能使攻击者获得超级用户的访问权限
三、selinux 安全上下文访问规则
• WEB 服务器的 HTTPD 进程设置了 SELINUX 上下文system_u:system_r:httpd_t 标签。该上下文的重要部分是第三个用冒号分隔的字段 SELINUX 类型 : httpd_t
• 系统上的文件和资源也设置了 SELINUX 上下文标签 , 并且重要的部分是 SELINUX 类型。例如 , /var/www/html 中的文件具有类型 httpd_sys_content_t 。 /tmp 和/var/tmp 中的文件通常具有类型 tmp_t
• Seliux 策略具有允许以 httpd_t 身份运行的进程访问标记为 httpd_sys_content_t 的文件的规则。没有规则允许这些进程访问标记有 tmp_t 的文件 , 因此将拒绝这些访问 , 即使常规文件权限指出应该允许这些访问
四、SELINUX 模式
Apache:/var/www/html、/tmp、/var/tmp SELinux Enforcing
强制模式 : SELINUX 主动拒绝访问 尝试读取类型上下文为 tmp_t的 web 服务器。在强制模式中 ,SELINXU 既记录冲突 , 也强制执行规则
Apache:/var/www/html、/tmp、/var/tmp SELinux Permissive
许可模式 : 通常用于对问题进行故障排除。在许可模式下 , 即使没有明确规则 , SELINUX 也允许所有交互 , 并且记录所有被拒绝的交互。此模式可以用于确定你是否有 SELINUX问题。无需重新引导即可从强制模式转为许可模式 , 或再从许可模式转回强制模式
五、显示及更改 SELINUX 模式
• getenforce
• setenforce 0|1
– 0 表示 permissive # 警告
– 1 表示 enforcing # 强制
六、更改 selinux 的开机状态
• vim /etc/sysconfig/selinux
注:disable表示关闭,enforcing表示强制,permissive表示警告,disable状态切换到permissive状态或enforcing状态需要重启系统
七、显示 SELinux 文件上下文
• 什么确定文件的初始 SELinux 上下文 ? 通常是父目录。将父目录的上下文指定给新创建的文件。这对 vimcp 和 touch 等命令其作用 , 但是 , 如果文件是在其他位置创建的并且保留了权限 ( 与 mv 或 cp -a 一样 ) 则还将保留 SELinux 上下文
• 许多处理文件的命令具有一个用于显示或设置 SELinux 上下文的选项 ( 通常是 -Z ) 。例如 , ps 、 ls 、 cp 和 mkdir 都使用 -Z 选项显示或设置 SELinux 上下文
• 显示上下文
– ps axZ
– ps -ZC
– ls -Z
八、修改 selinux 安全上下文
• chcon -t
– 一次性定制安全上下文,执行 restorecon 刷新后还原
• semanage fcontext
– 永久更改文件的上下文
九、semanage 命令
• restorecon 是 policycoreutil 软件包的一部分
• semanage 是 policycoreutil-python 软件包的一部分
• semanage fcontext 可用与显示或修改 restorrecon 用来设置默认文件上下文的规则
• semanage fcontext 使用扩展正则表达式来指定路径和文件名。 fcontext 规则中最常用的扩展正则表达式是(/.*)?, 表示随意地匹配 / 后跟任何数量的字符
• semanage fcontext 将递归地与在表达式前面列出的目录以及该目录中的所有内容相匹配
九、示例:
[root@serverX ~]# mkdir /virtual
[root@serverX ~]# touch /virtual/index.html
[root@serverX ~]# ls -Zd /virtual/
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /virtual/
[root@serverX ~]# ls -Z /virtual/
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html
[root@serverX ~]# semanage fcontext -a -f "" -t httpd_sys_content_t
'/virtual(/.*)?'
[root@serverX ~]# restorecon -RFvv /virtual/
restorecon reset /virtual context system_u:object_r:default_t:s0-
>system_u:object_r:httpd_sys_content_t:s0
restorecon reset /virtual/index.html context system_u:object_r:default_t:s0-
>system_u:object_r:httpd_sys_content_t:s0
[root@serverX ~]# ls -Zd /virtual/
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /virtual/
[root@serverX ~]# ls -Z /virtual/
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 index.html
十管理 SELinux 布尔值
• SELinux 布尔值是更改 SELinux 策略行为的开关。
SELinux 布尔值是可以启用或禁用的规则。安全管理员可
以使用 SELinux 布尔值来调整策略 , 以有选择地进行调整
• 许多软件包都具有 man page *_selinux(8), 其中详细说明
了所使用的一些布尔值 ; man -k ‘_selinux’ 可以轻松地找
到这些手册
• getsebool 用于显示布尔值 , setsebool 用于修改布尔值
• setsebool -P 修改 SELinux 策略 , 以永久保留修改。
semanage boolean -l 将显示布尔值是否永久
十一、示例
[root@serverX ~]# getsebool -a
abrt_anon_write --> off
.....
[root@serverX ~]# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> off
[root@serverX ~]# setsebool httpd_enable_homedirs on
[root@serverX ~]# semanage boolean -l |grep httpd_enable_homedirs
httpd_enable_homedirs
-> off Allow httpd to read home directories
[root@serverX ~]# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> on
[root@serverX ~]# setsebool -P httpd_enable_homedirs on
[root@serverX ~]# semanage boolean -l |grep httpd_enable_homedirs
httpd_enable_homedirs
-> on
Allow httpd to read home directories
eg:
[root@localhost ~]# lftp 172.25.254.241 -u student
口令:
lftp student@172.25.254.241:~> cd pub
cd: Access failed: 550 Failed to change directory. (/home/student/pub)
lftp student@172.25.254.241:~> quit
[root@localhost ~]# ll /home/
总用量 12
dr-x------. 5 2000 deho 4096 Apr 1 04:13 asasin
dr-x------. 5 sareo deho 4096 Apr 1 04:13 sareo
dr-x------. 5 student student 4096 Apr 7 02:20 student
dr-x------. 4 taromati taromati 88 Apr 1 02:20 taromati
[root@localhost ~]# chmod 775 /home/*
[root@localhost ~]# lftp 172.25.254.241 -u student
口令:
lftp student@172.25.254.241:~> put /etc/group
921 bytes transferred
lftp student@172.25.254.241:~> quit
[root@localhost ~]# mkdir /hello
[root@localhost ~]# touch /hello/file{1..10}
[root@localhost ~]# ls /hello/
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anon_root=/hello ##修改本地用户家目录为/hello
[root@localhost ~]# ls -Zd /hello/
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /hello/
[root@localhost ~]# chcon -t public_content_t /hello/ -R ##临时修改家目录
[root@localhost ~]# systemctl restart vsftpd.service
[root@localhost ~]# vim /etc/sysconfig/selinux
SELINUX=enforcing ##开启SELINUX服务
[root@localhost ~]# reboot ##重启
[root@localhost ~]# systemctl start vsftpd.service
[root@localhost ~]# ls ##重启之后看不见/hello家目录
anaconda-ks.cfg Documents Music Public Videos
Desktop Downloads Pictures Templates
[root@localhost ~]# vim /etc/sysconfig/selinux
SELINUX=disabled ##关闭SELINUX服务
[root@localhost ~]# reboot ##重启
Connection to 172.25.254.241 closed by remote host.
Connection to 172.25.254.241 closed.
[root@localhost ~]# systemctl start vsftpd.service
[root@localhost ~]# semanage fcontext -l |grep /var/ftp/
/var/ftp/bin(/.*)? all files system_u:object_r:bin_t:s0
/var/ftp/etc(/.*)? all files system_u:object_r:etc_t:s0
/var/ftp/lib(/.*)? all files system_u:object_r:lib_t:s0
/var/ftp/lib/ld[^/]*.so(.[^/]*)* regular file system_u:object_r:ld_so_t:s0
[root@localhost ~]# semanage fcontext -a -t public_content_t '/hello(/.*)?' ##永久设定匿名用户家目录
[root@localhost ~]# restorecon /hello/ -FvvR
restorecon reset /hello context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
restorecon reset /hello/file1 context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
restorecon reset /hello/file2 context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
restorecon reset /hello/file3 context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
restorecon reset /hello/file4 context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
restorecon reset /hello/file5 context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
restorecon reset /hello/file6 context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
restorecon reset /hello/file7 context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
restorecon reset /hello/file8 context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
restorecon reset /hello/file9 context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
restorecon reset /hello/file10 context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
测试
[kiosk@foundation41 Desktop]$ lftp 172.25.254.241
lftp 172.25.254.241:~> ls
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file1
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file10
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file2
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file3
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file4
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file5
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file6
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file7
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file8
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file9
lftp 172.25.254.241:/> quit
[kiosk@foundation41 Desktop]$ lftp 172.25.254.241
lftp 172.25.254.241:~> ls
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file1
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file10
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file2
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file3
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file4
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file5
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file6
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file7
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file8
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file9
lftp 172.25.254.241:/> quit
[kiosk@foundation41 Desktop]$ lftp 172.25.254.241
lftp 172.25.254.241:~> ls
lftp 172.25.254.241:/> quit
[kiosk@foundation41 Desktop]$ lftp 172.25.254.241
lftp 172.25.254.241:~> LS
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file1
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file10
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file2
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file3
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file4
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file5
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file6
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file7
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file8
-rw-r--r-- 1 0 0 0 Apr 10 06:59 file9
lftp 172.25.254.241:/>
十二、监控 SELinux 冲突
• 必须安装 setroubleshoot-server 软件包 , 才能将SELinux 消息发送至 /var/log/messages
• etroubleshoot-server 侦听/var/log/audit/audit.log 中的审核信息并将简短摘
要发送至 /var/log/messages
• 摘要包括 SELinux 冲突的唯一标识符 ( UUIDs ),可用于收集更多信息。 Sealert -l UUID 用于生成
特定事件的报告。 Sealert -a/var/log/audit/audit.log 用于在该文件中生成所有事件的报告
十三、示例
[root@demo ~]# echo www.westos.org /root/file1
[root@demo ~]# mv /root/file1 /var/www/html/
[root@demo ~]# service httpd start
[root@demo ~]# elinks -dump http://localhost/file1
Forbidden
You don't have permission to access /file1 on this server.
[root@demo ~]# tail -1 /var/log/audit/audit.log
....
type=AVC msg=audit(1312818090.800:25721): avc: denied { getattr } for
pid=29653 comm="httpd"
Path="/var/www/html/file1" dev=dm-1 ino=54309
scontext=unconfined_u:system_r:httpd_t:s0
tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file
....
[root@demo ~]# tail /var/log/messages
十四、示例
[root@demo ~]# tail /var/log/messages
.....
Aug 8 23:41:30 demo setroubleshoot: SELinux is preventing /usr/sbin/httpd
"getattr" access to /var/www/html/file1.
For complete SELinux messages. run sealert -l bbb10235-7683-4387-977d-
a34c141bba86
[root@demo ~]# sealert -l bbb10235-7683-4387-977d-a34c141bba86
Summary:
SELinux is preventing /usr/sbin/httpd "getattr" access to /var/www/html/file1.
Detailed Description:
... ...
You can restore the default system context to this file by executing the
restorecon command. restorecon
'/var/www/html/file1', if this file is a directory, you can recursively restore using
restorecon -R
'/var/www/html/file1'.
Fix Command:
/sbin/restorecon '/var/www/html/file1'
十五、示例
[ 执行事件报告中给出的解决命令 :
[root@demo ~]# restorecon /var/www/html/file1
[root@demo ~]# elinks -dump http://localhost/file1
#######################第十一单元系统恢复技术
一、系统引导过程概述
通电---->bios 初始化---->grub2 磁盘引导阶段---->grub2 文件引导阶段---->指定 boot 所在分区---->
启动内核,只读挂在 / 设备---->启动 init 程序进入初始化阶段---->启动 systemd 初始化进程---->读取 /etc/systemd/中的文件---->启动程序---->启动登陆环境
二、bios 初始化
• 基本输入 / 输出系统 ( BIOS ) 是内置于标准 x86/x86-64硬件的固件接口 , 将硬件置于已知状态并准备好系统以加载操作系统
• 出现什么情况 ?
– 检测并初始化硬件
– 确定从中引导的设备
• 可能出现了什么错误 ?
– 错误或异常 BIOS 设置
– 错误引导设备顺序
• 可以如何中断或影响 ?
– 按特定于供应商的键
– 使用特定于供应商的配置实用程序
– 通常 , <F12> 可以执行一次引导顺序覆盖
三、grub 磁盘引导阶段
• MBR
– mbr 的作用是为了记录 /boot 目录所在分区位置
– 磁盘的 0 磁道 1 扇区的前 446 字节
– dd if=/dev/zero of=/dev/xda bs=446 count=1
eg:
[root@localhost ~]# dd if=/dev/zero of=/dev/vda bs=446 count=1
1+0 records in
1+0 records out
446 bytes (446 B) copied, 0.000140221 s, 3.2 MB/s
[root@localhost ~]# reboot
Connection to 172.25.254.141 closed by remote host.
Connection to 172.25.254.141 closed.
[root@foundation41 ~]# rht-vmctl view desktop
Force off 关闭虚拟机
灯泡
open
Add Hardware Boot Options Aplay
重新开启
Troubleshooting————> Rescue a Red Enterprise Linux system-->continue-->ok--->ok
df
chroot /mnt/sysimage/
grub2-install /dev/vda
Force off Boot Options
灯泡
– grub2-install /dev/xda
四、grub 文件引导阶段
• /boot/grub2/grub.cfg
– 指定 /boot 分区位置
– 加载内核
– 启动系统初始化进程
– grub2-mkconfig
eg:
[root@localhost grub2]# cd /boot/grub2
[root@localhost grub2]# ls
device.map fonts grub2.cfg grubenv i386-pc locale themes
[root@localhost grub2]# rm -fr grub2.cfg
[root@localhost grub2]# grub2-mkconfig > /boot/grub2/grub2.cfg ##恢复/boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-123.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-123.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-946cb0e817ea4adb916183df8c4fc817
Found initrd image: /boot/initramfs-0-rescue-946cb0e817ea4adb916183df8c4fc817.img
done
[root@localhost grub2]# cat grub2.cfg
....
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 9bf6b9f7-92ad-441b-848e-0257cbb883d1
else
search --no-floppy --fs-uuid --set=root 9bf6b9f7-92ad-441b-848e-0257cbb883d1
fi
linux16 /boot/vmlinuz-3.10.0-123.el7.x86_64 root=UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 ro vconsole.keymap=us console=tty0 crashkernel=auto vconsole.font=latarcyrheb-sun16
initrd16 /boot/initramfs-3.10.0-123.el7.x86_64.img
}
*2
[root@localhost grub2]# rm -fr grub2.cfg
重启
grub>set root='hd0,msdos1'
grub>linux16 /boot/vmlinuz-3.10.0-123.el7.x86_64 ro root=/dev/vda1
grub>initrd16 /boot/initramfs-3.10.0-123.el7.x86_64.img
grub>boot
[root@localhost grub2]# grub2-mkconfig > /boot/grub2/grub2.cfg
五、内核引导阶段
•检测硬件设备
•设备驱动初始化
•将 / 只读挂在
•载入初始进程 systemd
•内核文件丢失请重新安装内核
六、systemd 初始化
•开启 selinux 和 systemd-tools
•加载内核参数
•加载系统时钟,键盘,主机名称
•读写挂载 / 文件系统
•激活 raid , lvm 设备
•激活系统配额
•启动 multi-user.target.wants 中的所有服务脚本
•启用虚拟控台
•启动图形
七、启动级别
•runlever0.target -> poweroff.target
•runlever1.target -> rescue.target
•runlever2.target -> multi-user.target
•runlever3.target -> multi-user.target
•runlever4.target -> multi-user.target
•runlever5.target -> grapical.target
•runlever6.target -> reboot.target
八、设定启动级别
• systemctl set-default + 启动级别
• /etc/systemd/system/default.target