第七十五讲——常见系统故障的排除 本文共有28247个字,关键词: 我们首先要确定问题的故障特征 重现故障 实用工具收集进一步的信息 排除不可能的原因 定位故障 先从简单的问题入手 一次尝试一种方式 我们要记住两点: 一是修改配置文件的时候一定要备份源文件!! 二是尽可能的借助于工具,可以是命令,也可以是专门的诊断工具。 可能出现的故障: 管理员密码忘记 系统无法正常启动,可能是grub损坏(MBR损坏,grub配置文件丢失),还可能是系统初始化故障(某文件系统无法正常挂载,例如网络文件系统不在线,驱动不兼容),服务故障,用户无法登陆操作系统(bahs故障)。 命令无法运行:环境变量配置有误 编译过程无法继续:开发环境缺少组件。 MBR损坏时我们可以借助其他主机进行修复,还可以进入紧急救援模式。 boot.iso必须要有主机提供安装环境 使用完整的系统安装光盘 boot:linux rescue进入紧急救援模式,类似于win PE,但是要实现一些功能可能需要切换到真正的根下。 我们先以只读的方式将根文件系统挂载到/mnt/sysimage,如果我们需要对根文件系统中的文件进行操作,则要挂载为读写。 在紧急救援模式下没有设备文件。 #mknod 创建设备文件 说到这里多说一句,一定要了解一个版本控制工具(软件),svn、git su switch user切换用户 sudo CAMMOND切换用户后执行命令,即一个用户以另一个用户的身份执行命令,但是在命令执行的那一刻是以另一个用户的身份运行的,不切换用户。sudo可以实现某个用户能够以另一个用户的身份通过某主机执行某命令。 sudo还提供安全认证方式,在执行命令时需提供密码认证,防范其他人冒充执行相应的命令。 管理员和其他用户的所有命令都可以授权给其他用户执行,但一般来说,sudo命令是由管理员的身份执行一些管理类的命令。 谁可以以另一个身份执行什么样的命令的定义,通常保存在我们系统当中的sudo的配置文件当中。 /etc/sudoers 权限为400 只有root用户和root组中的用户才能查看其中的内容。 我们可以使用vim对/etc/sudoers文件进行编辑,但是我们不建议,因为直接编辑我无法检查其中的语法结构的正确与否,错误的语法会导致其他用户无法执行命令,严重的还会导致系统崩溃。 因此,sudo专门有一个visudo专门用于编辑/etc/sudoers,visudo这个命令本身能够检查/etc/sudoers文件本身的语法。 /etc/sudoers文件每一行为一个条目,定义了谁在哪个主机上执行什么命令(从远程连接到本机执行的命令)。 who which_host=(runas) command 定义别的主机可以远程在本机执行的命令: root ALL=(all) ALL 即管理员可以以任意身份执行任意命令。 为了方便管理sudo,提供别名的机制,类似定义了组,只不过sudo中应为别名。 sudo支持4类别用: 一是用户别名,一次定义一堆这样的用户拥有相同的权限。 #who user_alisa 主机别名,定义一个主机组,可以在一堆主机上执行。 #whitch_host host_alisa runas,表示以哪个用户的身份执行。 runas_alias 执行的命令:command cmmd_alias 别人定义遵循EBNF语法结构,EBNF是一种描述性的语言,这种描述性,这种描述性语言可以定义一个宏,它的取值可以是什么样的取值。 无论是哪一种别名,我们在定义别名的时候,别名的名字全部都需要使用大写英文字母的组合。 用户别名,一般来说可以包括当前系统上的用户。 user_alias(关键字) 除了可以定义用户,还可以定义组,在定义组的时候只需在组名前加百分号‘%’, %组名 用户别名中还可以包含已经定义好的用户别名,也就是别名可以嵌套。 主机别名:可以加‘!’进行取反 主机名 IP地址 网络地址 掩码可以是255.255.255.0或者24,数字。 其他的主机别名(嵌套)。 runas 别名,以那些用户的身份来执行命令。 可以是用户名 也可以是#uid %grup 其他的runas别名。 command别名 命令最后使用绝对路径 cmnd_alias 命令路径 目录(目录下的所有命令) 其他已定义的命令别名。 我们在执行sudo后的五分钟之内,不需要再次使用密码确认,所以其默认的时间为5分钟。 sudo –k(小写) 下一次使用sudo会重新要求输入密码,即sudo只生效一次。 sudo –l 列出当前用户所有可以使用的sudo类的命令。 -k 使认证信息仅当前有效。 作为管理员,我们也可以定义执行sudo命令,不需要输入密码确认,在命令前加上标签TAG: TAG: 使用冒号隔开 标签中最为著名的为NOPASSWD,标签之后的所有命令的执行都不需要再输入密码确认,如果某个命令需要定义密码,将命令拿出来使用passwd定义标签,PASSWD:COMMAND 如果我们有很多的命令,则完全可以进行别名的定义,将需要密码和不需要密码的命令进行区分,我们需要注意的是,PASSWD等标签不能再写入其中。 在命令前加‘!’感叹号,表示不执行此命令,取反的优先级最高。 我们要知道passwd命令很强大,如果passwd是以root身份运行,是可以修改root密码的,因此要将/usr/bin/passwd排除在外。 !/usr/bin/passwd 感叹号为不允许执行,取反的优先级是最高的。 sudo /usr/bin/passwd 不跟参数时默认为修改管理员的密码,sudo是以root的身份运行的,简单的取反是不能够完全阻止root密码的修改,因此/usr/bin/passwd后面必须要跟一个字符,格式如下: /usr/bin/passwd [A-Za-z]*,!/usr/bin/passwdroot 即允许/usr/bin/passwd的执行,但是必须要有参数,且参数不能为root 任何用户使用sudo命令操作都会记录到日志当中。 「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」 赞赏 × 几人行 (๑>ڡ<)☆谢谢老板~ 2元 5元 10元 50元 100元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 给自己讲linux 2017-02-13 评论 2349 次浏览