Linux内核分析+子安全系统selinux+Linux的用户组和用户

一.Linux内核分析/etc/grub.conf文件

1.passwd命令

Linux以安全性和稳定性在世界上自居,在Linux发明之初就在安全领域作了不少手段,其中最简单就是提供了密码的登陆和密码修改的功能,在Linux系统当中不管什么用户都必须具备密码才能登陆Linux操做系统.php

命令格式: passwd [用户名]mysql

命令做用:更新或者设置用户登陆的密码linux

 

 

 

2.黑客攻防:Linux单用户模式破解root密码

缘由在大部分的人安装Linux的时候,不少人没有设置装载引导的密码,因此就致使黑客能够利用这个漏洞来破解超级用户的密码.nginx

单用户模式在Linux当中是用于维护操做系统的一个模式,就至关于windows当中的安全模式,这个单用户模式在没有设置装载密码状况下是能够随意的切换到密码的修改状态当中的,因此这个过程是很是的危险的,破解root密码只有有如下步骤就能够完成:c++

1步:暴力关机(拔掉电源)算法

 

 

2步:从新开机sql

 

 

3步:在系统启动的倒数页面当中回车数据库

 

 

 

4步:出现如下界面的时候apache

 

 

5步:出现如下界面的时候vim

 

 

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

相关文章
相关标签/搜索