Linux 系统案例精解


Linux 系统案例精解 存储、Oracle 数据库、集群、性能优化、 系统管理、网络配置 何世晓 杜朝晖 等 编著 北 京 内 容 简 介 本书从 Linux 系统管理角度出发,深入系统地讲解了 Linux 操作系统的各种配置应用技巧,同时本书 还提供了各行业大量的真实案例。这是一本集 Linux 系统管理、Oracle 数据库、HA 高可用、系统性能分 析、Linux 日志管理、磁盘阵列存储管理、Linux 内核优化于一身的综合范例指南。本书最大的特色在于 采用了大量的企业应用案例,将企业应用中常用的管理维护方法和 Linux 在企业中的应用集成到书中。本 书以国内外先进的企业信息基础架构为主线进行讲解,每个知识点在讲解时都与实例相结合,力求使读者 能够通过真实的案例达到触类旁通、举一反三。若读者的企业没有采用本书的案例部署,那么读者可以根 据自身的情况,将本书的一些案例直接部署到您的企业中。即便您的企业已部署了相关应用,本书也仍然 可以作为您的参考手册来为您的企业应用加固优化。 本书内容丰富,语言通俗易懂,真实案例众多,叙述由浅入深,十分适合初、中级的 Linux 系统管理 员学习和阅读。此外,本书也是 Linux 技术工程师难得的参考及培训用书。 本书封面贴有清华大学出版社防伪标签,无标签者不得销售。 版权所有,侵权必究。侵权举报电话:010-62782989 13701121933 图书在版编目(CIP)数据 Linux 系统案例精解——存储、Oracle 数据库、集群、性能优化、系统管理、网络配置/ 何世晓,杜朝晖 等 编著. —北京:清华大学出版社,2010.6 ISBN 978-7-302-22524-9 Ⅰ. L… Ⅱ.①何… ②杜… Ⅲ. Linux 操作系统 Ⅳ.TP316.89 中国版本图书馆 CIP 数据核字(2010)第 068274 号 责任编辑:王 军 李维杰 封面设计:久久度文化 版式设计:康 博 责任校对:胡雁翎 责任印制: 出版发行:清华大学出版社 地 址:北京清华大学学研大厦 A 座 http://www.tup.com.cn 邮 编:100084 社 总 机:010-62770175 邮 购:010-62786544 投稿与读者服务:010-62776969,c-service@tup.tsinghua.edu.cn 质 量 反 馈:010-62772015,zhiliang@tup.tsinghua.edu.cn 印 刷 者: 装 订 者: 经 销:全国新华书店 开 本:185×230 印 张:36.75 字 数:734 千字 版 次:2010 年 6 月第 1 版 印 次:2010 年 6 月第 1 次印刷 印 数:1~4000 定 价:59.00 元 ————————————————————————————————————————————— 产品编号: 前 言 Linux 操作系统一直以高性能、高稳定和高安全性著称。随着 Linux 在全球的快速普及, 它在各行各业中的应用也越来越广,越来越多的企业乐于使用 Linux 操作系统作为企业的主 要操作系统,同时也有越来越多的应用运行在 Linux 系统上,如企业的邮件服务器、基于 LAMP 架构开发的 CRM 客户关系管理系统、ERP 企业资源计划系统、HR 人力资源管理系 统、e-learning 学习管理系统、Oracle 数据库,群集 HA 高可用系统、虚拟化管理系统、HPC 高性能计算机等。除此之外,Linux 操作系统还在嵌入式、软件测试、软件开发、桌面办公 等领域具有极高的发展潜力。 写作背景 业内,Linux 系统方面的技术类书籍大多以 Linux 系统为主线进行分类讲解,它们只是 讲解系统、网络、安全、shell 中的某一类或几类的内容,很少有书籍是从企业的信息基础架 构和企业的应用进行讲解的。本书以企业信息基础架构为主线,以 Linux 系统为主导,将企 业的一些常见主流应用集成到本书中,力争通过企业的真实案例,使读者对 Linux 系统在企 业中的地位及存在的价值有更为清楚的了解。 本书内容 本书内容包括 Linux 安装与启动,常用命令简介,VIM 编辑器,用户和工作组管理,Linux 系统的软件安装,Linux 的计划任务,Linux 系统的远程管理;定制调优 Linux 内核,重点讲 解了各种主流驱动、网络设备及文件系统的配置;磁盘管理、LVM 配置、LVM 快照配置、 RAID 配置、LVM+RAID 整合配置;基于 FC 光纤和 IP 的 Linux 连接磁盘阵列的配置;Oracle 在 Linux 下的安装和配置,以及文件系统存储数据库的配置,自动存储管理数据库的配置, RAC 并行数据库的安装配置;Linux 集群服务的安装与部署,LVS 负载均衡的配置,RHCS 高可用配置;Linux 性能分析及优化,性能分析工具详解,基于 CPU、内存、硬盘 IO、网络 和应用层优化 Linux 系统;Linux 系统日志管理,日志服务器配置,日志转储服务,常用系 VI Linux 系统案例精解 统日志和服务日志分析,AWStats、Webalizer、SARG 日志分析软件介绍;Linux 系统安全管 理,基于系统账号、文件系统权限、PAM 和内核防火墙的配置;NAS&SAN 设备的安装与 配置,Openfiler 系统的安装,Openfiler 系统的配置,Openfiler 系统配置实例等。 本书特点 1. 提供完善的读者服务 为方便读者学习,读者可登录 http://gdlc.cublog.cn 博客来提出问题并参与讨论。读者可 以将自己遇到的问题发布到编者的博客留言簿上,博主将帮助大家一起解决问题,正常响应 时间为 24 小时之内。同时,编者还为本书开设了多个 QQ 群以便于读者形成一个圈子一起 学习,另外,编者还与广东省 Linux 公共服务技术支持中心、广东省劳动厅等多家单位联合 开设了一系列关于 Linux 系统管理、Linux 网络管理、Linux 安全管理、shell 编程、Linux 系 统高级集群、性能优化、故障分析等培训课程以供读者学习。 2. 循序渐进,由浅入深 为方便读者学习,本书首先让读者深入熟悉 Linux 系统的基本模块,然后对 Linux 系统 磁盘管理、LVM、RAID、内核定制、HA 高可用、LVS 负载均衡、Oracle 数据库的安装配 置、日志管理、性能分析、安全管理等高级功能由浅入深地进行实例讲解,从而使读者可以 边动手边学习,更快掌握 Linux 系统的各种技术知识。 3. 主流版本,项目重现 本书采用 Linux 系统的 RedHat 5.0/5.3 版本,详细介绍了 Linux 系统的高级技术,并通 过企业真实项目的配置进行重现,使读者能够更深刻地体会到 Linux 系统的优势与高端科技 的魅力,从而为企业带来更大的价值。 4. 实例精讲,内容高端 在本书的编写过程中,编者将大量的时间花费在实验配置方面,力求在进行实验配置的 过程中做到准确无误,以提高实验的完整性和可操作性,如本书的 HA 高可用、Linux 连接 存储设备、日志管理、性能分析、Oracle 数据库安装与配置等实验。 VII前 言 5. 企业案例,分析重现 本书在讲解大量实验时,以信息基础架构为主线,以 RedHat 5.3 系统为主导,结合企业 的案例,对企业应用到的案例进行分析和重现。例如 NAS 文件服务器的配置、日志服务器 的配置及分析、Oracle 数据库的安装与维护、HA 高可用系统的配置、磁盘数据的管理及保 护等。 6. 编者队伍,实力雄厚 本书的所有作者均是通过 RHCE 和 GLCE 认证的工程师,其中萧少聪为红帽中国的高 级技术支持顾问,RHCA 认证工程师;何世晓为广东省 Linux 公共服务技术支持中心特聘技 术顾问,广东省劳动厅 Linux 专家组成员,国家信息产业部 NTC-Linux 认证教材主编,RHCE 认证工程师,存储技术工程师;杜威为南都报业高级工程师;毛延鸿为海外留学硕士,网易 公司高级工程师;杜朝辉为高校金牌高级讲师;张律为高校高级讲师,计算机系副主任。 本书适合读者 作为 Linux 系统级的技术类参考书籍,本书由浅入深地可使一个计算机相关人士快速上 手并学会 Linux 系统。本书十分适合企业中从事 Linux 相关工作的技术工程师使用,同时也 是企业信息基础架构规划人士及广大 Linux 爱好者非常实用的参考指南。 本书创作团队 本书创作团队的全体成员或为就职于企业中的高级工程师,或为各大高校的高级讲师, 他们全部通过了 RHCE 和 GLCE 认证,且具有多年的 Linux 系统部署和教学经验,他们都是 专职从事开源软件和 Linux 操作系统管理维护与推广工作的骨灰级爱好者。 本书的第 8、10、11、14 和 16 章由何世晓执笔,第 12、13、15 章由萧少聪执笔,第 1、 5、9 章由张律执笔,第 3、6、7 章由杜朝辉执笔,第 2 章由杜威执笔,第 4 章由毛延鸿执笔。 全书由何世晓统稿和审核。 致谢 本书在写作过程中得到了各位作者及其家人的支持,感谢他们对团队成员的关心、鼓励 VIII Linux 系统案例精解 与支持!谢谢你们!为此我还要特别感谢我的妻子,她为这本书付出了很多的努力和劳动, 没有她的支持和鼓励我无法这么快地完成这本书。 由于水平有限,本书难免存在不足之处,欢迎广大读者批评指正。同时也欢迎大家常到 我的博客上聊聊心得体会,聊聊开源技术,灌灌水,吹吹牛。 何世晓 目 录 第 1 章 Linux 安装与启动..................... 1 1.1 Linux 本地安装.............................1 1.1.1 从光盘安装 Linux...................... 1 1.1.2 从硬盘安装 Linux...................... 5 1.1.3 从网络安装 Linux...................... 6 1.2 配置 Linux 网络安装服务器........8 1.3 引导管理程序与系统修复 .........11 1.3.1 GRUB 启动管理程序 ..............11 1.3.2 GRUB 应用..............................14 1.3.3 Linux 救援模式........................17 第 2 章 常用命令简介......................... 18 2.1 显示目录和文件 .........................18 2.1.1 ls 命令.......................................18 2.1.2 dir 命令.....................................19 2.2 修改权限和所有者 .....................20 2.2.1 chmod 命令 ..............................20 2.2.2 chown 命令...............................22 2.2.3 chgrp 命令 ................................22 2.3 创建和删除目录 .........................23 2.3.1 mkdir 命令................................23 2.3.2 rmdir 命令 ................................23 2.4 创建和删除文件 .........................24 2.4.1 touch 命令 ................................24 2.4.2 rm 命令.....................................25 2.5 重命名和移动 .............................25 2.6 复制命令......................................26 2.6.1 cp 命令..................................... 27 2.6.2 scp 命令.................................... 28 2.7 显示文件内容..............................28 2.7.1 cat 命令 .................................... 28 2.7.2 less 命令................................... 29 2.7.3 tail 命令.................................... 30 2.8 查找命令......................................30 2.8.1 find 命令 .................................. 30 2.8.2 locate 命令 ............................... 32 2.8.3 whereis 命令 ............................ 33 2.8.4 which 命令............................... 33 2.9 过滤命令......................................34 2.10 关机和重启计算机....................35 2.10.1 shutdown 命令...................... 35 2.10.2 init 命令................................ 36 2.10.3 reboot 命令........................... 37 2.10.4 halt 命令............................... 37 2.11 压缩和打包命令........................38 2.11.1 tar 命令................................. 38 2.11.2 gzip 命令 .............................. 39 2.11.3 bzip2 命令 ............................ 40 2.12 用户操作命令............................41 2.12.1 su 命令 ................................. 41 2.12.2 sudo 命令 ............................. 42 2.12.3 passwd 命令 ......................... 42 X Linux 系统案例精解 2.13 改变目录和查看当前目录 .......43 2.13.1 cd 命令..................................43 2.13.2 pwd 命令 ..............................44 2.14 文件链接命令 ...........................44 2.15 帮助命令 ...................................45 2.15.1 man 命令 ..............................45 2.15.2 info 命令...............................46 2.15.3 --help 参数............................47 2.16 其他命令 ...................................47 2.16.1 who 命令 ..............................47 2.16.2 last 命令................................48 2.16.3 free 命令 ...............................48 2.16.4 kill 命令................................49 第 3 章 Linux 编辑器 .......................... 50 3.1 Linux 编辑器介绍.......................50 3.2 vim 编辑器..................................51 3.2.1 打开文件 ..................................51 3.2.2 读文件 ......................................52 3.2.3 编辑文件 ..................................53 3.2.4 存盘和退出 ..............................55 3.2.5 查找和替换命令 ......................56 3.2.6 设置 vim 环境..........................57 3.3 vim 编辑器的高级功能..............59 3.3.1 文本内容的局部选择与操作 ....60 3.3.2 编辑多个文档 ..........................61 3.3.3 多窗口功能 ..............................61 3.3.4 插入补全 ..................................62 3.3.5 打开目录 ..................................62 3.3.6 折叠隐藏文本 ..........................62 3.3.7 设置环境文件 ..........................63 3.3.8 文件恢复功能 ..........................64 第 4 章 用户管理.................................66 4.1 用户和工作组概述......................66 4.2 创建用户和工作组......................67 4.2.1 创建用户.................................. 67 4.2.2 创建工作组.............................. 69 4.3 管理用户和工作组......................70 4.3.1 用户管理命令.......................... 70 4.3.2 用户管理文件.......................... 72 4.3.3 工作组群管理命令.................. 74 4.3.4 工作组群管理文件.................. 74 4.3.5 用户和工作组规则文件.......... 75 4.4 深化用户管理..............................77 4.4.1 手工创建用户.......................... 77 4.4.2 手工删除用户.......................... 79 4.4.3 批量创建用户.......................... 79 第 5 章 Linux 软件安装........................84 5.1 引言..............................................84 5.2 rpm 包管理系统..........................84 5.2.1 管理 rpm 包 ............................. 85 5.2.2 管理 rpm 源码包 ..................... 92 5.3 使用 yum 在线安装或 升级 rpm 包.................................93 5.4 通过脚本安装软件包..................95 5.5 通过源代码安装软件..................96 5.6 deb 包的安装与 apt 在线升级.....98 5.7 直接解压安装............................100 第 6 章 Linux 计划任务......................103 6.1 at 命令........................................103 6.1.1 at 功能介绍............................103 6.1.2 at 使用示例............................104 6.2 cron 服务 ...................................106 XI目 录 6.2.1 cron 功能介绍 ....................... 106 6.2.2 cron 使用示例 ....................... 108 6.3 自动运行配置文件 ...................111 6.3.1 自动运行程序 ....................... 111 6.3.2 实现自动运行配置文件 ....... 113 第 7 章 Linux 系统远程管理 ..............116 7.1 Telnet 服务管理........................117 7.1.1 Telnet 简介............................ 117 7.1.2 Telnet 基本配置.................... 117 7.1.3 Telnet 服务限制.................... 119 7.1.4 允许 root 用户登录............... 119 7.2 SSH 服务管理...........................120 7.2.1 SSH 简介............................... 120 7.2.2 SSH 基本配置....................... 121 7.2.3 使用 sftp ................................ 123 7.2.4 SSH 服务限制....................... 125 7.2.5 使用 PuTTY 管理 Linux 服务器 ................................... 125 7.3 VNC 服务管理..........................126 7.3.1 VNC 简介.............................. 126 7.3.2 VNC 基本配置...................... 126 7.3.3 以图形界面登录 VNC.......... 128 7.3.4 使用 SSH 和 VNC 共同 进行远程管理 ....................... 128 7.4 Webmin 软件管理 ....................129 7.4.1 Webmin 简介 ........................ 129 7.4.2 Webmin 基本使用 ................ 130 7.4.3 Webmin 管理模块功能......... 132 第 8 章 定制 Linux 内核.................... 138 8.1 Linux 内核组件介绍.................138 8.2 /boot 目录下文件介绍..............139 8.2.1 vmlinuz 内核文件..................139 8.2.2 initrd.img 映像文件 ...............140 8.2.3 Linux 内核模块配置文件 .....142 8.2.4 Linux 内核符号列表文件 .....144 8.2.5 Linux 内核参数配置文件 .....144 8.3 内核操作命令............................145 8.3.1 lsmod 命令.............................145 8.3.2 modprobe 命令.......................147 8.3.3 insmod 命令...........................148 8.3.4 rmmod 命令 ...........................148 8.3.5 depmod 命令..........................149 8.3.6 modinfo 命令 .........................149 8.4 编译内核前的准备工作............150 8.4.1 内核升级所需依赖包............150 8.4.2 下载 Linux 2.6 内核 源码文件................................151 8.4.3 解包解压缩 Linux 内核文件................................152 8.4.4 内核编译步骤........................153 8.4.5 内核补丁编译步骤................154 8.5 配置内核选项............................157 8.5.1 通过字符方式配置 内核选项................................157 8.5.2 通过菜单方式配置 内核选项................................158 8.5.3 通过 QT 图形方式配置 内核选项................................161 8.5.4 通过 GTK 图形方式配置 内核选项................................163 8.6 配置磁盘选项............................165 8.6.1 IDE 硬盘及光驱选项配置 ....165 8.6.2 SATA 硬盘选项配置 ............166 XII Linux 系统案例精解 8.6.3 LVM&RAID 选项配置 ........ 167 8.6.4 USB 移动硬盘及光驱 选项配置 ............................... 168 8.7 配置 CPU 及电源选项 .............169 8.7.1 CPU 类型选项配置 .............. 169 8.7.2 内存选项配置 ....................... 172 8.7.3 电源选项配置 ....................... 172 8.8 网络选项及网络设备配置 .......173 8.8.1 网络功能选项配置 ............... 173 8.8.2 网络设备驱动配置 ............... 173 8.8.3 ISDN 网络设备配置............. 176 8.8.4 IrDA 网络协议和选项支持... 176 8.8.5 蓝牙网络设备配置 ............... 177 8.9 设备驱动配置 ...........................178 8.9.1 多媒体设备驱动配置 ........... 178 8.9.2 声卡设备驱动配置 ............... 178 8.9.3 显卡设备驱动配置 ............... 180 8.10 文件系统选项配置 .................181 8.10.1 EXT2/3/4 文件系统 选项配置........................... 181 8.10.2 Reiserfs/JFS/XFS 文件 系统选项配置................... 181 8.10.3 Cluster 文件系统选项 配置 .................................. 182 8.10.4 网络文件系统选项配置... 182 8.10.5 光驱/FAT/NTFS 文件系统 选项配置........................... 183 8.10.6 磁盘配额及分区类型 选项配置........................... 184 8.11 Linux 内核安全及虚拟化 选项配置.................................184 8.11.1 内核安全选项配置 .......... 184 8.11.2 内核虚拟化选项配置 .......185 8.12 基于 Linux 2.6 内核的 升级方法 .................................185 8.12.1 下载及解包解压缩 内核源码...........................186 8.12.2 配置内核选项...................187 8.12.3 编译内核选项...................190 8.12.4 修改启动管理器的 配置文件...........................191 8.12.5 测试新内核.......................192 第 9 章 磁盘管理、RAID 与 LVM ......194 9.1 创建文件系统............................194 9.1.1 磁盘分区................................194 9.1.2 格式化....................................203 9.1.3 挂载文件系统........................206 9.2 Linux 的软 RAID 管理 .............210 9.2.1 RAID 概念、分类及优缺点 ...211 9.2.2 RAID 配置实例.....................213 9.3 LVM 配置与管理......................219 9.3.1 LVM 概述..............................219 9.3.2 LVM 的创建和扩容..............220 9.3.3 LVM 的快照保护及恢复......229 9.4 RAID、LVM 及磁盘配额 应用实例 ...................................232 第 10 章 Linux 连接磁盘阵列的 配置.....................................239 10.1 存储技术概述..........................239 10.1.1 磁盘阵列分类...................240 10.1.2 DAS 直连附加存储..........242 10.1.3 NAS 网络附加存储..........243 10.1.4 SAN 存储区域网络..........246 XIII目 录 10.1.5 SAN 网络分类 ................. 248 10.1.6 NAS 和 SAN 比较 ........... 249 10.2 主机与磁盘阵列的连接方式...250 10.2.1 通过 FC 接口连接............ 250 10.2.2 通过 SAS 接口连接......... 255 10.2.3 通过 iSCSI 接口连接....... 259 10.2.4 通过 SCSI 接口连接........ 260 10.3 安装 HBA 卡驱动...................264 10.3.1 查看 Linux 系统支持光纤 驱动模块 .......................... 265 10.3.2 配置 Linux 系统以实现 开机激活 FC 光纤驱动 模块 .................................. 267 10.4 Linux 与 FC-SAN 磁盘阵列 的连接.....................................268 10.4.1 登录磁盘阵列 .................. 269 10.4.2 配置磁盘阵列 .................. 270 10.4.3 配置主机服务器 .............. 275 10.5 Linux 与 IP-SAN 磁盘阵列的 连接.........................................276 10.5.1 iSCSI 概述........................ 276 10.5.2 iSCSI 存储的安装............ 277 10.5.3 iSCSI 存储的配置文件.... 279 10.5.4 配置 iSCSI 存储............... 281 10.5.5 安装 iSCSI 客户端........... 283 10.5.6 iSCSI 客户端配置文件.... 284 10.5.7 连接 iSCSI 存储............... 285 第 11 章 Oracle在 Linux 下的安装 配置.................................... 287 11.1 Oracle 基本概念......................287 11.2 Oracle 在 Linux 下的安装......288 11.2.1 系统级别准备工作 .......... 288 11.2.2 Oracle 安装前的 准备工作...........................292 11.2.3 下载并解压 Oracle 安装包...............................294 11.2.4 安装 Oracle 11g 数据库 系统...................................295 11.2.5 设置开机自动启动 Oracle ................................305 11.3 创建文件系统存储数据库......307 11.3.1 连接磁盘阵列...................307 11.3.2 创建数据库.......................309 11.3.3 测试 Oracle 数据库 系统...................................313 11.4 创建 ASM 数据库...................314 11.4.1 配置磁盘阵列分区 ...........314 11.4.2 安装 oracleasm 软件包.....315 11.4.3 创建 ASM 设备 ................316 11.4.4 创建基于 ASM 存储的 数据库...............................317 11.4.5 启动 Oracle 数据库...........318 11.5 安装 Oracle RAC 并行 数据库 .....................................319 11.5.1 配置 RAC 实验拓扑图.....319 11.5.2 配置 RAC 实验关系表.....320 11.5.3 配置 RAC 前的准备 工作...................................320 11.5.4 设置共享磁盘阵列 ...........322 11.5.5 创建仲裁盘和 ASM 设备...................................325 11.5.6 创建用户及工作目录 .......326 11.5.7 安装 CRS 集群服务..........328 11.5.8 安装 RAC 集群数据库.....337 XIV Linux 系统案例精解 第 12 章 Linux 集群服务的安装 部署.................................... 346 12.1 集群的优势及分类 .................346 12.2 集群系统规划 .........................347 12.3 网卡绑定 .................................348 12.3.1 配置前的准备 .................. 348 12.3.2 网卡绑定配置 .................. 349 12.3.3 网卡绑定效果测试 .......... 352 12.4 磁盘多路径绑定 .....................353 12.4.1 配置前的准备 .................. 353 12.4.2 磁盘多路径绑定配置....... 354 12.4.3 磁盘多路径绑定 效果测试 .......................... 357 12.5 I/O 屏障技术...........................358 12.6 高可用集群 .............................360 12.6.1 高可用集群原理 .............. 360 12.6.2 红帽集群套件 RHCS 的 工作原理 .......................... 361 12.6.3 RHCS+Oracle 配置 实战图解 .......................... 363 12.7 负载均衡集群 .........................397 12.7.1 红帽 LVS 负载均衡 集群原理 .......................... 397 12.7.2 红帽 LVS 安装及配置..... 400 第 13 章 Linux 性能分析与优化........ 414 13.1 影响性能的因素 .....................414 13.1.1 Linux 系统架构................ 414 13.1.2 硬盘 I/O 对性能的影响 ... 415 13.1.3 CPU 及进程处理对性能的 影响 .................................. 416 13.1.4 内存对性能的影响 .......... 417 13.1.5 进程间通信对性能的 影响...................................417 13.1.6 网络对性能的影响 ...........418 13.2 性能分析工具..........................418 13.2.1 性能数据收集命令 ...........419 13.2.2 图形化数据的生成 ...........427 13.3 性能优化..................................433 13.3.1 CPU 进程处理 性能优化...........................433 13.3.2 内存性能优化...................437 13.3.3 硬盘 I/O 性能优化............439 13.3.4 网络性能优化...................443 13.3.5 应用层优化思路描述 .......443 第 14 章 Linux 系统日志管理 ............445 14.1 日志分类..................................445 14.1.1 连接时间日志...................445 14.1.2 进程统计日志...................451 14.1.3 系统和服务日志...............455 14.2 日志服务..................................456 14.2.1 Linux 日志服务介绍.........456 14.2.2 /etc/syslog.conf 配置文件...........................458 14.2.3 /etc/sysconfig/syslog 配置文件...........................460 14.2.4 配置日志服务器...............461 14.3 日志转储服务..........................464 14.3.1 /etc/logrotate.conf 配置文件...........................464 14.3.2 日志转储案例...................466 14.3.3 自定义日志转储案例 .......467 14.4 常用系统日志分析..................468 14.4.1 系统消息日志分析 ...........468 XV目 录 14.4.2 系统安全日志分析 .......... 470 14.4.3 系统引导日志分析 .......... 472 14.4.4 硬件检测日志分析 .......... 473 14.4.5 计划任务日志分析 .......... 473 14.4.6 X-window 日志分析 ........ 474 14.5 常用服务日志分析 .................475 14.5.1 Web 网站日志分析.......... 475 14.5.2 邮件系统日志分析 .......... 477 14.5.3 代理服务器日志分析....... 477 14.5.4 文件服务器日志分析....... 479 14.5.5 FTP 服务器日志分析....... 481 14.6 日志分析工具 .........................482 14.6.1 AWStats 日志分析工具... 482 14.6.2 Webalizer 日志分析 工具 .................................. 487 14.6.3 SARG 日志分析软件....... 491 第 15 章 Linux 系统安全管理 ........... 500 15.1 系统安全概述 .........................500 15.1.1 操作系统安全 .................. 501 15.1.2 网络安全 .......................... 501 15.1.3 人员及设备安全管理....... 502 15.1.4 综合管理规范 .................. 502 15.2 Linux 系统账号安全...............502 15.2.1 系统账号管理基础 .......... 503 15.2.2 PAM 可插拔验证模块..... 505 15.3 Linux 文件系统权限安全.......506 15.3.1 Linux 文件系统权限 管理基础 .......................... 506 15.3.2 SUID/SGID 特殊权限 管理 .................................. 508 15.3.3 Linux 文件系统 ACL 高级权限控制 .................. 508 15.4 应用软件安全..........................510 15.4.1 sudo 权限 ..........................510 15.4.2 RPM 安全验证..................512 15.4.3 及时对系统软件进行 更新...................................512 15.5 Linux 网络安全防护...............513 15.5.1 Linux 内核防火墙的包 过滤机制...........................513 15.5.2 Iptables 端口过滤实例......514 15.5.3 常见网络攻击预防 ...........518 第 16 章 NAS&SAN 设备的安装与 配置.....................................519 16.1 Openfiler 功能介绍 .................519 16.2 安装 Openfiler .........................521 16.3 配置 Openfiler .........................530 16.3.1 登录 Openfiler 系统..........530 16.3.2 Openfiler 系统状态信息...531 16.3.3 Openfiler 系统配置菜单...531 16.3.4 Openfiler 卷管理 配置菜单...........................537 16.3.5 Openfiler 磁盘配额 配置菜单...........................542 16.3.6 Openfiler 共享配置 菜单...................................544 16.3.7 Openfiler 服务管理 配置菜单...........................546 16.3.8 Openfiler 用户账号 管理菜单...........................549 16.4 Openfiler 配置实例 .................557 16.4.1 配置 iSCSI 存储分区........557 16.4.2 配置 LUN 快照功能.........563 序 Linux 作为一种高性能、高稳定性、高效率的网络操作系统,在企业、政府、教育、制 造、金融、证券、基金、媒体、移动电信等众多行业应用十分广泛,尤其是近年来 Linux 在 中国乃至全世界的应用增长率越来越快。据统计,Linux 操作系统在美国、欧洲、非洲、中 国和巴西的使用量最大。Linux 操作系统以其开放源代码、自由使用的理念为宗旨,得到了 越来越多的厂家支持。同时也正是 Linux 操作系统的这一特性,使得其应用越来越广,不仅 在服务器端得到了广泛应用,而且在嵌入式开发、PDA 手机、超级运算、虚拟化、存储等领 域也有非常好的表现。 现在大多数有预算的企业都乐于采用三层或四层的信息基础架构,如应用层、中间件层、 数据库层、数据层这四层,以真正地将数据与应用系统和数据库系统分隔开来。而这每一层 都需要有操作系统的支持。Linux 操作系统在这些层担负着非常重要的角色,例如在数据库 层,Linux 操作系统能支持各类数据库系统,如 Oracle、Sybase 等;同时,Linux 还支持众多 的开源数据库系统,如 MySQL、PostgreSQL 等。 对于一些中小型企业,Linux 操作系统则更具有一些不可替代的优势,如企业的邮件服 务器、CRM 客户关系管理系统、NAS 文件服务器、CMS 门户网站系统、ERP 企业资源计划 系统、企业级防火墙,企业级 HA 高可用系统、企业级虚拟化系统、企业级数据库系统等, 这些系统对于一个信息化企业而言都是一些必需的应用系统。在 Linux 操作系统下,这些应 用系统可以选择开源、可自由使用的应用系统,企业只需招聘一个熟悉 Linux 操作系统的工 作人员,再购买几台 PC 服务器就可以轻松地拥有这些系统,并可以稳定高效地使用这些 系统。 本书正是以企业信息基础架构为主线,以企业应用系统为方向,重点讲解在 Linux 下如 何部署这些系统,以及部署这些系统需掌握哪些相关的基础知识:Linux 安装与启动,常用 命令,VIM 编辑器,用户和工作组管理,Linux 系统的软件安装,Linux 的计划任务,Linux 系统的远程管理;定制调优 Linux 内核,重点讲解了各种主流的驱动、网络设备及文件系统 的配置;磁盘管理、LVM 配置、LVM 快照配置、RAID 配置、LVM+RAID 整合配置;基于 FC 光纤和 IP 的 Linux 连接磁盘阵列的配置;Oracle 在 Linux 下的安装和配置,以及文件系 统存储数据库的配置、自动存储管理数据库的配置、RAC 并行数据库的安装配置等;Linux IV Linux 系统案例精解 集群服务的安装与部署,LVS 负载均衡的配置,RHCS 高可用配置;Linux 性能分析及优化, 性能分析工具详解,基于 CPU、内存、硬盘 IO、网络、应用层来优化 Linux 系统;Linux 系 统日志管理,日志服务器配置,日志转储服务,常用系统日志和服务日志分析,AWStats、 Webalizer、SARG 日志分析软件介绍;Linux 系统安全管理,基于系统账号、文件系统权限、 PAM 及内核防火墙的配置;NAS&SAN 设备的安装与配置等。读者可以从书中学到 Linux 系统许多实用的知识和应用。 袁 泉 广东省 Linux 公共服务技术支持中心主任 曾多次为广东省的银行、政府部门、图书馆及众多高校,福建某农信社以及国家某核电 站设计信息基础架构解决方案,并参与实施和验收;多次对广东省公安厅、广东省信息产业 厅、广东省农信社、天河软件园企业、中山大学、华南理工大学等广东省众多机构、企业及 高校的职员或老师进行 Linux 技术培训;与广东省劳动厅和国家信息产业部合作出版过多本 Linux 著作。 作 者 简 介 杜朝晖,计算机硕士,高校讲师,从事计算机相关课程的教学与培训。 杜威,曾任职于某知名大型社区网站,服务于互联网行业。搭建过大型网站的数十台服 务器集群,包括高可用和负载均衡集群。开发过基于 LAMP 架构的大型社区以及思科交换机 的监控系统。多次为网站服务器架构的升级提供解决方案。 目前任职于某知名媒体技术部资深工程师、网站开发总负责人兼网站服务器架构师。拥 有丰富的互联网项目开发经验及大型网站架构经验,精通 Linux 操作系统、服务器集群及 MySQL 数据库管理与优化。此外,对 PHP 也有非常深入的研究。 毛廷鸿,毕业于国外知名国际航空大学,RedHat 认证工程师,精通航空计算机系统及网 络,熟悉 CISCO 产品的配置与监控,曾为国外某大型企业搭建局域网及 VPN 系统,并为多 个国外大学校园网提供技术支持。目前任职于中国某知名在线游戏服务提供商(纳斯达克上 市公司)资深系统工程师,负责上千台服务器机群的管理与维护、系统架构优化和数据优化。 萧少聪,红帽认证架构师(RHCA)/数据中心专家(RHCDS)/讲师(RHCI),现任职于国内某 知名开源产品服务公司,负责 RedHat 相关开源系统架构的华南地区架构设计及技术顾问工 何世晓,广东省劳动厅特聘 Linux 专家组专家,曾 任广东省 Linux 公共服务技术支持中心技术总监,现为 广东省 Linux 公共服务技术支持中心特邀 Linux 高级顾 问,某 IT 公司技术总监,RHCE 认证工程师,存储工 程师。对 EMC、IBM、NetApp、同有、infortrend 存储 等信息基础架构产品非常熟悉。 II Linux 系统案例精解 作。长期为政府、通信、金融、电力等行业提供专业的 Linux 及开源软件架构的技术顾问和 项目支持。拥有丰富的 Linux 系统安全、管理、优化及集群系统架构设计经验,当前正针对 开源云计算架构及 Web 2.0 分布式数据库缓存技术进行研究。 张律,现任某高校信息中心主任一职,硕士学位、高级职称,主要负责校园网的整体规 划设计以及数字化校园平台的设计、开发、维护等工作,此外还承担了计算机等专业的专业 教学任务。曾主持或参与过多个省级和国家级科研课题,并获得多个省级以上科技进步奖。 项目操作及实践经验丰富,擅长各类主流服务器管理技术及数据库技术,目前研究方向为系 统与网络安全。 作为高校教师及机构培训讲师,授课经验丰富,深受学生喜爱,并主编了多本计算机类 教材,同时在国内外多家重要刊物上还发表了多篇论文,具有一定的学术造诣。 “工欲善其事,必先利其器。”要想成为一名优秀的 Linux 系统管理员,就必须对 Linux 非常熟悉,而且要不断地去学习、实践和提高,而这一切的前提是您必须先安装好一台运行 Linux 系统的计算机。本章将讨论有关 Linux 安装与启动方面的内容。 1.1 Linux 本地安装 在安装操作系统之前,了解它对硬件的需求是非常重要的,因为如果系统与用户计算机 的硬件不兼容,那么用户将无法安装这个系统。早期的 Linux 版本对硬件的兼容性很差,安 装 Linux 是一件很困难的事情,所幸的是现在的 Linux 内核对各种硬件都能很好地兼容,如 果用户没有特别的要求,那么安装 Linux 基本上都可以不考虑硬件兼容性的问题。但硬件的 技术规范几乎每天都在改变,因而很难保证 Linux 与用户计算机的硬件完全兼容。 红帽 Linux 的硬件兼容列表可以参见以下网址:http://hardware.redhat.com/hcl/。 有关 Linux 安装的其他要求我们在演示中再进行说明。 下面本章分别讲述从光盘、硬盘、NFS 服务器、HTTP 服务器及 FTP 服务器上安装 Linux 的基本步骤,由于篇幅有限,本章只描述主要内容。 1.1.1 从光盘安装 Linux 从光盘安装是安装 Linux 的主要方式,其主要准备工作就是准备好安装光盘并将系统的 启动顺序设置为从光盘启动,其他要求在安装过程中我们再介绍。 Linux 安装与启动 1 CHAPTER 2 Linux 系统案例精解 假设在安装 Windows 操作系统的时候预留了足够的空间,那么就可以使 Linux 系统与 Windows 系统在同一台机器上共存。本节就以在一台已安装了 Windows 操作系统的机器上 安装 Linux 为例。安装过程如下所示,因为大多数读者基本上已经安装过不同版本的 Linux, 所以相关内容如不需要强调的话这里都尽量简略以减少篇幅。 将启动光盘放入光驱并将 BIOS 中的启动顺序设置为光盘优先后重新启动计算机,将会 看到图 1-1 所示的画面。在“boot:”提示符下直接按回车键可以启动图形化安装方式,输 入“linux text”可以启动文本式安装界面,如果需要得到更多信息,则可以按 F2 键,将得 到图 1-2 所示的界面。 图 1-1 安装初始界面 图 1-2 更多选项的安装界面 在图 1-2 中,可以按照说明在“boot:”提示符后输入相应的选项来启动不同的安装方 式,如“linux noprobe”表示不启用硬件检测,“linux mediacheck”表示启用安装介质检查, “linux rescue”表示进入救援修复模式,“linux dd”表示在安装时需要读取第三方驱动程序, “linux askmethod”表示在安装时询问安装方式,“linux updates”表示通过升级光盘来进行 升级安装,“memtest86”表示从光盘启动的时候检测系统内存。这里直接回车进入图形化 安装方式,并在图 1-3 中选择“skip”跳过安装介质检查。 3 第 1 章 Linux 安装与启动 图 1-3 是否跳过安装介质检查 在后续的安装过程中,会依次经过欢迎界面、安装语言选择(可以选择“简体中文”)、 键盘布局选择(选择默认值“美国英语式”)、输入安装序列号(不输入安装序列号以及输入不 同级别的安装序列号将会使用户能够安装不同级别的软件,主要和集群及 XEN 虚拟机有关, 这里选择不输入安装序列号),然后可以选择分区安装方式,因为计算机内已经安装了 Windows,所以这里选择“自定义分区”方式。 在分区界面,依次按照图 1-4 至图 1-8 所示为 Linux 系统分得一个大小为 100MB、文件 系统类型为 ext3 的/boot 分区。这个分区主要用于存储系统启动时需要读取的关键文件,如 grub 配置文件和内核镜像等。也可以不单独为其分区,但是为了系统维护方便,建议您最好 还是为/boot 目录单独分区。 图 1-4 系统分区界面 4 Linux 系统案例精解 图 1-5 为系统分出/boot 分区 图 1-6 为系统分出交换空间 图 1-7 为系统分出/分区 图 1-8 分区结果 接下来为系统分出一个大小为 512MB 的交换空间,交换空间类似于 Windows 系统中的 虚拟内存,可以在系统内存不够的情况下将物理内存中暂时不用的数据转移至交换空间以腾 出物理内存空间来运行程序。Linux 下的交换空间包括交换分区和交换文件两种形式,一般 情况下,交换空间的总大小为系统物理内存的两倍为宜。 最后为系统分出最不可缺少的/分区,/分区是系统必不可少的分区,系统的所有文件都 存放在上面或通过它下面的挂载点进行访问。为其分得 20GB 的空间,根据实际使用情况以 后可能还需要对其空间进行扩展。 分区结束后,安装过程还将陆续经过设置默认启动系统(可以修改显示信息并获知操作 系统所在分区)、设置网络参数(建议根据实际情况手工配置好各项参数)、设置时区(按默认即 5 第 1 章 Linux 安装与启动 可)、设置 root 用户密码(尽量设置得复杂一些)、定制软件安装(可以按默认值安装,也可以 有选择地安装所需要的组件)等步骤,然后进入软件复制安装过程,安装完成后按照系统提 示重新启动计算机即可。第一次进入系统之前还需要对系统做一些额外设置,如图 1-9 所示。 图 1-9 安装完毕后首次启动之前需要设置的选项 1.1.2 从硬盘安装 Linux 从光盘安装 Linux 的前提是已经拥有 Linux 所有的安装盘,但很多时候用户往往是下载 了 Linux 的安装镜像文件,而可能不愿意或无法将这些镜像文件刻录为光盘进行安装,那么 此时可以采用从硬盘安装 Linux 的方式。 首先应该将第一张安装盘刻录出来或者从其他途径获得,这是必须要做的,因为需要依 靠这张盘进行引导,而其他的镜像文件则应该放在诸如 FAT 这种格式的能被 Linux 内核默认 识别的分区中。在安装过程中需要选择安装源,输入镜像文件所在的分区,系统会自动找到 这些镜像文件进行安装,之后的安装过程及设置与从光盘安装基本上没什么差别。 如图 1-10 所示,在安装起始界面的“boot:”提示符后输入“linux askmethod”,系统 将在安装过程中询问安装源的位置,如图 1-11 所示。 图 1-10 安装起始界面 图 1-11 选择安装源 6 Linux 系统案例精解 在图 1-11 中,选择“Hard drive”从硬盘安装,将会出现图 1-12 所示的安装源选择界面。 在分区选择区域选择放置下载的镜像文件的分区,如果镜像文件放在根目录,则下面的蓝色 区域不需要输入任何数据,否则需要在此输入放置镜像文件的具体目录,所以安装前千万不 要将文件放在中文目录内,因为此处根本无法输入中文。 图 1-12 选择镜像文件所处的位置 输入正确的位置后,系统在安装文件的时候会自行找到镜像文件进行安装,其他安装步 骤与从光盘安装基本相同。 1.1.3 从网络安装 Linux 1. 从 NFS 服务器进行安装 在局域网中可以通过架设 NFS、HTTP 及 FTP 服务器,在服务器上放置 Linux 的安装文 件,然后利用网络并依据对应的访问协议从服务器上获取安装文件,从而进行 Linux 的安装。 假设互联网上提供了这样的服务器,甚至可以从互联网上安装 Linux,只不过安装的速度会 慢很多,因为安装文件需要从互联网上下载下来,这受网络带宽的影响很大。 在 Linux 安装过程中只需要指定安装文件的位置——安装源即可。与从硬盘安装一样, 需要安装光盘中的第一张光盘来进行系统引导。 从光盘引导至图 1-11 所示的界面,选择“NFS image”以从 NFS 服务器进行安装,系统 将会出现图 1-13 和图 1-14 所示的网络参数设置界面,根据实际情况输入网络参数后就可以 看到图 1-15 所示的输入安装源位置的界面,输入 NFS 服务器的 IP 地址以及 NFS 的共享安 装目录即可,后续安装过程与一般安装过程类似。 7 第 1 章 Linux 安装与启动 图 1-13 配置网络参数(一) 图 1-14 配置网络参数(二) 图 1-15 输入 NFS 安装源的位置 2. 从 FTP 服务器进行安装 在图 1-11 所示界面中选择“FTP”以从 FTP 服务器进行安装,同样在进行了图 1-13 和 1-14 所示的网络参数配置后,在图 1-16 所示界面中输入 FTP 服务器的 IP 地址或域名以及正 确的安装文件所在路径,系统会自动从 FTP 服务器下载安装文件并进行安装。还可以根据远 8 Linux 系统案例精解 程 FTP 服务器是否允许匿名访问来在图 1-16 界面中进行相关参数的调整。 图 1-16 设置 FTP 服务器安装源 3. 从 HTTP 服务器进行安装 在图 1-11 所示界面中选择“HTTP”以从 HTTP 服务器进行安装,同样在进行了图 1-13 和 1-14 所示的网络参数配置后,在图 1-17 界面中输入 HTTP 服务器的 IP 地址或域名以及正 确的安装文件所在路径,系统会自动从 HTTP 服务器下载安装文件并进行安装。 图 1-17 设置 HTTP 服务器安装源 在以上从网络服务器安装 Linux 的方法中,除了 NFS 服务器是建立在 Linux 操作系统上 之外,FTP 服务器和 HTTP 服务器既可以是建立在 Linux 操作系统下的服务器,也可以是建 立在 Windows 或其他操作系统下的服务器。 1.2 配置 Linux 网络安装服务器 在实际应用中,假设需要频繁地安装 Linux 或者需要批量部署 Linux 到多台机器上,那 么一台台地进行安装将会很不方便。因此,可以构建一台网络安装服务器,使得网络中其他 9 第 1 章 Linux 安装与启动 的计算机可以利用带 PXE 启动芯片的网卡来从服务器获得启动文件和安装文件,从而完成 安装,甚至可以在 Kickstart 安装脚本的帮助下自动完成安装工作,做到无人值守安装。 这个架构里包含 3 个角色,第 1 个角色是启动服务器,它负责给客户机提供启动的相关 参数和连接安装服务器要使用的 IP 地址;第 2 个角色是安装服务器,它负责提供安装所需 的配置文件和安装文件;第 3 个角色是客户机,它的网卡需要支持 PXE 远程启动技术,目 前大多数网卡都支持 PXE 技术,客户机从服务器获取各种支持来完成自动安装。 1. 基本工作原理和过程 (1) 客户机启动之后,会发出 DHCP 请求广播,从网络中的 DHCP 服务器获取 IP 地址 及 Bootstrap 文件的位置信息。 (2) 客户机通过 TFTP 协议连接到 TFTP 服务器,下载 Bootstrap 文件(即 pxelinux.0 文件)。 (3) 客户机下载 pxelinux.0 的配置文件 default。按 照 default 的配置执行 pxelinux.0 文件。 (4) 客户机向服务器请求系统启动的相关文件(如内核镜像)及参数配置等并下载。 (5) 客户机启动 Linux 内核,开始进入安装界面,然后用户便可以根据自己的需要来进 行安装。如果指定了自动安装脚本文件的位置,那么也可以进行无人值守安装。 2. 实现 Linux 网络安装服务器,即配置过程 (1) 安装一台 RHEL 服务器,假设其 IP 地址被设置为 192.168.1.1。 (2) 将此服务器配置为 NFS 服务器并建立一个共享目录,此共享目录用于存放 Linux 的 安装文件。将 Linux 安装盘的 Server 目录下的内容全部复制到这个目录下并开启 NFS 服务。 (3) 配置 TFTP 服务器,用 chkconfig tftp on 打开 xinetd 代理的 TFTP 服务,用 service xinetd restart 重新启动服务。 (4) 配置一台 DHCP 服务器,下面是 dhcp.conf 文件中的内容。 ddns-update-style interim ; ignore client-updates ; allow booting ; allow bootp ; subnet 192.168.1.0 netmask 255.255.255.0 { default-lease-time 216000 ; max-lease-time 432000 ; option routers 192.168.1.1 ; option domain-name "gdlc.org" ; option subnet-mask 255.255.255.0 ; option domain-name-servers 192.168.1.1 ; 10 Linux 系统案例精解 range dynamic-bootp 192.168.1.100 192.168.1.200 ; filename "/linux-install/pxelinux.0" ; } 使用 service dhcpd restart 重启 DHCP 服务。 (5) 配置 PXELinux。 要远程启动机器,就必须要有 PXELinux 这个由 syslinux、isolinux 派生出来的,支持 PXE 的 bootloader,它可以实现在远程通过 PEX 来启动一台机器。 把/usr/lib/syslinux/pxelinux.0 复制到/tftpboot/linux-install 目录下,把 Linux 安装光盘上的 images/pxeboot 目录下的 initrd.img 和 vmlinux 也复制到/tftpboot/linux-install 目录下。 /tftpboot/linux-install/pxelinux.cfg 目录用于存放 syslinux 的配置文件。sysconfig 的配置文件有 现成的可用,在 Linux 安装光盘的 isolinux 目录下有一个 isolinux.cfg 文件,把它复制成 /tftpboot/linux-install/pxelinux.cfg/default 文件,并将 isolinux/*.msg 复制到/tftpboot/linux-install 下,再对 default(也就是 isolinux.cfg)进行修改。下面是 default 文件(实际上就是 ISOLinux 的 配置文件,它告诉客户机启动后使用那个内核来引导,需要添加什么参数等等)的主要内容。 default linux prompt 1 timeout 600 display boot.msg F1 boot.msg F2 options.msg F3 general.msg F4 param.msg F5 rescue.msg F7 snake.msg label linux kernel vmlinuz append initrd=initrd.img label text kernel vmlinuz append initrd=initrd.img text label expert kernel vmlinuz append expert initrd=initrd.img label lowres kernel vmlinuz append initrd=initrd.img lowres 11第 1 章 Linux 安装与启动 (6) 客户机配置。 现在,客户机只要将网卡设置为 PXE 启动优先,开机后即可进入网络安装状态,系统 会自动下载相关文件并进入到安装界面,这时需要用户自行选择各项配置来进行安装。如果 要实现无人值守安装,则还需要生成一个自动安装脚本,这个脚本可以用 redhat-config-kickstart 命令生成 ks.cfg 文件,也可以直接使用某个系统安装完毕后 生成的 anaconda-ks 文件(如在用户 root 的根目录/root 下),将自动安装脚本放在 NFS 共享 目录下,然后便可以通过在网络安装开始时使用 linux ks=访问路径/ks.cfg 来完成自动 安装。 1.3 引导管理程序与系统修复 1.3.1 GRUB 启动管理程序 安装好 Linux 以后,当用户重新启动计算机并经过 BIOS 的自检和初始化时,BIOS 将读 取主引导记录(MBR)到内存中。MBR 是一个 512 字节大小的扇区,位于磁盘的第一个扇区 中(0 道 0 柱面 1 扇区)。当 MBR 被加载到内存中之后,BIOS 就会将控制权交给 MBR。MBR 的前 446 个字节中保存的程序就是引导管理程序,它负责选择启动分区并加载存储在其他位 置的操作系统。 早期版本的红帽 Linux 中是采用 LILO 作为引导管理程序,高版本的红帽 Linux 都使用 更优秀的 GRUB 作为引导管理程序。GRUB 拥有交互式命令界面,可以在启动的时候动态 地加载各种需要的选项或参数,GRUB 能在系统引导时访问它的配置文件 /boot/grub/grub.conf,另外它还支持从网络引导。 GRUB 的一个重要功能就是加载内核映像,当内核映像被加载到内存之后,启动阶段就 开始了,接着系统将通过执行一系列的启动脚本来到达登录界面。如果输入了正确的用户名 和密码,则系统控制权将被交给 shell,至此 Linux 启动过程全部结束。 1. GRUB 配置文件 /boot 目录中存放着 GRUB 引导管理程序的配置文件/boot/grub/grub.conf 和内核映像(内 核映像并不是一个可执行的内核,而是一个压缩过的内核映像,它通常是一个 zImage 文件 12 Linux 系统案例精解 或 bzImage 文件),为了便于维护和修复系统,我们常将/boot 目录中的内容存放在一个独立 的分区中,这也就是为什么我们在安装 Linux 的时候需要单独分出一个/boot 分区的原因。 GRUB 引导管理程序的配置文件是/boot/grub/grub.conf,若修改了这个文件,则设置会 立刻生效。下面我们来讨论这个文件的内容以及语法。为了便于理解,这里将说明和解释写 在配置文件的每条语句后面。我们以前面安装 Linux 实例中的/boot/grub/grub.conf 文件作为 范例进行说明,读者的配置文件可能和本书的不同,请注意比较和理解。 # grub.conf generated by anaconda # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,1) # kernel /vmlinuz-version ro root=/dev/sda3 # initrd /initrd-version.img #以上注释内容的含义是:grub.conf 由 anaconda 生成;对这个文件做了改变后不需要重新运行 grub 程序;注意,本系统有一个/boot 分区,这意味着所有的内核映像及相关文件的路径都是针对/boot/ 而言的,例如/vmlinuz-version 和/initrd-version.img 的“/”实际上是/boot/。同时也意味着 如果没有单独的/boot 分区,则内核映像及相关文件的路径都必须写成以/boot/开头,如 /boot/vmlinuz-version 和/boot/initrd-version.img。 #boot=/dev/sda #表示启动磁盘为第一块 SCSI 接口磁盘。 default=0 #表示默认启动项为第 1 个 title 对应的操作系统,这里的 0 表示第 1 个 title,依此类推,第 2 个 title 应该表示为 1。 timeout=5 # 表示进入 GRUB 启动界面后,将会有 5 秒的时间来让用户选择使用哪个 title 对应的操作系统来启 动系统。如果在 5 秒内没有操作键盘进行选择,那么将选择前面 default 设定的操作系统。可以修改此值 以设置倒计时的时间间隔。 splashimage=(hd0,1)/grub/splash.xpm.gz #指定了 GRUB 启动界面的背景图片(压缩格式),在有些机器或者某些显卡有问题的机器上启用背景图 片可能会引起花屏,所以如果出现这种情况,则应该将此行屏蔽。同时还要注意 GRUB 下磁盘或分区的表示 方法和原则。GRUB 中的设备号总是从 0 开始而不是 1。如果系统中有多于一个的硬盘驱动器,那么 GRUB 会将第 1 块硬盘表示为 hd0,将第 2 块硬盘表示为 hd1。同样,GRUB 将第 1 块硬盘中的第 1 个分区表示 为(hd0,0),将第 2 块硬盘中的第 3 个分区表示为(hd1,2)。另外,注意在 GRUB 中不论是 IDE 磁盘还是 SCSI 磁盘,都以 hd 开头;当使用 GRUB 在磁盘中配置 MBR 时,不需要在磁盘名称后指定分区。 hiddenmenu #表示在 GRUB 启动画面只显示倒计时而不显示备选菜单,可以根据需要决定是否屏蔽此行。 title Red Hat Enterprise Linux Server (2.6.18-128.el5) #指定 GRUB 菜单列表中出现的操作系统或内核名称,这是第一个 title。 root (hd0,1) #表示/boot 分区的位置,这里表示第 1 个磁盘的第 2 个分区为 Linux 的/boot 分区。 13第 1 章 Linux 安装与启动 kernel /vmlinuz-2.6.18-128.el5 ro root=LABEL=/ rhgb quiet #指定当引导操作系统时所要加载的内核文件。使用的路径是其在分区中的绝对位置,注意 /vmlinuz-2.6.18-128.el5 中的“/”在本例中如前所述实际是/boot/; ro 表示以只读方式加载内 核文件,当 Linux 内核在启动时,如果以可写方式加载,那么启动时如果出现异常或断电,则可能造成破 坏,所以一般采取以只读方式加载内核。root=LABEL=/(也可以写成 root=/dev/hda2)是使用卷标来 表示设备号,这样可以避免当磁盘布局出现改变时出现指代错误的情况;选项 rhgb 表示以图形界面启动, 如果要以文本界面启动,只需将 rhgb 删除即可。选项 quite 表示在启动过程中不显示错误信息,如果要 显示错误信息,可删除 quite。 initrd /initrd-2.6.18-128.el5.img #表示在引导时指定初始化内存盘所使用的映像文件的绝对路径。当根分区被格式化为 ext3 文件系统 类型时必须加载此项。此行将把 initrd 映像文件加载到内存,这个文件里面存放的都是驱动程序。 title Windows 2003 Server #指定 GRUB 菜单列表中出现的操作系统或内核名称,这是第 2 个 title。 rootnoverify (hd0,0) #表示指定另一个操作系统(如 Windows)的启动分区,这里是指第 1 个磁盘的第 1 个分区。 chainloader +1 #表示启动时从上面指定的启动分区的第 1 个扇区读取启动程序。 2. GRUB 交互式接口 GRUB 提供了 3 种不同功能的接口,如下所述: 1) 菜单接口 这是 GRUB 的默认接口,用于列出所安装的操作系统或已配置的内核,以名称方式排 序,使用方向键选择一个与默认选项不同的选项后按回车即可引导它。如果在规定时间内没 有进行选择,那么 GRUB 将引导默认选项。 2) 菜单编辑接口 在菜单接口下按 e 键可以进入此接口,GRUB 中对应启动项目的所用命令行都会在此接 口下显示出来,用户也可以在此接口下增加或修改这些命令行。 3) 命令行接口 命令行接口是 GRUB 接口中一个非常重要的交互式接口。在此接口下能实现许多控制 功能,输入命令后按回车就能执行该命令。 4) 接口加载顺序 启动系统时,GRUB 会首先查找配置文件,一旦找到就显示一个带有菜单列表的菜单接 口以供用户选择。如果在规定时间内没有按下任何键,那么 GRUB 会加载其配置文件中设定 的默认项。如果配置文件不存在或配置文件无法读取,那么 GRUB 会加载命令行接口,以允 许用户键入命令来完成引导工作。如果配置文件无效,那么 GRUB 会在屏幕上显示出错误信 息并询问输入,此时按下任意键会重新加载菜单接口,用户可以根据出现的错误提示来修改 出错的行。 14 Linux 系统案例精解 1.3.2 GRUB 应用 1. 单用户模式 下面首先使用一个在引导时改变运行级别的例子来演示 GRUB 引导管理程序的用法。 如果系统管理员忘记了 root 用户的密码,那么我们可以使系统引导进入运行级别 1,即单用 户模式。在单用户模式下可以重置 root 用户密码。 操作过程如图 1-18 至图 1-22 所示。 图 1-18 在 GRUB 菜单界面按“e”键进入编辑模式 图 1-19 将光标定位在第二行并按“e”键进行编辑 图 1-20 在行的末尾加上 1(也可以加上 s 或 S 或 single 或 init 1) 15第 1 章 Linux 安装与启动 图 1-21 回车返回后按“b”键进行引导 图 1-22 无需密码直接进入单用户模式并使用 passwd 修改 root 用户密码 2. GRUB 密码与安全 1) 明文密码 上面的例子很容易地就可以更改 root 用户的密码,读者可能会觉得很不安全。其实我们 可以为 GRUB 设置密码来进行限制,从而达到比较好的效果。 [root@zl ~]# vi /boot/grub/grub.conf …… password=111111 title Red Hat Enterprise Linux Server (2.6.18-128.el5) …… password=222222 title Windows 2003 Server …… password=333333 在 grub.conf 文件的相应位置加入以上几行,title 之外的由 password 指定的密码是菜单 编辑密码,即如果需要在启动菜单画面上编辑菜单就必须输入正确的密码才行,而每个 title 内的由 password 指定的密码是操作系统启动密码,用户只有知道相应的密码才能启动对应的 操作系统,这些密码都会在您重新启动系统并选择相应操作时生效。password 后面使用的是 明文密码,还不是很安全,下面我们使用加密方式来产生密码。 16 Linux 系统案例精解 2) md5 加密密码 [root@zl ~]# grub-md5-crypt Password: Retype password: $1$H/BO4/$AZekxsflVYwmtzwaGjt6p0 使用 grub-md5-crypt 命令可以生成 md5 加密密码,从上面的命令运行过程来看,执 行命令后需要输入两次密码(输入时不会回显),匹配后将生成 md5 格式的密码。 [root@zl ~]# grub-md5-crypt>>/boot/grub/grub.conf 使用上面的命令将 md5 密码追加到/boot/grub/grub.conf 中,注意一定要使用“>>”符号, 而不能使用“>”符号,否则/boot/grub/grub.conf 文件的内容会遭到损坏。另外要注意,用户 需要手工输入两次密码并回车。 将生成的 3 个加密密码整理成如下所示,注意 password 后面跟的不是“=”而是“--md5”。 [root@zl ~]# grub-md5-crypt>>/boot/grub/grub.conf [root@zl ~]# vi /boot/grub/grub.conf …… password --md5 $1$KFBO4/$/vG40mS1J5Ara9UbWCE6E0 title Red Hat Enterprise Linux Server (2.6.18-128.el5) …… password --md5 $1$fHBO4/$Kxh28eqrQcqKwP/7HDMaZ1 title Windows 2003 Server …… password --md5 $1$6JBO4/$gs0WCcRlYWLNlnwJI2Lff1 以后要输入密码的时候就必须输入加密密码对应的明文密码了。 3) GRUB 修复 假设在上面的操作中,用户因误用了“>”符号而将/boot/grub/grub.conf 覆盖了,那么重 新启动系统后系统会直接进入到 GRUB 命令子系统,即以“grub>”为提示符。在提示符下 输入 help 可以获得命令列表。我们可以手工输入图 1-23 所示的命令启动到系统中后再去修复。 图 1-23 手工输入命令进入系统并进行修复 17第 1 章 Linux 安装与启动 也可以使用如下命令进行修复: grub> root (hd0,1) grub> setup (hd0) 1.3.3 Linux 救援模式 有的时候,系统会出现严重错误而导致系统无法正常启动,甚至不能到达 GRUB 提示 符,这个时候我们可以使用救援模式来修复系统。 首先需要使用第一张安装光盘启动并进入安装界面,在“boot:”提示符后输入“Linux rescue”进入救援模式。经过一系列的选择设置并按照提示最终到达 Shell,这个时候硬盘上 的系统一般可以被找到并挂载在“/mnt/sysimage”下。按提示执行 chroot /mnt/sysimage 命令后,就处于损坏的系统中了。我们可以根据需要使用各种方法来修复系统。比如,在一 个安装了 Windows 和 Linux 双系统的计算机中,假如我们重新安装了 Windows,那么 MBR 会被重写,因而无法进入 Linux 系统,修复的方法是进入救援模式并 chroot 到磁盘上的 Linux 系统后,使用 grub-install/dev/sda 即可修复 Linux 系统。 救援模式是修复 Linux 系统最有效的方式之一。 编辑器是使用计算机的重要工具之一,在各种操作系统中,编辑器都是必不可少的部分。 Linux 系统管理员很重要的工作就是要修改、设定、配置某些文档,编写一些脚本文件或程 序,因此学会使用文档编辑器是必须要掌握的技能。 3.1 Linux 编辑器介绍 Linux 环境下的编辑器有很多,既有行编辑器(如 ed、ex 等)、全屏幕编辑器(如 vim、emacs 等),也有基于 KDE 或 GNOME 图形界面的编辑器(如 gedit、kwrite、nedit 等)。下面我们将 介绍几种常用的编辑器: 1. vi vi 是 Linux 系统的第一个全屏幕交互式编辑器,vi 是“visual interface”的简称,使用 vi 可以实现文本的输入、输出、删除、查找、替换、块操作等文本操作,用户还可以根据自 己的需要对其进行定制。vim 是改进版的 vi,vim 可以用不同颜色来显示文字内容,另外还 能够进行诸如 shell 脚本、C 语言、PHP 脚本等的编辑功能,因此可以将 vim 看做一种程序 编辑器。目前,vim 在编辑器中应该是首屈一指的。 2. emacs emacs 是 Editor MACroS(编辑器宏)的缩写,emacs 开放源代码,使用起来比较复杂。但 是此工具除了可以编辑文本外,还可以作为一个完整的开发环境,具有丰富的功能,几乎无 所不能。emacs 和 vim 一样,是 Linux 下用得最为广泛的编辑器。 Linux 编辑器 3 CHAPTER 51第 3 章 Linux 编辑器 3. nedit nedit 是一款 Linux 下的开发源码的功能强大的编辑器,支持对 C 语言的关键字进行高 亮显示,具有很强的代码编写功能。nedit 有可记录的宏,它的宏编写功能非常强大。它的搜 索和替换功能也很精密,这对于开发者来说是要经常使用的,另外它的操作也很简单。 4. gedit gedit 是GNOME桌面环境下使用的一个图形化文本编辑器,它使用 gtk+编写而成。可以 打开、编辑并保存纯文本文件,还可以从其他图形化桌面程序中剪切、粘贴文本以及打印文 件。gedit 对中文支持很好,可以处理 UTF-8,界面简单易用。 5. kwrite kwrite是一个KDE桌面环境下的文本编辑器,kwrite的主要特色是支持的语言十分丰富, 支持 C/C++、Java、Python、Perl、Bash、Modula 2、HTML、Ada KWrite,kwrite 还支持对 行号和语法加亮显示,作为程序员编辑器,kwrite 已经被完全汉化,操作也十分简单。 3.2 vim 编 辑 器 vim 是 Bram Moolenaar 开发的与 UNIX 下的通用文本编辑器 vi 相兼容但功能更加强大 的文本编辑器。它支持语法变色、正规表达式匹配与替换、插入补全、自定义键等功能,为 编辑文本尤其是编写程序提供了极大方便。接下来我们介绍 vim 的使用方法。 3.2.1 打开文件 例 3-1:在 vim 下打开/etc/inittab 文件。如果打开的文件不存在,那么 vim 会新建一个文 件,命令如下: [root@localhost ~]# vim /etc/inittab 【说明】:这里使用的命令 vim 和 vi 不是等效的,vim 比 vi 编辑器的功能及支持的正 则表达式要多得多。 [root@localhost ~]#alias vim alias vim='vim' 52 Linux 系统案例精解 文件的打开结果如图 3-1 所示,可以看到文件的内容,光标停留在文件的第 1 行。 图 3-1 打开文件 用户可以设定文件打开后光标停留在预定位置,命令如表 3-1 所示。 表 3-1 打 开 文 件 命 令 功 能 vim +n filename 打开文件,并将光标置于第 n 行的行首 vim + filename 打开文件,并将光标置于最后一行的行首 vim +/pattern filename 打开文件,并将光标置于第一个与 pattern 匹配的行 vim -r filename 上次使用 vim 编辑器时发生系统崩溃,打开其交换文件 3.2.2 读文件 打开文件后,vim 进入的模式被称为普通模式。在这个模式中,可以使用键盘上的上、 下、左、右方向键或其他键来移动光标,读文件,具体操作如表 3-2 所示。 表 3-2 移 动 光 标 操 作 功 能 h 或 向左方向键(←) 光标向左移动一个字符 j 或 向下方向键(↓) 光标向下移动一个字符 k 或 向上方向键(↑) 光标向上移动一个字符 53第 3 章 Linux 编辑器 (续表) 操 作 功 能 l 或 向右方向键(→) 光标向右移动一个字符 Ctrl + f 屏幕向下移动一页 Ctrl + b 屏幕向上移动一页 Ctrl + d 屏幕向下移动半页 Ctrl + u 屏幕向上移动半页 + 光标移动到非空格符的下一列 - 光标移动到非空格符的上一列 n 光标会向右移动这一行的 n 个字符 0 或功能键 Home 移动到这一行的最前面字符处 $ 或功能键 End 移动到这一行的最后面字符处 H 光标移动到屏幕最上方那一行的第一个字符 M 光标移动到屏幕中间那一行的第一个字符 L 光标移动到屏幕最下方那一行的第一个字符 G 光标移动到这个文档的最后一行 nG 光标移动到这个文档的第 n 行 gg 光标移动到这个文档的第一行,相当于 1G n 光标向下移动 n 行 3.2.3 编辑文件 例 3-2:用 vim 建立一个名为 demo 的文件,输入内容“Hello World!”。按以下方式 操作: [root@localhost ~]# vim demo 进入普通模式,如图 3-2 所示。这时是不能输入内容的,输入字母 i 即可转换到编辑模 式,文件的最下方会出现“插入”字样,如图 3-3 所示。输入内容“Hello World!”。 54 Linux 系统案例精解 图 3-2 进入 vim 普通模式 图 3-3 编辑文件内容 如果需要在文档中输入内容,就一定要切换到编辑模式。从普通模式进入编辑模式的操 作如表 3-3 所示。 表 3-3 进入插入或替换模式 操 作 功 能 i, I 进入插入模式,i 表示从当前光标前插入,I 表示在当前所在行的第一个非空 格字符处开始插入 a, A 进入插入模式:a 表示从当前光标所在位置的下一个字符处开始插入,A 表 示从光标所在行的最后一个字符处开始插入 o, O 进入插入模式:字母 o 表示在当前光标所在的下一行处插入新的一行,大写 字母 O 表示在目前光标所在处的上一行插入新的一行 r, R 进入替换模式:r 表示只会取代光标所在的那一个字符一次;R 则表示会一 直取代光标所在的文字,直到按下 Esc 键为止 55第 3 章 Linux 编辑器 通常在 Linux 中进入到插入或替换编辑模式时,界面的左下方会出现“插入”提示,此 时方可进行编辑。而如果要回到普通模式,则必须按下 Esc 键以退出编辑模式。 另外,在编辑文档时,可以使用删除字符或删除整行的方法来处理文档内容,也可以使 用复制、粘贴来处理文件。在普通模式下可以实现删除、复制、粘贴等操作,功能如表 3-4 所示。 表 3-4 删除、复制与粘贴 操 作 功 能 x, X 在一行字当中,x 为向后删除一个字符, X为向前删除一个字符 nx n 为数字,连续向后删除 n 个字符 dd 删除光标所在的那一行 ndd n 为数字,删除光标所在行的向下 n 行 d1G 删除光标所在行到第一行的所有数据 dG 删除光标所在行到最后一行的所有数据 d$ 删除光标所在字符位置之后的该行的所有字符 d0 0 为数字,删除光标所在字符位置之前的该行的所有字符 yy 复制光标所在的那一行 nyy n 为数字。复制光标所在行的向下 n 行 y1G 复制光标所在行到第一行的所有数据 yG 复制光标所在行到最后一行的所有数据 y0 复制光标所在的那个字符到该行行首的所有数据 y$ 复制光标所在的那个字符到该行行尾的所有数据 p, P p 表示将已复制的数据在光标的下一行粘贴,P 则表示在光标的上一行粘贴 J 将光标所在行与下一行的文字结合成同一行 c 删除当前行并转成编辑模式 u 撤销上次操作 Ctrl+r 重做上次操作 3.2.4 存盘和退出 当编辑完文件,需要对文件进行保存或退出时,需要按 Esc 键以从编辑模式退回到普通 模式,在末行输入 wq 即可存盘退出 vim,如图 3-4 所示。 56 Linux 系统案例精解 图 3-4 存盘退出 存盘、退出的命令有多种选择,用户也可以在末行命令模式下,将其他文档的内容读入 到正在编辑的文档中,或者把编辑的文档写到其他文档,命令如表 3-5 所示。 表 3-5 存盘、退出、读写命令 操 作 功 能 :w 将编辑的内容写入磁盘 :w! 当文件为只读时强制写入该文件,是否写入与用户的权限有关 :q 退出 vim :q! 当修改过文件但又不想存盘时,可使用!来强制退出而不存盘 :wq 存盘退出,若为:wq!则表示强制存盘退出 ZZ 若文件没有修改,则不存盘退出;若文件已修改,则存盘退出 :w [filename] 将编辑的文件存到 filename 这个文件中 :r [filename] 在编辑的文件中读入另一个文档的内容 :n1,n2 w [filename] 将 n1 行到 n2 行的内容写到 filename 这个文件中 :! command 暂时退出 vim 到命令行下,执行 command 的显示结果 3.2.5 查找和替换命令 在普通模式下,输入“:”、“/”、“?”这三个字符中的任何一个都可以将光标移动 到屏幕最底下的一行,即末行命令模式。在这个模式中,可以进行查找、替换,命令如表 3-6 所示。 57第 3 章 Linux 编辑器 表 3-6 查找和替换命令 操 作 功 能 /word 向光标之下寻找一个名为 word 的字符串 ?word 向光标之上寻找一个名为 word 的字符串 n 重复前一个搜寻动作(向下查找) N 反向进行前一个搜寻动作(向上查找) :n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 到 n2 行之间寻找 word1 这个字符串,并用 word2 取代该字符串 :1,$s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并用 word2 取代该字符串 :1,$s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并用 word2 取代该字符串,并 且在取代前显示提示字符以供使用者确认 :noh 取消查找到内容后的高亮显示 3.2.6 设置 vim 环境 在 vim 的使用过程中,设置环境也是非常重要的一个环节。环境设置好了,可以更便于 vim 的使用并且能提高编辑的速度。环境设置命令也是在末行命令模式下使用的,如表 3-7 所示。 表 3-7 vim 的环境设置参数 操 作 功 能 :set nu 设置行号 :set nonu 取消行号 :set hlsearch 将搜寻的字符串高亮度显示。hlsearch 是默认值 :set nohlsearch 取消将搜寻的字符串高亮度设定 :set autoindent 设置自动缩排 :set noautoindent 取消自动缩排 :set backup 设置自动备份文档,默认是 nobackup。如果设置成 backup,那么当更改 文件时源文件会被另存成一个名为 filename~的文件 :set nobackup 取消自动备份文档 :set ruler 在屏幕右下角显示状态行 :set noruler 不在屏幕右下角显示状态行 :set showmode 显示左下角的状态行 58 Linux 系统案例精解 (续表) 操 作 功 能 :set noshowmode 不显示左下角的状态行 :set backspace=(012) 在编辑模式下,设置退格键(Backspace)的功能。Backspace 为 2 时,可以 删除任意值;为 0 或 1 时,仅可删除刚刚输入的字符,而无法删除原本就 已经存在的字符 :set all 显示目前所有的环境参数设置值 :set 显示与系统默认值不同的设置参数 :syntax on 设置文档依据程序相关语法显示不同颜色 :syntax off 取消文档依据程序相关语法显示不同颜色 :set bg=light 将文字显示为不同的颜色色调, light 是默认值 :set bg=dark 将文字显示为不同的颜色色调 以上提到的 vim 的工作环境共分为 3 种模式,分别是普通模式、编辑模式与末行命令模 式,这三种模式之间的转换关系可以由图 3-5 简单地表示。在 vim 的 3 种模式下,有很多操 作功能可供使用,读者需要反复练习,直到熟练为止。 $ vi demo 普通模式 编辑模式 末行 命令模式 Enter :/? Esc a i o 图 3-5 vim 三种模式的相互转换 例 3-3:vim 综合练习。 (1) 把文件/etc/inittab 复制到/tmp 目录下。 (2) 使用 vim 打开/tmp 目录下的 inittab 这个文档。 (3) 在 vim 中设定行号。 (4) 移动到第 38 行,向右移动 38 个字符,双引号内是什么内容? 59第 3 章 Linux 编辑器 (5) 移动到第 1 行,并向下搜寻一下“reboot”这个字符串在第几行? (6) 将 23 行到 26 行之间的小写 wait 字符串改为大写 WAIT,逐个挑选是否需要修改, 一直按“y”,结果改变了几个? (7) 修改完之后,突然反悔了,全部进行复原。 (8) 复制 9 到 17 这 9 行的内容,粘贴到最后一行之后。 (9) 将这个文件另存为一个 inittab.test 文件。 (10) 来到第 32 行,并且删除 21 个字符,结果出现的第一个单字是什么? (11) 在第 1 行新增一行,为该行输入内容“good luck!”。 (12) 存盘退出。 操作步骤如下: (1) cp /etc/inittab/tmp。 (2) vim /tmp/inittab。 (3) 切换到末行命令模式:set nu,然后将会在画面中看到左侧出现了行号。 (4) 在普通模式下,输入“38G”,再按下“38→”,将会看到提示“Power Failure;System shuting downir”。 (5) 在普通模式下输入“1G”或“gg”后,直接输入“/reboot”,则会来到第 15 行。 (6) :23,26s/wait/WAIT/gc,按“y”最终会出现“在 4 行内置换 4 个字符串”的 说明。 (7) 一直按“u ”恢复到原始状态或不存盘退出:q!之后,再重新编辑文档。 (8) 在普通模式下输入“9G”,然后再“9yy ”之后最后一行会出现“复制 9 行”说明, 按下“G ”到最后一行,输入“p”粘贴这 9 行。 (9) :w inittab.test。 (10) 输入“32G”之后,再输入“21x”即可删除 21 个字符,出现“shutdown”。 (11) 先输入“1G”来到第 1 行,然后输入大写的“O”便可新增一行且处于插入模式, 输入“good luck!”。 (12) :wq。 3.3 vim 编辑器的高级功能 vim 的新版本中加入了一些高级功能,这些功能使 vim 使用起来更为灵活、方便,并且 能够提高编辑的效率。 60 Linux 系统案例精解 3.3.1 文本内容的局部选择与操作 文本内容的局部选择与操作是在普通模式下进行的。选择包括选择字符、选择行、选择 区域,文本选择后亮度会反显;操作主要是复制、粘贴和删除,如表 3-8 所示。 表 3-8 文本局部选择与操作 操 作 功 能 v 选择部分字符,在选择的第一个字符按“v”后移动光标,光标经过处都会被选择 V 选择若干行,在选择的某行输入“V”,上下移动光标,光标经过行都会被选择 Ctrl+v 选择块,将光标移到文档的某个位置,输入“Ctrl+v”,屏幕下方会出现“-VIMSUAL BLOCK-”状态显示,移动光标,光标覆盖的矩形区域都会被选择 y 将选中的部分复制 P 粘贴复制的部分 d 将选中的部分删除 例 3-4:对一个 DNS 服务器配置文档的部分内容进行编辑,原配置文档如图 3-6 所示。 图 3-6 原配置文档 实现要求: ● 将文档中的网络地址,即 192.168.1,复制到第 1 行之前。 ● 将第 2 列删除。 实现步骤: (1) 在普通模式下,将光标移动到第 1 行的 IP 地址处,即“192”处,移动光标选择网 络地址,按“y”进行复制。输入“O”在第 1 行前加入空行,然后再切换到普通模式,输入 “p”进行粘贴。 (2) 在普通模式下,将光标移动到第 1 行的“IN A”的字母“I”处,输入“Ctrl+v”, 移动光标,选择需要的内容,选好后若出现颜色反显则说明选中,如图 3-7 所示。输入“d” 即可将它们删除,编辑后的结果如图 3-8 所示。 61第 3 章 Linux 编辑器 图 3-7 选择文本块 图 3-8 编辑后的文档 3.3.2 编辑多个文档 例 3-5:在 vim 中打开/etc/passwd 和/etc/shadow 这两个文件,然后在这两个文档间切换。 实现方法: [root@localhost ~]# vim /etc/passwd /etc/shadow 可以看到,passwd 文件被打开,可以进行编辑。在末行命令模式下输入:n,即可编辑 shadow 文件。同样,在末行命令模式下输入:N,又可切换回 passwd 文件。 可见在编辑多个文档时,在末行命令模式下输入:n 是编辑下一个文档,输入:N 是编辑 上一个文档,输入:files 则是列出当前 vim 打开的所有文档。 3.3.3 多窗口功能 当一个文档非常大,需要前后对照数据时,以及当有两个文档需要对照时,可使用 vim 的多窗口编辑功能。 62 Linux 系统案例精解 例 3-6:在两个窗口中编辑/etc/passwd 和/etc/shadow 这两个文件。 实现步骤: [root@localhost ~]# vim /etc/passwd 然后在末行命令模式下输入 sp /etc/shadow 即可看到在两个窗口中分别显示每个文 件的编辑状态,可以使用“Ctrl+w+↑”和“ctrl+w+↓”或者“ctrl+w+j”和“ctrl+w+k”来在 两个窗口之间移动。使用:vsp 可以水平拆分窗口。如果需要比较两个文件,只需要打开一 个文件后,在末行命令模式下输入:sp 后拆分窗口,再输入:diffthis,即可对比显示这 两个文件的不同之处,编辑起来十分方便。 3.3.4 插入补全 在编辑模式下,为了减少重复的击键输入,vim 提供了若干快捷键。当要输入某个上下 文中曾经输入过的字符串时,可输入开头的若干个字符,然后使用快捷键 Ctrl-p 或 Ctrl-n, vim 将搜索上下文,找到匹配的字符串,从而将剩下的字符补全,这样就不必输入了。Ctrl-x 或 Ctrl-l 可以补全一行。Ctrl-f 可以补全一个文件名,这样编程序时对长变量名的操作也会 很方便。 3.3.5 打开目录 在末行命令模式下,:new 和:split 等命令不但可以打开普通文件,还可以打开目录。 一个目录打开之后将列出里面的文件信息,输入回车可继续打开相应的文件或子目录,也可 以输入“?”来得到有关其他的目录操作(如修改文件名,删除文件等)的帮助。 3.3.6 折叠隐藏文本 当一个文档太长,而用户只需要处理其中的一部分时,可以把某些行折叠隐藏起来,被 折叠的行将以一行来显示。折叠可以用多种方式来加以控制,可以通过设置 foldmethod 选 项的值来控制。默认情况下,foldmethod=manual 为手工折叠。在可视模式下选择一段文本, 然后按 zf 可以手工创建一个折叠。在普通或插入模式下,在折叠行上横向移动光标可打开被 折叠的行。 例 3-7:打开文件/etc/passwd,折叠第 10~16 行。 操作步骤: (1) 打开文件/etc/passwd,把光标移到第 10 行: 63第 3 章 Linux 编辑器 [root@localhost ~]# vim +10 /etc/inittab (2) 添加行号: :set nu (3) 在普通模式下输入 v,进入可视模式,把光标向下移动 6 行,即可选中第 10~16 行, 如图 3-9 所示。选中后按 zf 即可折叠隐藏文本,如图 3-10 所示。 图 3-9 选择多行文本 图 3-10 折叠隐藏文本 3.3.7 设置环境文件 为了便于使用 vim 来预设环境,如果想要知道目前的设定值,可以在末行命令模式下输 入:set all 来查阅,项目非常多。整个 vim 的设定值一般是放置在/etc/vimrc 这个文件中 64 Linux 系统案例精解 的,不过用户也可以通过修改~/.vimrc 文件来设定自己的 vim 环境。 例 3-8:修改 vim 的预设环境,使打开文件时行号就已存在,并且编辑文档时,回车换 行后与前一排文档的第一个非空字符对齐。 实现如下: [root@localhost ~]# vim ~/.vimrc set autoindent "自动对齐" set nu "加行号" 注意: 在这个文档中,如果加入的内容是批注,则需要用双引号(“”)括起来。 3.3.8 文件恢复功能 使用 vim 编辑文档时,vim 会在被编辑文档的目录下再建立一个名为 filename.swp 的交 换文档。比如编辑/tmp/inittab 这个文档时,vim 会主动建立/tmp/inittab.swp 的暂存档,编辑 时对 inittab 做的所有动作都会被记录到这个暂存档中。如果系统因某些原因中断了,那么 inittab.swp 就能够起到救援的功能。 例 3-9:恢复文件。 (1) 在 vim 的普通模式下输入“Ctrl+z”,模仿不正常的文件中断: [root@localhost tmp]# vim inittab [2]+ Stopped vim inittab [root@localhost tmp]# (2) 这时在目录中可以看到有一个交换文件: [root@localhost tmp]# ll -a .inittab* -rw-r--r-- 1 root root 12288 5 月 19 22:06 .inittab.swp (3) 当再次编辑文件时会出现: E325: 注意 发现交换文件 ".inittab.swp" 所有者: root 日期: Tue May 19 22:06:42 2009 文件名: /tmp/inittab 修改过: 否 65第 3 章 Linux 编辑器 用户名: root 主机名: localhost.localdomain 进程 ID: 24309 (当前进程 ID: 24309 (正在执行)) 当打开文件时 "inittab" 日期: Tue May 19 22:06:33 2009 可能有另一个程序也在编辑同一个文件 如果是这样,请注意不要一起写入,不然你的努力都会付诸东流。 退出,或是继续编辑。 上一次编辑此文件时崩溃 如果是这样,请用 ":recover" 或 "vim -rinittab"恢复修改内容(进一步说明请看 ":help recovery")。如果该恢复的都已经恢复了,请直接删除此交换文件 ".inittab.swp"以避免再看到此信息。 交换文件 ".inittab.swp"已经存在了! [O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort: 选项分别代表的含义如下所示,用户可以按照自己的需要来选择操作。 ● [O]pen Read-Only:以只读方式打开文档。 ● (E)dit anyway:用正常的方式打开要编辑的那个文件,但不载入交换文件的内容。 注意这样做可能会导致两个使用者互相改变对方文档。 ● (R)ecover:就是加载交换文件的内容,对挽救文档存盘并退出 vim 后,还是要手动 自行删除那个交换文件。 ● (D)elete it:确定那个交换文档是没用的,打开文档前删除交换文档。 ● (Q)uit:退出 vim,不进行任何动作就返回到命令提示符。 ● (A)bort:忽略这个编辑行为,回到命令提示符。 按照以上提示,用户可以选择 R,删除原来的.inittab.swp 后即可恢复文档。 以上是对 vim 功能的一些介绍,更详细的描述请读者看:help。vim 的掌握是一个实践 过程的积累,使用多了就会觉得越来越好用,就会体会出其功能的强大。 用户管理的主要工作就是新建合法的用户账号,设置和管理用户的密码,修改用户账号 的属性以及删除已经废弃的用户账号。除了介绍上述内容外,本章还会详细介绍用户和工作 组的配置文件,用户、工作组权限及其设定等。 4.1 用户和工作组概述 如果把 Linux 比喻成一个公司,那么用户就是公司里的员工,工作组就是公司的各个部 门。公司的每个部门与员工都有自己的编号。在 Linux 里,用户的编号被称为 UID,也就是 用户 ID 号;工作组的编号被称为 GID,也就是工作组 ID 号。Linux 只认识 UID 与 GID,而 不认识用户名与工作组名。在 Linux 里,每个执行程序或文件都标识有权限,只允许拥有相 应权限的用户或工作组进行相应的操作。 1. 用户的分类 ● 超级用户:超级用户又称 root 用户,是系统安装过程中自动创建的,UID 为 0。在 Linux 中,root 用户具有至高无上的权限。它可以控制所有的程序,访问所有文件以 及使用系统上的所有功能,包括破坏或删除系统。对于 root 用户来说没有不可以做 的事情,所以,一定要对 root 账号设置安全的密码,在日常的事务处理中,不要使 用 root 身份。其他用户也可以被赋予 root 特权,通常可以配置一些特定的程序由某 些用户以 root 身份去运行,而不必赋予他们 root 权限。 ● 普通用户:普通用户是操作权限受到限制的用户。RedHat 普通用户的 UID 范围为 500~60000。 ● 伪用户:伪用户是限制了本机登录的用户,只能用于远程登录,建立用户时不会建立本 用 户 管 理 4 CHAPTER 67第 4 章 用 户 管 理 地用户配置文件,大多是一些由程序使用的用户。RedHat 伪用户的 UID 范围为 1~499。 2. 工作组的分类 ● root 组:GID 为 0。这里要注意一个问题,并不是属于 root 工作组的用户就拥有 root 权限。例如,若一个文件标明了 root 工作组拥有读和执行的权限,则所有属于 root 工作组的用户都可读该文件,而 root 用户除了读的权限之外还可以写该文件。 ● 普通组:系统会预留一些较靠前的 GID 以供系统虚拟用户(也被称为伪装用户)之用。 每个系统预留的 GID 都会有所不同,比如 RedHat 预留了 500 个,添加新工作组时, 工作组的 GID 是从 500 开始的;而 Slackware 是把前 100 个 GID 预留,新添加的工 作组的 GID 是从 100 开始。 4.2 创建用户和工作组 4.2.1 创建用户 1. 在命令行界面创建用户 在 Linux 中,只有 root 用户才有权限使用 useradd 命令创建新用户。 useradd [选项] 用户名 例 4-1:在命令行创建一个新用户。 useradd user1 这样便创建了一个用户 user1,但是 user1 的用户属性都是默认的。您也可以使用 useradd 的参数来创建拥有非默认属性的用户。 useradd 的主要参数有: ● -c:用户注释。 ● -d:用户自家目录路径。 ● -m:如果用户自家目录为空,则为用户新建一个自家目录。 ● -e:用户过期时间。 ● -g:用户的 GID 号,即初始组的 ID 号。 ● -G:把用户加入到其他工作组。 68 Linux 系统案例精解 ● -p:用户密码设置,设置时密码必须是加密的。 ● -s:用户使用的 shell 设置,默认为 bash。 ● -u:用户 UID 号。 例 4-2:使用各个参数来创建一个自定义用户。 # useradd -u 505 -g 555 -G root -p '$1$xgbkna7b$or4QbLvM0fRPDZ2jJ3sHZ0' -d /tmp/user1 -m -c "the first user" -e 20091201 user1 以上命令创建了一个名为“user1”的新用户(命令的最后一个参数);-u 505 用于指定 这个新用户的 UID,如果不指定,系统默认第一个新普通用户的 UID 从 500 开始;-g 555 强制把 user1 的工作组设置成 555;-G root 将用户同时也加入到“root”这个工作组中; -p '$1$xgbkna7b$or4QbLvM0fRPDZ2jJ3sHZ0'用于为该用户设置密码,此时的密码 必须是加密的,且需要用单引号括起来;-d /tmp/user1 –m 将 user1 主目录设置为 “/home/username”;-c 'the first user'是对这个用户的注释;–e 20091201 表示 该用户 2009 年 12 月 1 号将到期。 2. 在图形界面创建用户 在菜单栏选择“系统”|“管理”|“用户和组群”,打开“用户管理者”窗口。 单击“添加用户”按钮,填写好新添的用户名、口令并创建用户主目录(可默认),为用 户创建私人组群(可选),手工指定用户 ID(可默认),登录 shell(可默认),然后单击“确定” 按钮,如图 4-1 所示。 图 4-1 创建新用户 69第 4 章 用 户 管 理 4.2.2 创建工作组 1. 在命令行界面创建工作组 在 Linux 中,只有 root 用户才有权限使用 groupadd 命令创建新工作组。 groupadd [选项] 组名 useradd 的主要参数有: ● -g:后接 GID,如果不使用-o 参数,则该值必须是唯一的且值不能为负,预设值以 /etc/login.defs 为准。 ● -o:此选项是和-g 选项一起使用的。如果使用了该选项,则允许使用相同的组标识 (GID)。 ● -r:此参数用于建立系统工作组。系统工作组的 GID 会比定义在系统档文件 /etc/login.defs 上的 GID_MIN 的小,取值范围是 0~499。 ● -f:这是一个强制选项。当用户试图建立一个已经存在的组的时候,groupadd 将会 停止并返回一个错误信息。如果使用了该选项,则不返回错误信息。 例 4-3:增加一个名为“mygroup”的工作组,该工作组的 GID 为 777。 #groupadd –g 777 mygroup 2. 在图形界面创建工作组 在菜单栏选择“系统”|“管理”|“用户和组群”,打开“用户管理者”窗口。 单击“添加组群”按钮,填写好组群名,手工指定组群 ID(可默认),然后单击“确定” 按钮,如图 4-2 所示。 图 4-2 创建新组群 70 Linux 系统案例精解 4.3 管理用户和工作组 4.3.1 用户管理命令 1. 修改用户基本属性 可以使用 usermod 命令,其参数大多跟 useradd 一样,具体命令请参考 man usermod usermod –help。使用语法如下所示: usermod [选项] 组名 例 4-4:修改用户 user1,并把用户加入到 mygroup 工作组(4.2.2 节创建了 mygroup 工 作组)。 # usermod -a -G 777 user1 4.2.2 节已经设定 user1 用户加入了 root 组,当执行完上述命令后,user1 又加入了 mygroup 组。参数-a 为附加的意思。 例 4-5:修改 user1 的 UID 为 666,登 录 shell 为 tcsh,且该用户在 2010 年 12 月 31 号会 过期。 # usermod -u 666 -e 20101231 -s /etc/tcsh user1 例 4-6:当用户的登录 shell 被设置为 nologin 时,该用户是不能够进行交互式登录的。 # usermod -s /etc/nologin user1 此时将不允许 user1 再进行交互式登录。 2. 创建/修改用户口令 设置口令是一件非常重要的事情,要设置一个好的口令以使其不容易为他人获得或破 解,大致有以下几点需要注意: ● 不要使用与自己有关的单词、数字等作为口令。 ● 口令应该尽可能长,每多一位,破解的可能性就会降低好几个数量级。 ● 不同地方的登录口令不要相同。 ● 在网络上传递口令时一定要加密,最好不要通过非面授的方式传递口令。 71第 4 章 用 户 管 理 ● 口令应该经常更换。 root 用户可以修改任何用户的口令,包括自身的口令,并且不受任何限制。普通用户则 只能修改自己的口令,且该用户没有被 root 锁定。需要注意的是,普通用户修改口令时必须 满足口令的复杂性要求,否则会被系统拒绝。 在 Linux 中,可以用 passwd 命令修改或创建用户的口令,具体命令请参考 man passwd 或 passwd –help。当 passwd 命令后面不接任何参数或用户名时,表示修改自己的口令; 当 passwd 后接用户名时,则为修改该用户的口令。例如: passwd username passwd 的命令参数有: ● -k:使将要过期的用户在期满后仍能使用。 ● -d:删除用户密码,需 root 权限。 ● -l:锁住用户,需 root 权限。 ● -u:解除锁定,需 root 权限。 ● -f:强制操作,需 root 权限。 ● -x:变更口令的最大天数,后接数字;需 root 权限。 ● -n:变更口令的最小天数,后接数字;需 root 权限。 ● -w:变更口令提醒(天),需 root 权限。 ● -i:在口令过期后多少天用户被禁掉,需 root 权限。 ● -S:查询用户口令状态,需 root 权限。 例 4-7:修改 user1 的用户口令。 [root@example ~]# passwd user1 Changing password for user user1. New UNIX password: BAD PASSWORD: it is too simplistic/systematic Retype new UNIX password: passwd: all authentication tokens updated successfully. 从以上示例可以看到,root 用户给 user1 用户修改口令,虽然提示为不安全口令(口令复 杂性不够),但是 root 用户还是成功地为 user1 用户修改了口令。 例 4-8:冻结 example1 用户。 [root@example ~]# passwd -l example1 此时,用户 example1 被冻结,不能够登录。查看文件/etc/passwd 和/etc/shadow 是否发 72 Linux 系统案例精解 生了改变。 例 4-9:清空 example1 用户的口令。 [root@example ~]# passwd -d example1 3. 修改用户口令属性 chage 用于改变用户口令时效的属性及用法: chage [选项] 用户名 该操作与 passwd 类似,具体命令请参考 man chage 或 chage –help。 4. 删除用户 要删除用户,可使用 userdel 命令,用法为: userdel [选项] 用户名 当使用-r 选项时,系统会将该用户的自家目录全部清除,例如: userdel –r jony 此时,系统会把 jony 用户的自家目录也完全删除掉。如果不用-r 选项,则 jony 用户的 自家目录还会继续存在。 4.3.2 用户管理文件 1. /etc/passwd 文件 在 Linux 系统中,系统并不认识用户名,而是只认识 UID 。用户的 UID 保存在/etc/passwd 这个文件中。该文件的每一行为一个用户,共记录了 7 项用户属性,每个用户属性用冒号隔 开,例如: user1:x:666:555:the first user:/tmp/user1:/etc/tcsh 这 7 项属性依次是: ● 用户名:user1。 ● 口令:当用户口令被加密后,口令处显示为“x”。 ● UID:666。 73第 4 章 用 户 管 理 ● 组 ID:555。 ● 描述信息:the first user。 ● 用户自家目录:/tmp/user1。 ● 用户登录 shell:/etc/tcsh。 如果想修改 user1 用户的基本属性,也可以直接修改该文件,但是编辑该文件时需要 root 权限。 例 4-10:把 UID 修改为 888。 # vi /etc/passwd user1:x:888:555:the first user:/tmp/user1:/etc/tcsh 修改后,保存并退出,此时 user1 用户的 UID 就被改成 888 了。 2. /etc/shadow 文件 在早期的 UNIX 操作系统中,用户的账户信息和口令都保存在“/etc/passwd”文件中, 尽管已经对口令进行过加密,但由于“/etc/passwd”文件对系统中的所有用户都是可读的, 因而不是很安全。现在,Linux 使用“/etc/shadow”文件来保存用户口令及其相关的属性。 “/etc/shadow”文件中一共有 9 项,每项用冒号隔开,例如: user1: $1$xgbkna7b$or4QbLvM0fRPDZ2jJ3sHZ0:14375:0:99999:7::14974: 这 9 项分别是: ● 用户名:user1。 ● 口令:$1$xgbkna7b$or4QbLvM0fRPDZ2jJ3sHZ0(使用了 MD5 加密)。 ● 口令上次改动日期:14375(Linux 以 1970 年 1 月 1 日为 1 来计算)。 ● 口令变更期限限制:0(0 表示可以在任何时间修改口令)。 ● 强制用户变更口令期限:99999(多少天后用户必须变更密码,99999 为无需变更)。 ● 强制变更口令提醒:7(提前 7 天提醒用户变更口令)。 ● 口令过期后禁用账户天数:在口令过期后的多少天内不输入新密码,该账户就会被 限制。 ● 账户限制日期:以 1970 年 1 月 1 日为 1 来计算。 ● 保留字段:该字段为保留给以后新功能加入之用。 “/etc/shadow”文件只有 root 用户才可以修改,如果想禁止某个用户登录,在该用户口 令那项的顶格加上星号“*”即可,参见例 4-11。 74 Linux 系统案例精解 例 4-11:禁止 joy 用户登录。 # vi /etc/shadow joy:* $1$xgbkna7b$or4QbLvM0fRPDZ2jJ3sHZ0:14375:0:99999:7::14974: 修改后,保存并退出,此时 joy 用户就会被禁止登录。 4.3.3 工作组群管理命令 1. 修改工作组群基本属性 可以使用 groupmod 命令,其参数大多跟 groupadd 一样,具体命令请参考 man groupmod 或 groupmod –help。 groupmod [参数] 组名 groupmod 的命令参数有: ● - o:允许使用相同的 GID。 ● - g:设置工作组标识。 ● - n:修改工作组名。 例 4-12:把工作组 mygroup 改名为 newgroup,将用户标识 GID 改为 800。 groupmod –g 800 –n newgroup mygroup 2. 删除工作组 要删除工作组,可使用 groupdel 命令,用法如下: groupdel 工作组名 例 4-13:删除 group1 工作组。 # groupdel group1 4.3.4 工作组群管理文件 工作组信息都存放在“/etc/group”文件中,用户可以通过该文件来管理工作组。 “/etc/group”文件的格式如下: ggg:x:555: yourgroup:x:800:user1 75第 4 章 用 户 管 理 各个属性用冒号隔开,一共有 4 项,依次为: ● 工作组名称。 ● 工作组口令标识位,通常以“x”来表示。工作组的口令被记录在“/etc/gshadow”文 件中。 ● 工作组 GID:也就是工作组 ID 号,与 UID 相似。 ● 工作组成员:显示有哪些用户加入了此工作组。 在了解了该文件的结构以后,增加一个工作组其实也就是在/etc/group 文件中添加一个 新行而已。 例 4-14:创建一个名为“sale”的工作组,该组的 GID 为 600 ,编辑该文件,添加以下 内容。 sale:x:600: 这样,一个名为“sale”的工作组就手工创建完成了。 要想把用户 user1 和 joy 都加入到 sale 组中,可以将 user1 和 joy 添加到 sale 组的第 4 项 的末尾。 例 4-15:把用户 user1 和 joy 都加入到 sale 组中。 sale:x:600:user1,joy 4.3.5 用户和工作组规则文件 在使用 useradd 或 groupadd 添加用户或工作组时,并不是每个用户属性都要列举出 来。对于那些没有列举到的属性,可使用默认属性,那么创建用户时的默认属性在哪儿呢? 下面为大家讲解下“/etc/default/useradd”和“/etc/login.defs”这两个文件以及“/etc/skel”这 个目录。 1. /etc/default/useradd 文件 该文件就是使用 useradd 命令时的默认设置。先查看下“/etc/default/useradd”这 个 文 件 : # useradd defaults file GROUP=100 当没有为新建用户创建私人组时,新用户的 GID 为 100 HOME=/home 默认的自家目录路径 INACTIVE=-1 账号过期几日后停权 EXPIRE= 用户账号停止日期 SHELL=/bin/bash 用户登入后使用的 shell 名称,以后新加入的账号都将使用此 shell 76 Linux 系统案例精解 SKEL=/etc/skel 新建用户的源基本文件 CREATE_MAIL_SPOOL=yes 是否为新用户创建系统邮件箱 如果想改变创建用户时的默认设置,可直接编辑此文件,也可以使用 useradd 命令加参数的形式来设 置,例如: useradd -D [-g group] [-b base] [-s shell] [-f inactive] [-e expire ] 当单独输入 useradd -D 命令时,将显示“/etc/default/useradd”现在的预设值。参数 设置和 useradd 的一样,参见例 4-16。 例 4-16:设置以后创建的新用户的默认自家目录都在/tmp 下。 # useradd -D -b /tmp/ 2. /etc/login.defs 文件 生成新用户时,基本参数来自“/etc/login.defs”配置文件,也就是 login 程序的配置文件。 在 RedHat 系统中,“/etc/login.defs”配置文件的内容如下所示: MAIL_DIR /var/spool/mail //邮件预设目录 #MAIL_FILE .mail # Password aging controls: PASS_MAX_DAYS 99999 //口令需要变更的时间最大值 PASS_MIN_DAYS 0 //口令启用后能变更的时间最小值 PASS_MIN_LEN 5 //口令的最小长度 PASS_WARN_AGE 7 //口令失效前多少天发出警告信息 UID_MIN 500 //预设 UID 最小值 UID_MAX 60000 //预设 UID 最大值 GID_MIN 500 //预设 GID 最小值 GID_MAX 60000 //预设 GID 最大值 # # If defined, this command is run when removing a user. # It should remove any at/cron/print jobs etc. owned by # the user to be removed (passed as the first argument). # USERDEL_CMD /usr/sbin/userdel_local CREATE_HOME yes # The permission mask is initialized to this value. If not specified, # the permission mask will be initialized to 022. UMASK 077 # This enables userdel to remove user groups if no members exist. USERGROUPS_ENAB yes # Use MD5 or DES to encrypt password? Red Hat use MD5 by default. MD5_CRYPT_ENAB yes 77第 4 章 用 户 管 理 可以根据实际需要来对该文件进行修改以调整设置。例如,为了增强安全性,可以用 vi 命令打开“/etc/login.defs”配置文件,将其中的 PASS_MIN_LEN 值修改为 9: # vi /etc/login.defs PASS_MIN_LEN 9 3. /etc/skel 文件 “/etc/skel”目录中存放着用户初始化文件。当创建新用户时,系统会自动把这个目录 里的文件复制到用户的自家目录中。“/etc/skel”目录下的文件都是隐藏文件,只有 root 用 户才可以添加、删除或修改这个目录下的文件,从而为用户提供一个统一、标准的用户环境。 4.4 深化用户管理 4.4.1 手工创建用户 在了解了用户的组成结构后,可手工创建用户。手工添加用户,一般情况下分为以下几 个步骤: (1) 编辑“/etc/passwd”、“/etc/shadow”和“/etc/group”文件,添加相应的用户条目。 (2) 在需要建立用户起始目录的地方建立用户目录。 (3) 将一些用户配置文件复制到用户起始目录下。 (4) 进行其他的一些设置和修改。 例如,创建一个用户 hary,使 hary 的 UID 为 566、自家目录为/home/admin,并使 hary 加入 yourgroup 组,shell 为/bin/bash。具体步骤为: (1) 编辑“/etc/passwd”文件,添加相应条目。用文本编辑器(如 vi)打开“/etc/passwd” 文件;在最末一行添加相应的用户,最简单的办法就是从当前用户中复制相应信息,然后改 变用户名、用户 ID、组 ID 和主目录;在第 1 列插入用户名 hary,在 第 3 列插入用户 ID 566, 在第 4 列插入组 ID 566,在第 6 列插入主目录/home/admin。确保输入的信息相对于 “/etc/passwd”文件中的其他项目是唯一的,保存对文件作出的修改,如下所示: #vi /etc/passwd hary:x:566:566::/home/admin:/bin/bash /在 passwd 文件的最后一行添加此行 78 Linux 系统案例精解 (2) 编辑“/etc/shadow”文件,添加相应条目。用文本编辑器(如 vi)打开“/etc/shadow” 文件;在最末一行添加相应的用户,最简单的办法就是从当前用户中复制相应信息,修改第 一列的用户名为 hary,如下所示: # vi /etc/shadow hary:!!:14340:0:99999:7::: /在 shadow 文件的最后一行添加此行 (3) 编辑“/etc/group”文件,添加相应条目。另建一行,在第 1 列插入组名 hary,在第 3 列插入组 ID 566,并在 admin 组的第 4 列加上 hary,如下所示: # vi /etc/group hary:x:566: admin:x:800:hary (4) 为用户创建和修改自家目录设置权限。 [root@redhat ~]# mkdir /home/admin [root@redhat ~]# chown hary:hary /home/admin 以上命令使/home/admin 从属于 hary 用户和 hary 组(chown [用户]:[组] file)。 使用 passwd 命令为 hary 创建用户口令。复制基本的初始化文件。基本的初始化文件 是每个用户所必需的文件,放在/etc/skel 目录中,每当创建一个新用户时,都需要把基本的 初始化文件复制到用户的自家目录下,如下所示: [root@redhat ~]# cp /etc/skel/.* /home/admin/ 这些初始化文件都是隐藏文件,用 ls –a 命令可以看到,如下所示: [root@redhat admin]# ls -a /home/admin/ . .. .bash_logout .bash_profile .bashrc .emacs 此时,这些初始化文件的所有者还是 root 用户,我们需要改变这些文件的权限,使文件 的所有者为 hary,如下所示: [root@redhat admin]# chown -R hary:hary /home/admin/ [root@redhat admin]# ls -la /home/admin/ 总计 28 drwxr-xr-x 2 hary hary 4096 04-07 00:54 . drwxr-xr-x 5 root root 4096 04-07 00:40 .. -rw-r--r-- 1 hary hary 33 04-07 00:54 .bash_logout -rw-r--r-- 1 hary hary 176 04-07 00:54 .bash_profile -rw-r--r-- 1 hary hary 124 04-07 00:54 .bashrc 79第 4 章 用 户 管 理 -rw-r--r-- 1 hary hary 515 04-07 00:54 .emacs 这时,可以看到/home/admin 下的所有文件都属于 hary。(注:chown 的-R 参数表示递 归)。这样一来,一个完整的用户就被创建了。 4.4.2 手工删除用户 在经历了手工创建用户后,相信大家对用户的创建已经很了解了。而手工删除用户,其 实就是删除“/etc/passwd”、“/etc/shadow”和“/etc/group”文件中相应的用户条目,并将 该用户的自家目录删除。 4.4.3 批量创建用户 通过前面的学习,读者已经了解了创建用户时可以使用 useradd 命令。如果想批量创 建用户的话,可以利用 useradd 命令的特性,如下所示: 1. 使用 useradd 命令结合 shell 命令来实现 (1) 创建一个名为“userlist”的文件,编辑该文件,并在该文件中添加要创建的用户名。 [root@example ~]# vi userlist Jake Tang Monika Dove David User2 (2) 编写 for 循环脚本: [root@example ~]# for i in 'cat userlist';do useradd -p $1$xgbkna7b$or4QbLvM0fRPDZ2jJ3sHZ0 '' $i;done 此时,便创建了所有列在 userlist 上的用户。这里比较特殊的地方在于,使用的口令必 须是经过加密的。关于怎么得到加密口令的办法有很多,最直接的方法就是到/etc/shadow 中 去取。 如果想更改新用户的各种属性,可配合使用 useradd 选项或“/etc/default/useradd”和 “/etc/login.defs”文件。 2. 使用 newusers、pwunconv、chpasswd、pwconv 等工具来实现 (1) 首先创建一个名为“userlist”的文件,在该文件中写入每个新用户的用户名、UID、 自家目录等,每一行都要按照“/etc/passwd”文件中的格式来写,其中口令这栏可以为空或 80 Linux 系统案例精解 者用“x”代替,如下所示: # vi userlist example01:x:500:500::/tmp/example01:/bin/bash example02:x:501:501::/tmp/example02:/bin/bash example03:x:502:502::/tmp/example03:/bin/bash example04:x:503:503::/tmp/example04:/bin/bash example05:x:504:504::/tmp/example05:/bin/bash example06:x:505:505::/tmp/example06:/bin/bash (2) 执行 newusers(/usr/sbin/newusers)命令,从“userlist”文件中导入用户,如下所示: # newusers < userlist (3) 创建一个名为“password”的文件,在该文件中写入每个新用户的用户名及其对应 的口令,如下所示: # vi password example01:12345 example02:12345 example03:12345 example04:12345 example05:12345 example06:12345 (4) 使用 pwunconv(/usr/sbin/pwunconv)对“/etc/shadow”中的口令进行解密,把解密后 的口令存放于“/etc/passwd”中,并删除“/etc/shadow”中的口令这一栏,如下所示: # pwunconv (5) 使用 chpasswd(/usr/sbin/chpasswd)导入用户的口令到“/etc/passwd 中”,如下所示: # chpasswd < password (6) 使用 pwconv(/usr/sbin/pwconv)将已导入到“/etc/passwd”中的口令加密到“/etc/shadow” 中,并将“/etc/passwd”中的口令位用“x”代替,如下所示: # pwconv 此时可以看到,“/etc/passwd”中的口令已经显示为“x”,而“/etc/shadow”中的口令 已为经过加密后的口令。这样一来,整个批量创建用户的任务就完成了。 81第 4 章 用 户 管 理 3. 通过脚本(使用 useradd、awk、pwunconv、chpasswd 、pwconv 等工具)来实现 (1) 创建一个名为“userlist”的文件,编辑该文件,并在该文件中添加用户名和口令, 对应的格式如下: # vi userlist example01:12345 example02:12345 example03:12345 example04:12345 example05:12345 example06:12345 (2) 创建名为“create_user.sh”的脚本文件,编辑该文件内容,如下所示: # vi create_user.sh #!/bin/bash for t in 'awk -F: '{print $1}' $1' do useradd $t done pwunconv chpasswd < $1 pwconv (3) 添加执行权限。执行该脚本,如下所示: # chmod +x create_user #sh create_user.sh userlist 在这个脚本中,首先是利用了 for 循环,创建“userlist”这个文件中所有的用户,创建的 所有用户口令均为空;然后再利用 pwunconv、chpasswd、pwconv 命令为新用户设置口令。 4. 改进后的批量用户创建和删除脚本 (1) 编写“useradd.sh”脚本,如下所示: #!/bin/bash for i in 'seq 1 50' do case "$1" in add|[aA][dD][dD]) useradd-s/sbin/nologin-d/home/user$i -c"test user"-G root,bin user$i 82 Linux 系统案例精解 echo "123456" |passwd --stdin user$i ;; del|[dD][eE][lL]) userdel -r user$i ;; *) echo $"Usage: $0 {add|del}" exit 1 esac done exit $? (2) 为 useradd.sh 脚本添加执行权限: [root@rhel5 ~]# chmod +x useradd.sh (3) 执行 useradd.sh 脚本以创建用户: [root@rhel5 ~]# sh useradd.sh adD Changing password for user user1. passwd: all authentication tokens updated successfully. Changing password for user user2. passwd: all authentication tokens updated successfully. Changing password for user user3. ……中间部分已省略 Changing password for user user49. passwd: all authentication tokens updated successfully. Changing password for user user50. passwd: all authentication tokens updated successfully. (4) 查看创建结果: [root@rhel5 ~]# cat /etc/group|grep root root:x:0:root,user1,user2,user3,user4,user5,user6,user7,user8,user9,user1 0,user11,user12,user13,user14,user15,user16,user17,user18,user19,user20,user2 1,user22,user23,user24,user25,user26,user27,user28,user29,user30,user31,user3 2,user33,user34,user35,user36,user37,user38,user39,user40,user41,user42,user4 3,user44,user45,user46,user47,user48,user49,user50 bin:x:1:root,bin,daemon,user1,user2,user3,user4,user5,user6,user7,user8,u ser9,user10,user11,user12,user13,user14,user15,user16,user17,user18,user19,us er20,user21,user22,user23,user24,user25,user26,user27,user28,user29,user30,us er31,user32,user33,user34,user35,user36,user37,user38,user39,user40,user41,us er42,user43,user44,user45,user46,user47,user48,user49,user50 83第 4 章 用 户 管 理 daemon:x:2:root,bin,daemon sys:x:3:root,bin,adm adm:x:4:root,adm,daemon disk:x:6:root wheel:x:10:root (5) 删除刚刚创建的用户: [root@rhel5 ~]# sh useradd.sh deL (6) 查看删除结果: [root@rhel5 ~]# cat /etc/group|grep root root:x:0:root bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon sys:x:3:root,bin,adm adm:x:4:root,adm,daemon disk:x:6:root wheel:x:10:root [root@rhel5 ~]# 注意: 此脚本仅限于 RedHat 系统,其他 Linux 操作系统中的 passwd 命令没有-stdin 参数, 因而无法直接从管道中接收口令。
还剩68页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 1 人已下载

下载pdf

pdf贡献者

gedb

贡献于2012-11-24

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf