第六天(12月1日)
今天是课程学习的最后一天,主要内容是关于增强用户安全性、编写shell脚本以及故障排错。
RHCE认证培训+考试七天实录 系列文章 http://www.linuxidc.com/search.aspx?where=nkey&keyword=15815
1、增强用户安全性
Linux系统中的root用户权限过大,所以在实际使用中一般都是以普通用户的身份登录,当需要时可以切换到root用户身份。切换用户身份使用su命令。
但是我们可能并不希望所有用户都能切换到root身份,而是只想指定某个用户可以切换,比如只允许zhangsan用户使用su命令切换身份。
首先修改配置文件/etc/pam.d/su,然后将zhangsan加入到wheel组(只有该组的成员可以切换)。
利用su命令切换到root用户,必须要输入root用户的密码,这样也不利于系统安全性,所以更常被使用的是sudo命令。
sudo命令的作用主要在于能够允许经过授权的个别普通用户以root权限执行一些授权使用的管理命令。
如以普通用户zhangsan的身份创建用户,会提示没有权限:
[zhangsan@localhost ~]$ useradd test
-bash: /usr/sbin/useradd: 权限不够
下面使用sudo命令以root权限去执行命令。注意,普通用户使用sudo执行命令时会要求提供自己的密码进行验证。
[zhangsan@localhost ~]$ sudo useradd test
[sudo] password for zhangsan:
zhangsan is not in the sudoers file. This incident will be reported.
zhangsan使用sudo命令仍然无法创建用户,这是因为在RHEL中只有被授权的用户才能执行sudo命令,而且使用sudo也只能执行那些被授权过的命令。
所以要使用sudo命令首先必须要经过管理员的授权设置,需要修改配置文件“/etc/sudoers”。
例如授权普通用户zhangsan可以通过sudo方式执行所有的命令:
zhangsan ALL=ALL
授权zhangsan只能执行useradd和userdel命令:
zhangsan ALL=/usr/sbin/useradd,/usr/sbin/userdel
为了省去普通用户执行sudo命令时需要输入密码的麻烦,可以这样设置:
zhangsan ALL=NOPASSWD:/usr/sbin/useradd,/usr/sbin/userdel
例题:设立组帐号“managers”,授权组内的各成员用户可以添加、删除、更改用户帐号。
操作步骤:
(1)首先创建managers组,并向组中添加2个用户:natasha和harry。
[root@localhost ~]# groupadd managers
[root@localhost ~]# useradd natasha
[root@localhost ~]# passwd natasha
[root@localhost ~]# gpasswd -a natasha managers
[root@localhost ~]# useradd harry
[root@localhost ~]# passwd harry
[root@localhost ~]# gpasswd -a harry managers
(2)配置/etc/sudoers文件。
# vim /etc/sudoers
在组名的前面要加上%。
(3)以natasha用户身份进行测试。
[root@localhost ~]# su – natasha
[natasha@localhost ~]$ useradd user1
-bash: /usr/sbin/useradd: 权限不够
[natasha@localhost ~]$ sudo useradd user1 可以执行useradd命令
[natasha@localhost ~]$ sudo touch test.txt 不可以执行touch命令
Sorry, user natasha is not allowed to execute ‘/bin/touch test.txt’ as root on localhost.localdomain.
2、编写shell脚本
shell脚本是Linux中非常重要的一项应用,但是也比较难以掌握。
在编写shell脚本时的一些基本问题:
(1)文件的第一行必须是“#!/bin/bash”,表示用bash shell解释执行脚本。
(2)脚本编写完之后,必须使文件可执行,可以用chmod命令赋予其可执行权限。
(3)脚本文件名一般以“.sh”结尾。
(4)如何执行脚本程序。一种方法是将脚本文件所在目录添加进路径变量PATH中,另一种方法是指定脚本文件路径,如要执行当前目录下的一个名为test.sh的脚本可以使用“./test.sh”的形式。一般习惯采用后一种方式。
shell脚本中的一些基本概念:
(1)变量,变量名一般用大写字母。显示变量的值用$,如果变量名中有空格,应该“${变量名}”。如:
NAME=VBird
echo $name 结果:VBird
(2)双引号、单引号、倒引号
双引号表示弱引用,单引号表示强引用,倒引号里的命令会被执行。如:
MYNAME=”$NAME its me”
echo $MYNAME 结果:VBird its me
MYNAME=’$NAME its me’
echo $MYNAME 结果:$NAME its me
双引号里的变量会被执行,单引号里的变量成了字符本身。
TODAY=`date`
echo $TODAY
2012年 11月 08日 星期四 01:17:49 CST
倒引号里的命令会被执行。
TODAY=`date +%F` 指定只显示日期
echo $TODAY
2012-11-08
touch aa.$TODAY 创建以当前日期结尾的文件
ll aa.*
-rw-r–r–. 1 root root 0 11月 8 01:21 aa.2012-11-08
例题:创建一个名为/root/script.sh的脚本,让其提供以下特性:
当运行/root/script.sh all时,输出none。
当运行/root/script.sh none时,输出all。
当没有任何参数或者参数不是all或none时,其向stderr产生以下的输出:/root/script.sh all | none
操作步骤:
首先生成脚本文件:
# vim /root/script.sh
case是多分支选择语句,$1表示执行脚本时后面跟的第一个参数。
保存退出,赋予执行权限:
# chmod 755 script.sh
测试:
[root@localhost ~]# ./script.sh none
all
[root@localhost ~]# ./script.sh all
none
[root@localhost ~]# ./script.sh afdadfda
/root/script.sh all | none
3、Linux引导过程
(1)启动模式与引导流程
Linux默认有7种运行模式:
0:关机状态
1:单用户模式
2:字符界面的多用户模式(不支持网络)
3:字符界面的完整多用户模式
4:未分配使用
5:图形界面的多用户模式
6:重新启动查看运行模式
其中最常用的是1、3、5三种模式。将启动模式设为5,开机自动进入图形界面;设为3,开机自动进入字符界面;设为0,进入单用户模式,用于密码破解或故障修复。
执行runlevel命令可以查看当前工作模式:
[root@localhost rc5.d]# runlevel
N 5
修改配置文件“/etc/inittab”可以改变启动模式(修改Id后面的数字):
id:5:initdefault:
Linux系统的引导流程:
在读取/etc/inittab文件确定启动模式之后,会依次执行三个脚本文件:
/etc/rc.d/rc.sysinit:由init进程调用执行,完成设置网络、主机名、加载文件系统等初始化工作。
/etc/rc.d/rc:选择哪种启动模式,就执行哪个目录中的脚本文件,用于加载或终止系统服务。
/etc/rc.local:由rc脚本调用执行,保存用户定义的需开机后自动执行的命令。
(2)grub引导程序
微软的引导程序ntldr不兼容Linux,如果要安装Windows和Linux双系统,应该先装Windows,此时Windows会将ntldr写入MBR主引导扇区,然后再装Linux,Linux会将grub写入MBR主引导扇区,并覆盖ntldr。由于grub兼容Windows,这样就可以让双系统共存。而如果先安装Linux,再装Windows,MBR主引导扇区里最后存放的是ntldr,这样就只能启动Windows系统。
在RHSCA的课程中介绍过,在系统启动时可以通过设置grub进入单用户模式对系统进行修复,如破解root用户密码等。但这样任何人都可以修改root用户密码,会降低系统安全性,所以可以为grub设置密码,这样只有输入grub密码才能设置进入单用户模式。
设置grub密码需要修改配置文件/etc/grbu.conf
# vim /etc/grub.conf
在title行的上面增加一行:
password=abc123,
如果像上面这样将密码用明文存放,也会降低安全性,所以这里一般都是设置的MD5加密后的密码。
在Linux中可以执行“grub-md5-crypt”命令对字符串进行MD5加密:
[root@localhost ~]# grub-md5-crypt
Password:
Retype password:
$1$sb.zu0$654EV43pY35h6a9BVnaBH0
在系统启动时选择进入grub就要按p键后输入密码:
正确输入密码之后才可以按e键设置进入单用户模式:
(3)利用救援模式修复系统
救援模式类似于Windows中的WinPE,可以不依赖硬盘而用别的介质启动系统,从而对系统进行修复,可以通过系统安装光盘或者是网络来进入救援模式。
例:利用救援模式修复inittab文件错误。
这里先人为地造成一个故障:将/etc/inittab文件中的启动模式改为9,这样就会导致系统无法启动。下面利用系统安装光盘进入救援模式来进行修复。
放入光盘,并在BIOS中设置从光盘引导,进入光盘引导界面,选择“Rescue Installed System”:
介质类型选择“Local CD/DVD”:
进入救援模式后还无法直接修改配置文件,因为此时的系统根目录是由救援模式生成的,而不是真正的根目录(类似于WinPE中生成的虚拟C盘),真正的系统根目录被挂载到了/mnt/sysimage目录中,所以需要执行“chroot /mnt/sysimage”命令切换到真正的系统根目录,然后就可以修改配置文件了。修改完成后,重启系统即可。