一.Linux内核分析/etc/grub.conf文件
1.passwd命令
Linux以安全性和稳定性在世界上自居,在Linux发明之初就在安全领域做了很多手段,其中最简单就是提供了密码的登录和密码修改的功能,在Linux系统当中无论什么用户都必须具有密码才能登录Linux操作系统.
命令格式: passwd [用户名]
命令作用:更新或者设置用户登录的密码
2.黑客攻防:Linux单用户模式破解root密码
原因在大部分的人安装Linux的时候,很多人没有设置装载引导的密码,所以就导致黑客可以利用这个漏洞来破解超级用户的密码.
单用户模式在Linux当中是用于维护操作系统的一个模式,就相当于windows当中的安全模式,这个单用户模式在没有设置装载密码情况下是可以随意的切换到密码的修改状态当中的,所以这个过程是非常的危险的,破解root密码只有有以下步骤就可以完成:
第1步:暴力关机(拔掉电源)
第2步:重新开机
第3步:在系统启动的倒数页面当中回车
第4步:出现以下界面的时候
第5步:出现以下界面的时候
第6步:在以下界面当中输入1 fastboot切换到单用户模式的登录选择界面
回车即可
第7步:在以下界面中输入b,切换到命令界面当中
切换成功后,会出现单用户模式的命令界面如下:
第8步:使用passwd命令破解root的密码,出现update successfully就证明破解成功
破解成功后,马上重启linux操作系统
重启成功就可以使用单用户模式中修改root密码重新成功登录linux操作系统了,这个就是黑客破解root密码的一般手段,这个手段的危害显而易见,因此我们需要屏蔽这个黑客的攻击,我们应该怎么做呢?如果希望屏蔽这个攻击,那么我们就需要修改/etc目录下的grub.conf文件来设置Linux启动装载密码.
3.用户装载密码文件(/etc/grub.conf)
在Linux当中Linux只要一启动那么首先就会去需找grub.conf文件,用来启动Linux时加载相关的启动配置,其中包括倒数启动,包括标题,包括用户装载密码等等,所以在安全领域当中我们安装一台Linux的服务器就应该为grub.conf文件设置一个装载密码.
使用vim打开/etc/grub.conf文件,内容如下:
第10行:代表当前操作系统的id,默认为0
第11行:timeout就是系统启动时倒数时间,默认的情况下,系统启动需要5秒钟
第12行:Linux图形操作界面的相关素材和背景素材的文件
第13行:隐藏式菜单设置,一般我们很少会使用
第14行:设置启动Linux操作系统时候的相关欢迎信息,一般也很少会修改
第15-17行:Linux相关的配置信息,一般我们不做源码研究无需理会
但是这文件默认的情况下少一个非常重要的选项是password选项,password用于设置单用户模式的装载引导密码,只有知道这个密码才能切换到单用户模式,所以我们需要加入当前这个选项
4.grub-md5-crypt命令
命令格式:grub-md5-crypt
命令作用:用于生成linux的装载引导密码的Md5加密形式
执行效果如下:
获取了123456的装载密码后,我们一般需要复制当前密码来使用
5.为/etc/grub.conf文件设置装载密码详细步骤:
第1步:打开/etc/grub.conf文件,在hiddenmeun和title之间插入一个空行,按下vim中的小写o
第2步:在新起的行中插入以下内容,就可以设置了装载密码
保存并退出(:x)
第3步:重启Linux操作系统,使用reboot命令
第4步:出现以下界面时,提示如下:
第5步:输入装载密码
第6步:如果能够成功切换到单用户模式的编辑界面,那么就证明密码设置成功
二.选择登录界面文件之/etc/inittab文件
其实在linux存在多种操作界面,常见的有图形操作界面也有字符操作界面(黑窗口),这么的操作界面像阿里云默认一般会给字符操作界面给你管理,这时就会有一个这样的问题了,阿里云的Linux为什么在启动的时候会选择字符操作而不是图形界面,而我们的虚拟机在启动的时候选择是图形操作界面而不是字符操作界面呢?
原因是Linux其实有一个核心的文件叫inittab文件,这个文件是用于linux启动的时候选择用户的登录操作界面的文件,该文件位于/etc目录下,使用vim打开inittab文件
内容如下:
第18行: 代表Linux关机模式,代号为0,如果把linux设置成为该模式,那么linux将无法启动,因为一启动就关机,所以我们不能设置该模式.
第19行:代表Linux单用户模式,代号为1,如果设置为该模式,Linux一启动就会进入单用户模式,一般用于系统维护比较多,但这个选项一般是运维人员会使用,但是php开发者使用的几率比较低.
第20行:多用户的字符操作界面,代号为2,但这个模式没有NFS的网络配置,因此该模式不能够连接互联网,所以一般人很少使用这个模式,这个是一个历史遗留的问题,因为以前没有今天的互联网时代,所以在20年前才会有人使用
第21行:功能齐全的多用户多任务的字符操作界面,一般真实的服务器(如:阿里云)就会使用这个模式,这个模式代码为3,开发中我们使用这个模式占据了99%的可能性
第22行:自定义的Linux模式,一般使用C语言或者C++语言开发Linux内核人员都会使用该模式,该模式的代号为4,这个模式除非你具备非常强悍的Linux源码技术,否则很难使用,一般php开发者尽量不要接触.
第23行:Linux图形操作界面模式,其代号为5,一般在我们学习和使用虚拟机的时候这个模式使用得非常广泛,在公司的内部服务器当中很多运维人员为了方便也会设置该模式,在现实开发当中,这个模式使用的几率也很高.
第24行:Linux重启模式,这个模式一旦设置,Linux开机就会重启,所以不能设置这个模式,否则Linux同样无法启动,其代号为6
第26行:代表当前操作系统的设置模式为5,也就是图形操作界面模式,因此Linux启动的时候就会使用图形操作界面进行用户的登录,而阿里云设置该模式为3所以启动的时候就会以齐全功能的字符操作界面模式让你管理阿里云服务器.
从以上文件分析可知,Linux一共存在7中模式,我们作为php开发者只需要使用3和5这两种模式就够了,然而0和6现今的互联社会是没有人使用的,但为什么又会存在0和6这两种模式呢?0和6其实最早是在军事当中使用,今题使用0和6的应用只有单片机和电子产业,互联网是不会使用的.
如果我们希望把虚拟机设置为黑窗口(字符操作)的登录界面,我们应该怎么做呢?
修改/etc/inittab文件,如下:
保存并退出(:x),然后重启linux操作系统,设置成功就会出现以下界面:
如果登录成功后,会出现以下界面,默认的情况下字符操作界面会让用户处于宿主目录的位置当中:
并且字符界面太支持中文的显示,因为Linux默认的情况下建议使用英文字符
三.Linux子安全系统selinux
1.selinux的百度简介
这个系统非常的安全,也非常的杰出,使得今天航天航空科技可以使用Linux操作系统,但是对于php开发者来说,就是一种悲哀,因为selinux安全过头了,它会阻碍用户连接mysql数据库和阻碍用户连接sphinx全文索引等软件,因为如果你希望把linux运用在php开发当中,那么我们就需要关闭selinux的子安全系统,其配置配置位于/etc/selinux目录当中,使用vim打开/etc/selinux/conf文件
内容如下所示:
这时如果你有阿里云服务器,你可以看看阿里云服务器默认是关闭还是开启的,默认是关闭的
因此我们也可以学习阿里云服务器一样,关闭虚拟机中的selinux,/etc/selinux/conf内容修改如下:
保存退出(:x),如果修改了selinux你不重启linux操作系统是不会生效的,因此记住,修改完成必须马上重启linux,只要关闭子安全系统,你后面的lamp配置工作就能够顺利完成.
2.虚拟机的快照技术
①什么是虚拟机的快照,其原理图如下所示:
②在vmware虚拟机中进行快照步骤如下:
第1步:假设我们对当前的状态非常满意,那么我们就可以对Linux当前状态进行拍摄
第2步:对快照进行一个详细的描述便于日后的参考
如果拍摄快照成功,那么在快照管理当中就会出现当前的快照状态,如下图所示:
第3步:假设你当前继续工作,生成了一个bad.txt的文件在桌面当中而这个操作假设你不台满意或者是开发当中做错的某些配置工作,那么我们就可以使用快照进行状态转回工作,步骤如下:
然后在以下界面选择确定:
点击后就会返回到一个你快照满意的状态
四.Linux的用户组和用户
Linux是一个多任务多用户的操作系统,在Linux当中使用组文件和用户文件对用户进行管理,很多软件的安装都必须要有对应的用户和用户组,否则软件无法启动,例如:mysql和nginx,apache等软件.
1.用户和用户组的原理图
2.用户组和用户的文件
①组文件的组成:
① /etc/group (用户的组文件,非常重要)
②/etc/gshadown(用户的组密码文件,被弃用了,了解即可,一般不会使用)
②用户文件的组成:
①/etc/passwd文件(这个文件不是用来存储用户密码而拿来存储用户的信息)
②/etc/shadow文件(这个文件是用户的密码文件)
3./etc/group文件详解
使用vim打开/etc/group文件
内容如下所示:
以:进行分隔可以把一行内容分成4个列
第1列:表示组名称
第2列:表示组密码(x是一个占位符,真正的密码存放在/etc/gshadow文件当中,但已经被弃用了)
第3列:表示组的id
组id为0-499是系统安装时定义的默认组,其中0代表超级管理员组,组名称一定是root
组id为500-500以后这个些组有可能是软件安装时定义的组,也有可能是你自己定义的组id,所以我们统称500到500以上id的组为自定义的用户组
第4列:表示组内的用户(但这个选项很少被关注)
4./etc/gshadow文件(用密码文件,了解)
使用vim打开/etc/gshadow文件
以:进行分隔,一共可以分为4列
第1列 :组名称
第2列:一般表示为组密码,但是因为被弃用了,所以不会存放组密码了
第3列:一般表示为组的权限,因为被弃用了,所以也为空了
第4列:表示组的管理员,这个选项一般被c和c++的开发者所关于,但php开发者了解即可
5.用户组的管理命令
在Linux当中我们可以通过命令对用户组进行管理,主要可以管理用户组的增删查该功能
①groupadd命令
命令格式:groupadd [-选项][组名称]
命令作用:添加用户组,一般使用该命令添加的用户组大于500
例子1:添加一个名为itcast的用户组,执行命令如下:groupadd itcast
查看/etc/group文件内容如下:
例子2:添加一个名为itheima,组id为600的组
在groupadd当中加入-g选项,-g选项的作用就用户组的id,执行命令如下:
groupadd -g 600 itheima
查看/etc/group文件内容如下:
如果我们要查看我们所添加的组信息,每一次用vim打开是不是非常的麻烦啊?
②grep命令
命令格式: grep [搜索关键字][文件或者目录]
命令作用:搜索和定位内容中关键字,可以结合其他的命令一起使用,也可以单独使用
例子1:在/etc/group文件当中搜索组id为600的信息,命令如下:
grep 600 /etc/group
例子2:在/etc/group文件当中搜索组名为itcast的信息,命令如下:
grep itcast /etc/group
③groupmod命令
命令格式:groupmod [-选项][修改的内容][旧的组名称]
命令作用:更新一个组的信息
例子1:修改itheima的组名称为heima
选项-n,是修改组的名称,执行代码如下:
groupmod -n heima itheima
可以使用grep搜索id为600的组信息如下:
例子2:修改heima的组id为601
选项-g,是修改组的id,执行代码如下:
groupmod -g 601 heima
可以使用grep搜索祖名为heima的组信息如下:
③groupdel命令
命令格式:groupdel [组名称]
命令作用:删除一个用户组
例子:删除祖名为heima的组信息,执行命令如下:
groupdel heima
使用grep命令查找组id为601的组信息
没有返回任何组信息就代表组不存在,删除成功
CentOS6.5和CentOS6.8或者CentOS7.0当中有一些运维人员他们会使用一种监测工具叫zippitias工具,该工具安装完成后,groupdel会被这个删除掉这个命令,因为这个监测认为groupdel是一个危险操作,所以会把这个命令删除,会使用zippitias_grp_del命令来代替groupdel命令
6.用户文件/etc/passwd详解
使用vim打开/etc/passwd文件
内容如下图所示:
以:进行分隔,一共有7列
第1列:表示用用户名
第2列:表示用户密码(x占位符表示密码,真实密码存放在/etc/shadow文件中)
第3列:表示用户的id,0表示超级管理员
第4列:表示用户所在的组的id
第5列:表示用户的备注信息,一般跟用户名一样,但也可以不一样,一般最好不要修改
第6列:用户的宿主目录
第7列:表示一个用户是否具备了登录linux操作系统的资格
如果是/bin/bash表示该用户可以登录linux操作系统
如果是/sbin/nologin表示该用户不能登录linux操作系统
7.用户密码文件/etc/shadow详解
在linux当中用户必须具有密码才能登录操作系统,所以密码文件我们只需要记住两个重要的列就可以了,使用vim打开/etc/shadow文件,内容如下
以:进行分隔,我们只需记住第1和第2列即可
第1列:表示用户名
第2列:表示用户的密码(密码的算法是linux特有的散列md5算法,这个算法一般用于军事领域,一般人很难破解)
如果在密码列当中出现!!表示用户没有密码,并且无法登录操作系统
8.用户的管理命令
①id命令
命令格式:id [用户名]
命令作用:显示用户的基本信息
例子:显示zhangsan的基本信息,执行命令如下:
id zhangsan
以上命令在现实开发当中使用的几率基本是100%
②groups命令
命令格式:groups [用户名]
命令作用:以用户:组的键值对形式展示用户的信息
例子:使用groups展现zhangsan的键值对信息
以上命令是红帽子认证工程师必考的命令,所以很多运维就会问一些这个命令的使用方法
③useradd命令
命令格式:useradd[-选项][用户名称]
命令作用:添加一个linux用户
例子1:添加一个用户名为wangwu的用户,执行命令如下:
useradd wangwu
使用id或者groups命令查看wangwu的用户信息,如下
在默认的情况下使用useradd命令,创建一个用户的同时会创建一个与用户名相关的组,所以由此可以看出每个在linux当中用户必须归属一个用户组,因此删除用户组可能会导致用户出现一些未知bug,所以删除组是一个危险的操作
例子2:添加一个用户名为jimmy的用户,把该用户放在itcast的组当中
使用-g选项,该选项用于添加用户时指定用户所在的组,执行命令如下:
useradd -g itcast jimmy
使用id或者groups命令查看jimmy的用户信息,如下
使用grep命令查看/etc/passwd文件中jimmy的信息
注意事项:添加了一个用户,那么这个用户在默认的情况无法登录操作系统,如果希望用户添加后可以登录linux操作系统,就必须给用户添加一个用户的登录密码
③usermod命令
命令格式:usermod[-选项][用户名称]
命令作用:修改用户的相关信息
例子:把用户wangwu的修改为lisi,使用选项-l,该选项用于修改用户的名称
执行命令如下所示:
usermod -l lisi wangwu
使用id查询wangwu和lisi的相关信息如下所示
注意:修改了wangwu为lisi之后,id查询wangwu无法返回用户信息,使用id查询lisi,发觉lisi会在wangwu这个用户组当中
④userdel命令
命令格式:userdel[-选项][用户名称]
命令作用:删除用户的相关信息
例子1:把lisi这个用户删除,执行命令:userdel lisi
删除后用id查询lisi的确删除成功
注意,删除用户如果不加任何选项,不会删除用户的宿主目录
例子2:把jimmy这个用户删除,同时删除jimmy的宿主目录
使用-r选项,该选项用于删除用户时删除用户的宿主目录,执行命令如下:
userdel -r jimmy
注意:删除一个用户同时删除用户的宿主目录其实与目录名称无关。
既然使用-r可以删除jimmy的目录,那么我们在添加的用户的时候是不是一定要使用与用户名一样的宿主目录呢?
扩展例子:添加一个名为tommy的用户,其实宿主目录为php25
这时如果希望完成以上的例子,我们需要在useradd命令中加入-d选项,执行命令如下:
useradd -d /home/php25 tommy
如果切换用户tommy并且使用cd ~,结果如下所示:
⑤chfn命令
命令格式:chfn [用户名]
命令作用:编辑用户的详细备注信息,一般配置finger命令一起使用
例子:为zhangsan这个用户添加详细的备注信息
使用finger命令查看用户的相关备注详细信息,使用命令格式如下:
finger [用户名]
例子:查看zhangsan的详细备注信息,执行命令: finger zhangsan
注意:在现实中多使用chfn命令,并且安装finger命令配合使用
9.禁止用户登录linux操作系统
1.禁止单个用户登录操作系统
例子:禁止罗鸿登录linux操作系统,步骤如下:
第1步:使用vim打开/etc/passwd文件,然后使用末行模式搜索/luohong
第2步:找到luohong所在是行,然后修改其登录操作系统的权限为/sbin/nologin
保存并退出(:x)
第3步:注销退出后无法登录操作系统,发觉用户无论如何都不能登录操作系统了,我们把这种成为冻结单个用户登录
第4步:如果希望对某一个用户进行解冻操作那么就可以把/etc/passwd的第7列修改为/bin/bash
2.禁止所有普通用户登录操作系统
问题:如果在一个公司里面,有一个运维总监管理着100个运维人员,他们用户名分为为user1-user100,那么这时如果系统需要进行维护,总监要求除了root用户以外所有的普通用户都不能进入linux操作系统,直到维护完成之后才可以进入,这时我们其实需要对user1-user100逐个进行冻结和解冻吗?我们如果你真的一个个去冻结和解冻是没有效率,因此遇到以上场景,我们需要禁止所有普通用户登录,步骤如下:
第1步:使用root登录linux操作系统,并且切换到/etc目录下,如下图所示:
第2步:使用touch命令,创建一个名为nologin的文件
完成以上的操作,那么就禁止了所有的普通用户(除root以外)登录操作系统,如果这时普通用户想登录操作系统,就会出现以下界面:
第3步:使用root登录linux操作系统,发觉root登录正常
第4步:如果维护完成,希望解冻所有的普通用户,那么我们只需要删除/etc/nologin文件,这时问题来了:如何删除一个文件呢?使用rm命令删除,y代表yes
第5步:删除成功后,所有的普通用户就解冻成功了,都可以重新登录操作系统
10.管理文件和目录的命令
①rm命令
命令格式:rm [-选项][目录或者文件的详细位置]
命令作用:删除文件或者目录
在默认的情况下使用rm命令删除一个文件会提示是否确认删除?如果回答y就是确定删除,如果回答n就不需要 删除。如果希望删除的时候不提示任何的错误,那么我们需要加相关的选项:
-f (force)选项,这个选项代表强制删除,不会提示的错误,并且一定会删除成功
例子1:删除1.php,不加上-f选项
回答y删除了1.php
例子2:删除2.php和3.php,不加上-f选项,删除2.php回答n,删除3.php回答y
发觉2.php没有被删除
例子2:删除整个test目录包括其子目录和子文件
方法1:切换到test目录当中使用rm -rf *
-r 选项:表示递归删除目录中所有的子文件和子目录
* : 代表删除当前目录下所有的文件和目录
这时你会发觉test目录本身没有被删除,也就说该命令只会删除当前目录中的子目录和子文件但不会删除当前目录
方法2:删除整个test目录,使用 rm -rf ~/桌面/test
这时会发觉test目录和其子目录和子文件都被删除干净了
例子3:删除test目录的所有子文件,但不删除其子目录
只需要删除当前目录中的子文件,可以切换test中删除比你且去掉-r选项,执行命令如下:
rm -f *
注意:如果当前在根目录当中,使用rm -rf *那么就会删除根目录中所有文件和目录,这时linux就直接崩溃了,同样如果你使用rm -rf / 那么同样产生相同的灾难,在linux当中rm命令删除是无法恢复。因为Linux的删除是叫做粉碎性删除,删除的时候会删除文件的节点。linux当rm -rf * 或者 rm -rf /要谨慎使用
如果希望查看文件节点,可以使用ls -i来看出,执行命令如下:
②cp命令
命令格式:cp [-选项][源文件或目录][目标位置]
命令作用:复制文件或者目录
例子1:复制test目录中1.php到test_sub1目录中
执行命令: cp ./1.php ./test_sub1,结果如下:
例子2:复制test_sub2目录复制到test_sub1当中,使用选项-r
-r选项:递归复制目录和子文件
执行命令: cp -r ./test_sub2 ./test_sub1
例子3:复制1.php目录复制到test_sub1当中,但不进行改名操作
执行命令如下: cp ./1.php ./test_sub1
例子4:复制1.php目录复制到test_sub1当中,但进行改名操作
执行命令: cp ./1.php ./test_sub1/111.php
③mv命令(move)
命令格式:mv [-选项][源文件或目录][目标位置]
命令作用:移动文件或者目录
例子1:剪切1.do到test_sub1当中
执行命令: mv ./1.do ./test_sub1
例子2:剪切test_sub3目录到test_sub1当中,剪切时包括test_sub3当中所有子文件和子目录
执行命令: mv ./test_sub3 ./test_sub1
例子3:修改1.jsp为jsp.php
执行命令: mv ./1.jsp ./jsp.php