一.课前面试题目知识

  1.系统启动流程详细对比说明

    01.centos6系统启动流程 : 采用串行启动方式(服务启动时,按顺序启动),由init进程进行控制

      001.开机加电,BIOS自检,加载硬盘

      002.读取MBR,进行MBR引导

      003.grub引导菜单(boot loader)

      004.加载内核kernel

      005.启动init进程,依据/etc/inittab文件设定运行级别

      006.init进程,执行/etc/rc.d/rc.sysinit(初始化脚本)-初始化系统主机名称  和网卡信息等等

      007.加载内核模块,启动运行级别程序-根据之前读取的运行级别,运行rc0.d-rc6.d中相应的基本程序

      008.读取/etc/rc.d/rc.local,开机自动运行加载文件

      009.启动mingetty进程,进入系统登录界面

      

 

 

    02.centos7系统启动流程 : 采用并行启动方式(服务启动时,一起启动).由systemd进程进行控制

      001.开机加电,BIOS自检,加载硬盘

      002.读取MBR,进行MBR引导

      003.grub引导菜单(boot loader)

      004.加载内核kernel

      005.启动systemd进程,依据 /etc/systemd/system/default.target文件设定运行级别

      006.systemd进程,执行系统初始化文件 /usr/lib/systemd/system/sysinit.target-设置主机名.设置IP地址

      007.加载内核模块,启动运行级别程序-根据之前读取的运行级别

      008.读取/etc/systemd/system,开机自动运行加载文件

      009.启动mingetty进程,进入系统登录界面

      

 

 

  2.如何实现脚本命令自动运行

  3.如何强制修改系统用户密码                                                      

二.用户管理知识说明

  1.用户管理分类说明

    01.用户概念

      UID  user id(用户id)

      GID  group id(用户组id)

    02.用户分类(id用户名称)

      管理员用户(皇帝)  root     UID=0           权利至高无上

      虚拟用户(傀儡)   nobody  UID=1-999(1-499-centos6)  管理进程(无家目录,不能登录系统)

      普通用户(百姓)   oldboy   UID=1000+(500+)      权利有限  

    03.用户与用户组的关系

      一对一关系      一个用户只属于一个用户组

      一对多关系      一个用户可以属于多个用户组

      多对多关系      多个用户可以属于多个用户组

  2.用户权限概念说明

    01.文件管理者信息

      文件所属用户信息(属主)    UID=user id(用户id)

      文件所属的组信息(属组)    GID=group id(用户组id)

      文件所属其他用户(其他)    other user

    02.权限类型

      读取权限(4)    read(r)

        文件:可以阅读查看文件中的内容

        目录:读目录中文件属性信息

      写入权限(2)    write(w)

        文件:可以编辑修改文件中的内容

        目录:可以在目录中添加或删除文件数据信息

      执行权限(1)    execute(x)

        文件:可以执行这个文件(脚本文件)

        目录:可以切换进入到目录中

      没有权限(0)    N/A(-)

    04.权限种类

      ---    0 :没有权限

      --x    1 :执行权限

      -w-    2 :写的权限

      -wx    3 :写和执行权限

      r--    4 :读的权限

      r-x    5 :读和执行权限

      rw-    6 :读和写权限

      rwx    7:读写执行权限

    05.权限修改

      权限修改命令 : chmod

        权限精准修改

          属主用户权限修改

            添加权限信息  chmod  u+r/w/x

            删除权限信息  chmod  u-r/w/x

            设置权限信息  chmod  u=r/w/x

            

          属组用户权限修改 

            添加权限信息  chmod  g+r/w/x

            删除权限信息  chmod  g-r/w/x

            设置权限信息  chmod  g=r/w/x

            

          其他用户权限修改

            添加权限信息  chmod  o+r/w/x

            删除权限信息  chmod  o-r/w/x

            设置权限信息  chmod  o=r/w/x

            

        全体用户权限进行修改

          权限字符修改 

            添加权限信息  chmod  a+r/w/x

            删除权限信息  chmod  a-r/w/x

            设置权限信息  chmod  a=r/w/x

            

          权限数值修改

            chmod  644

            chmod  755

            

    06.权限总结

      文件权限配置结论

        1.root用户对所有文件有绝对的权限,只要有了执行权限,root用户可以无敌存在

        2.对于文件来说,写的权限和执行的权限,都需要读权限的配合(最低需要读权限)

        3.如果想对文件进行操作,必须对文件赋予读的权限

      目录权限配置结论

        1.root用户对目录信息有绝对权限

        2.对于目录来说.写的权限和读的权限.都需要有执行权限配合

        3.如果想贵目录进行操作,必须对目录赋予执行的权限

       目录权限常见问题:

        此时testing/ 目录权限为只读,而testing文件是 755 权限

        

 

 

         分析过程

        

 

         /  inode(5  r-x)  ---- block(tmp)

        /tmp  inode(7  rwt)  ---- block(testing)

        /tmp/testing  inode(4  r--)  ---- block(文件名称)---无法进入目录中,则读取不到目录中文件的inode信息

        /tmp/testing/testing  目录中的文件inode信息无法获取,会显示文件属性信息为???

        总结说明:如果查看目录信息时出现文件属性?????的状态,则说明此时目录只有读权限而没有执行权限,需要添加执行权限

      一个普通文件默认权限 : 644  保证属主用户对文件可以编辑,保证其他用户可以读取文件内容

      一个目录文件默认权限 : 755  保证属主用户对目录进行编辑,保证其他用户可以读取目录中信息且能进入

 

      07.权限计算

        问题: 为什么创建的文件权限是 644 目录权限是 755 

        

        利用umask信息进行计算

        

 

         文件权限计算方法(默认最大权限666)

          umask数值是奇数  666-033 = 633 + 011(+1) =644

          umask数值是偶数  666-022 = 644

        目录权限计算方法(默认最大权限777)

          umask数值是奇数  777-033 = 744

          umask数值是偶数  777 -022 = 755 

        问题:如何永久修改umask信息

          vim /etc/profile

          

           改变上述数值,即可永久修改umask值

           上述判断语句解释说明:

          $UID      ---- 显示当前登录系统用户 id数值

          

 

 

           判断比较符号:

          -gt(greater than)      >

          -lt(less than)          <

          -eq(equal)         =

          -ge(greater equal)       >=

          -le(less equal)        <=

          -ne(not equal)         <>

          显示当前用户信息:

          /usr/bin/id  -gn        ---- 显示当前用户的组名

          /usr/bin/id  -un        ---- 显示当前用户名称

          

 

 

           总结说明:

          

 

 

           if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
               umask 002
              else
             umask 022
            fi

          有上述的判断语句说明情况来看.root用户的id是0  小于 199  &&是与关系,所以条件一不满足.整条条件不满足执行else语句

          所有umask是022  ,而oldboy   id是1000  大于199   满足条件   oldboy的组名和用户民一直, 则执行than语句,所以unmask002

  3.用户相关文件信息(系统中和用户相关的文件)

    01./etc/passwd(重要)       ---- 记录系统用户信息文件

      

 

 

       root  :x  :0  :0  :root  :/root  :/bin/bash

        第一列(root):用户名

        第二列(:x): 用户密码信息(后续版本统一用x填充)

        第三列(:0):用户的UID信息(用户id信息)

        第四列(:0):用户的GID信息(用户zuid信息)

        第五列(:root):用户的注释信息----简单的说明用户的作用

          利用useradd和usermod命令的-c选项添加和修改用户的注释信息,常见的用户注释信息如下:

          mysql(manager database user)

          www(manager web server)

        第六列(:/root):用户的家目录 

          

 

 

           root 用户的家目录是/root  oldboy用户的家目录是/home/oldboy

        第七列(:/bin/bash):shell命令解释器

          

 

 

           /bin/sh=/bin/bash=/usr/bin/sh      ---- 通用的解释器

           /sbin/nologin=/usr/sbin/nologin      ---- 无法登录系统(主要用于添加虚拟用户使用)

 

    02./etc/shadow(了解)       ---- 记录用户密码信息文件

      

    03./etc/group(了解)        ---- 记录用户组的信息文件

      

    04./etc/gshadow(了解)      ---- 记录用户组的密码文件

        

  4.用户相关目录信息

    01.用户家目录的模板

      001 目录特征

        1 目录特征1: 目录下文件为隐藏文件

        2 目录特征2:用户家目录都参照样板房设计,样板房中有什么则普通用户家目录中就有什么

        

        2 目录特征2: 修复被破坏的用户家目录(普通用户命令提示符出现异常时运用)

      002 目录中文件信息

        常规文件信息:

        

           .bash_profile        ---- 别名和环境变量(针对某个用户)   家规
        .bashrc            ---- 别名和环境变量(针对某个用户)   家规
        .bash_logout        ---- 当系统退出登录状态会执行的命令信息

        其他特殊文件信息:

        

 

 

         .bash_history        ---- 历史命令记录文件

         

 

 

          历史命令存放位置:

          保存在内存中  查看方式:history  n (查看倒数n行)

          保存在硬盘中  查看方式:cat /home/oldboy/.bash_history

        .viminfo             ---- vim样式设置

          自动加载文件样式信息
               #!/bin/bash
               # 编写人: oldboy
               # 编写时间: 2019
               # 脚本作用:

    02.企业故障案列说明

      命令提示符出现问题 :  命令提示符: -bash-4.2$
          -bash-4.2$ ll /etc/hosts
          -rw-r--r--. 2 root root 192 Apr 15 12:19 /etc/hosts
          -bash-4.2$ cp /etc/skel/.b* /home/new01/
          -bash-4.2$ exit
          logout
          [root@oldboyedu ~]#
          [root@oldboyedu ~]# su - new01
          Last login: Tue Apr 23 12:23:36 CST 2019 on pts/2 

       当命令提示符出现上述情况时,利用/etc/skel  覆盖用户家目录信息  

  5.用户管理相关命令

    01 用户相关命令

      001 useradd  创建用户命令

        useradd Alex01

        

        useradd Alex02 -M -s /sbin/nologin

          -M    不创建家目录

          -s      指定使用的shell方式

          

            -M 与 -s 同时 一般用于创建虚拟用户   

            -M  不创建家目录,所以找不到Alex02的家目录

            -s  /sbin/nologin 指定用户不登录系统

            满足上述连个条件则创建的用户是虚拟用户

        useradd Alex03 -u 2000

          -u      指定用户UID数值信息

          

        useradd Alex04 -g ALex02/1004(Alex02 UID)

          -g      指定用户所属的主要组信息

          

        useradd Alex05 -G 1004/Alex02

          -G     指定用户所属的附属组信息

          

        useradd mysql -c "manager database user" 

          -c      添加指定用户注释说明信息

          

      002 userdel    删除用户信息

        userdel Alex01

          

 

        userdel -r Alex03 

 

           -r    删除用户及用户家目录信息

          

      003 usermod  修改用户信息

        usermod Alex01 -s /sbin/nologin

          -s    修改用户的登录方式

          

        usermod Alex02 -g Alex01

          -g    修改用户所属的主要组信息

          

        usermod Alex05 -G Alex01

          -G    修改用户所属的附属组信息

          

        usermod mysql -c "Manager DataBase User"

          -c    修改用户的注释信息

          

      004 passwd  用户密码设置 
            交互式设置密码
              passwd oldboy
            非交互设置密码
              echo 123456|passwd --stdin oldboy
      
            企业中设置密码和管理密码的方式
              01. 密码要复杂12位以上字母数字及特殊符号
              02. 保存好密码信息
                    keepass     密码保险柜,本地存储密码
                    lastpass     密码保险柜,在线存储密码
              03. 大企业用户和密码统一管理(相当于活动目录AD)
                  openldap域     用户信息统一保存在一个用户管理服务器中 用户的家目录中的文件 用户密码 用户名称
              04. 动态密码:动态口令,第三方提供自己开发也很简单。

      005 chown  用户属主属组设置命令

        chown oldboy.oldgirl /etc/hosts

          

 

 

         chown  -R Alex01.Alex02  oldboyedu/

          -R     递归修改目录及目录下数据的属主和属组信息

          

    02 用户组相关命令

      groupadd  创建用户组

      groupmod  修改用户组信息

      groupdel   删除用户组信息

    03 用户查询命令

      001   id    显示用户信息命令

        一个用户是否存在

        查询用户的UID  GID

        属于哪个用户组

      002  w     显示正在登陆系统的用户信息

        

 

          USER     TTY      FROM         LOGIN@    IDLE     JCPU    PCPU   WHAT
        root        tty1                           00:08          1:57       0.02s    0.01s    -bash
        root        pts/0     10.0.0.1       20:09          5.00s     2.84s    0.00s     w
        oldboy    pts/1    10.0.0.1       00:10           7.00s     0.01s    0.01s    -bash
        第一列:USER  什么用户登录到了系统中

        第二列:TTY  登录的方式

          pts/n    远程登录系统

          小技巧:echo "请勿修改文件" >/dev/pts/1          root用户执行命令 则在oldboy所在登录界面会有信息显示

          

          ttyn    本地登录系统

        第三列:FROM  从哪里连接到的服务器

        第四列:LOGIN@  登录时间

        第五列:IDLE    空闲时间(未操作界面)

        第六列:JCPU PCPU  用户操作系统消耗的cpu资源时间

        第七列:WHAT    用户在干什么

  6.普通用户获取权限

     01 普通用户如何获取root用户权限

        001 切换用户    直接切换到root账户下管理系统  ---- 篡权夺位   su   su -

          su  /  su  - 有什么区别?

            su  su只是切换了root身份,但shell环境仍然是普通用户的shell

              

 

 

               说明:当用户su命令切换到root身份时,系统中shell环境基本还是原来oldboy用户的shell环境

            su -      su  -  连用户和shell环境一起切换成root身份了

              

 

 

               说明:用户使用su - 切换到root用户时,原oldboy用户shell 环境会切换成root用户shell环境

        002 修改权限    直接修改要做的文件属性权限

        003 用户提权    sudo提权,普通用户可以临时获取root权利  ----sudo 尚方宝剑

          1 进行授权:  visudo=vi /etc/sudoers

            添加命令前先找到命令对应的路径信息.再根据路径信息添加命令 

            93gg  oldboy  ALL=(ALL)       /usr/sbin/useradd, /usr/bin/rm

            

 

             

          2.查看授权信息:  sudo  -l 

            需要切换到被授权的用户下,查看最后一行有没有添加的信息

            

           3.执行命令

            普通用户执行命令时记得亮出尚方宝剑  sudo 

            

          4.扩展配置方法

            1.授权单个命令或多个命令

              

 

 

               对某个用户授权一个或多个命令时,命令之间用逗号空格分开,添加命令时注意使用绝对路径

            2.授权单个命令目录或多个命令目录(需要排除部分特权命令)

              

 

 

               

              需要排除某个特定命令时,此时需将此命令进行取反,方可排除

            3.不需要输入用户密码,可以直接sudo方式执行命令

              

 

 

               

 

 

               

 

 

               在授权命令前面加上NOPASSWD:  信息,则后续调用sudo 执行命令的时候无需输入密码

        004 设置特殊权限位

          rwx-w---x  系统数据的9个权限位,系统中实际应该有12个权限位

            suid(setuid)  s(有x)  S(无x)  4  属主对应的权限位(属主对应的第三位)

              chmod  u+s  file    chmod  4755  file 

            sgid(setgid)  s(有x)  S(无x)  2  属组对应的权限位(属组对应的第三位) 

              chmod  g+s  file    chmod  2755  file

            sticky       t(有x)  T(无x)  1        其他用户对应的权限位

              chmod  o+t  file    chmod  1777  file

            测试环境:

            

 

 

             

 

 

             

          1.suid总结:针对命令和二进制程序  ----将文件属主拥有的能力,分配给其他所有人

            01.属主权限位上有x,则添加suid时是s  属主权限位上无x,则添加suid时是S

            02.suid的作用是让普通用户可以以root(其他)用户角色运行只有root(其他)用户才能运行的程序或命令(或一些本来没有权限操作的文件)

            

 

 

           2.sgid总结:针对属组权限位的   --- 将属组拥有的能力,分配给所有用户组

            对于文件来说.sgid功能如下:

              1.sgid仅对二进制程序有效

              2.二进制命令或程序需要有可执行权限

              3.执行命令的任意用户可以获得该命令程序执行期间属组的权限

            对于目录来说,sgid功能如下:

              1.linux里默认情况所有用户创建文件.默认用户和组都是自身

              2.sgid可已让用户在此目录兮创建的文件和目录具有和此目录相同的属组设置

            

 

 

           3.sticky bit(粘滞位):长用于创建一个共享目录

            作用:可以将不同用户信息放置到共享目录中.实现不同用户数据可以互相查看.但是不可以互相随意修改

            修改方法: chmod  o+t  目录  chmod  1777  目录

            典型的共享目录:/tmp

            

 

 

      总结:普通用户拥有root用户能力 

       01. 直接切换用户  su  - 

         优势:简单快捷

         劣势:风险太高(root权限泛滥)

       02.修改数据文件权限

         优势:可以只针对某个数据文件进行修改,也可以只针对某个用户进行授权

         劣势:需要了解权限位功能,只能对单一文件操作

       03.采用sudo 提权方式

         优势:可以利用文件编辑指定用户有那些指定权限     sa(运维)  dev(开发)

         劣势:配置规划复杂

       04.修改数据文件权限     特殊权限位

         优势:设置权限简单方便

         劣势:设置好的权限所有用户都拥有

      如何防范系统中的重要文件不被修改(root用户也不能修改)

        给文件上锁,使root用户也不能直接修改相应文件

          设置方法: chattr +i /etc/passwd      设置文件不能被删除

                chattr -i /etc/passwd       取消设置文件不能被删除

          查看方法: lsattr /etc/passwd

          

 

           如上信息,为防止重要文件被删除,需给文件上锁.此时文件不能被任何用户删除,包括root用户