用户及权限管理

 今天是学习马哥教育第四天,也是第一个博客作业,写一篇关于用户及权限管理的简介型的博客文章,作文水品有限,所以写出来有可能有病句或者意境有问题,请大家多多包涵。

 首先,用户及权限管理,需要从2方面入手来说,首先来说用户管理。

 何谓用户,这是马哥一上来就提到的问题,我简单的理解,用户其实就是一个人机交互的接口,人机交互的接口是shell ,但是登录shell的时候都需要有用户名和密码登录,否则系统是不会允许用户登录的,这一点和windows 不太一样,在windows中,是允许空密码登录的,这一点Linux 比 Windows 安全,Linux 是不允许空密码登录的。那么我们怎样去理解用户这个概念呢,在人的角度上来说,我们每一个人都是一个用户,我们去银行办卡,那个账户其实就是用户,人类识别用户很简单,就是用户名,也就是字符串来识别,我们每个人的银行账户都是唯一的,都只代表了你一个人,不能代表其他人,当然,你可以办很多的卡,但是每一个账户都是唯一的。对于计算机来说,它识别的最简单的就是二进制,所以说,计算机识别的用户是用户的ID号,我们叫做UID,那么当我们登录账号和密码的时候,在计算机中这个过程是怎样的呢?首先当我们输入完账号和密码之后,计算机会先找到/etc/passwd 其实这个文件就是一个简单的数据库文件,请看下面截图:

 

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

        bin:x:1:1:bin:/bin:/sbin/nologin

        daemon:x:2:2:daemon:/sbin:/sbin/nologin

        adm:x:3:4:adm:/var/adm:/sbin/nologin

        lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

        sync:x:5:0:sync:/sbin:/bin/sync

        shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

        halt:x:7:0:halt:/sbin:/sbin/halt

        mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

        operator:x:11:0:operator:/root:/sbin/nologin

        games:x:12:100:games:/usr/games:/sbin/nologin

        ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

        nobody:x:99:99:Nobody:/:/sbin/nologin

        avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin

        systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin

        systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin

        dbus:x:81:81:System message bus:/:/sbin/nologin

        polkitd:x:997:995:User for polkitd:/:/sbin/nologin

        tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

        postfix:x:89:89::/var/spool/postfix:/sbin/nologin

        sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

        test:x:1000:1000::/home/test:/bin/bash

(图1)

 这个文件中的每一行可以看成是一条记录,每一列其实使用:分割开了,就像是一个数据库的二维表一样,可以通过类似的查询语句找到我们登录的用户名是否存在,如果不存在,系统会报出这样一个错误:blob.png,意思是登录不正确。

 然后我们再看密码验证机制,其实密码验证机制还需要进一步的展开说明。

 提到密码,我们先来看一下密码使用策略原则,必须满足以下几点

  1、使用随机密码

  2、最短长度不要低于8位

  3、应该使用大写字母、小写字母、数字和标点符号4类字符中最少3类做为密码

  4、密码需要定期更换

 然后我们来讲一下加密算法,打个比方来说,如果在计算机上设置好密码之后,就把密码明文存放在计算机的文件中或者是数据库中的话,这样是非常不安全的,因为如果其他的用户登录系统,如果具有高级管理员权限的话,就会造成密码泄露,所以我们需要使用加密算法来加密保存用户设置的密码。现在的加密算法主要分为以下3类

 1、对称加密 加密和解密使用同一个密码,速度快,但是不安全

 2、非对称加密 加密和解密使用一对密钥,密钥分公钥和私钥,这样比较安全,但是速度太慢,非对称加密所用的时间是对称加密的3个数量级

 3、单向加密 只能加密不能解密,提取数据指纹(特征码) 

   单向加密的特点是定长输出,什么是定长输出呢,就是说8位的密码。20位的密码,都会被当作加密内容定长加密,密文的长度都是一样的

   单向加密的特点还有就是雪崩效应或者说是蝴蝶效应,也就是说,你更改了密码或者是文件当中的一小部分内容,那么密文的结果将会是翻天覆地的变化

   linux 主要用到的单向加密分以下6种 

                        1、md5 message digest 5是版本号,是128位定长

                   2、sha secure hash algorithm 安全的哈希加密算法 160位定长

                    3、sha224

                    4、sha256

                        5、sha384

                        6、sha512

   不论是用哪一种加密算法加密出的密文,在加密之前都需要加上随机数(salt)之后再加密,这是因为如果用户能打开/etc/shadow 看到和自己一样的密文,就能猜出其他用户的密码

   这里我们提到了用户的密码存放位置 /etc/shadow 这个文件,其实用户登录的时候内核在验证完/etc/passwd 之后,如果用户名存在,那么就需要把你刚刚输入的用户名提取出来,到/etc/shadow 这个文件中去比对,请看下面的截图:

   

        root:$6$r2KRPIf/llqwEcCt$jW8yjiWYaEKqMEGuWctlOeqrM9yb6bSSBU57wcwWcpeMTbJNBrPExBYXFi1fkCWkU8pdOfuh51m/SuP5VFQ4r/::0:99999:7:::

        bin:*:16659:0:99999:7:::

        daemon:*:16659:0:99999:7:::

        adm:*:16659:0:99999:7:::

        lp:*:16659:0:99999:7:::

        sync:*:16659:0:99999:7:::

        shutdown:*:16659:0:99999:7:::

        halt:*:16659:0:99999:7:::

        mail:*:16659:0:99999:7:::

        operator:*:16659:0:99999:7:::

        games:*:16659:0:99999:7:::

        ftp:*:16659:0:99999:7:::

        nobody:*:16659:0:99999:7:::

        avahi-autoipd:!!:17036::::::

        systemd-bus-proxy:!!:17036::::::

        systemd-network:!!:17036::::::

        dbus:!!:17036::::::

        polkitd:!!:17036::::::

        tss:!!:17036::::::

        postfix:!!:17036::::::

        sshd:!!:17036::::::

        test:$6$EgCCFvGO$.DVY878bWmEQdd/arosOmsFy/N1sPHLJ9ALGNxS4.ZLmlQ5bOPgexwEWsz/heVw6BseQJsxNh4oMdNrVu3.p/0:17041:0:99999:7:::

(图2)

  从这个文件中先查找出用户名所对应的密码。然后找到这个密码的随机数(salt)然后把随机数和你刚刚输入的密码添加到一起做单项加密,把加密后的结果和这个文件中所对应的记录的密码做比对,如果正确,那么就允许用户登录,如果错误,就报错

  说了这么多,其实就是解释了一个用户登录shell或者说使用linux系统的一个简单的过程而已,下面来讲一下linux是怎样对用户进行管理的。

  首先,我们明白一个道理 就是linux系统的用户管理有这样一个映射关系

      用户——–用户组(角色)———-权限

         多对多         多对多

 我们每一个用户都是一个独立的个体,所以我们每一个用户都有自己独立的权限,但是有时候有这样或者那样的需求,比如说我们想让tom和jerry具有相同的访问某一个目录的权限,如果不使用用户组(角色)的话,我们需要分别给tom 设置好权限,在给jerry设置好权限,但是如果有用户组的概念的话,我们可以让tom 和jerry所属为同一个用户组,我们给这个用户组某种权限,这样tom和jerry就具有了相同的权限,这样就可以方便的去访问相应的目录了,所以说,用户组(角色)的作用就是方便我们管理不同用户的相同的权限。

 我们来单独看用户的管理,linux中把用户分为管理员用户和普通用户,普通用户又可以分为系统用户和登录用户,用一个图这样表示:

  •  管理员用户 root UID 0

   普通用户 UID 1-60000

      系统用户 非登录用户 对于CentOS7 1-999 CentOS6 1-499

       登录用户 CentOS7 1000-60000 CentOS6 500-60000

 然后我们来说用户组,用户组我们可以理解成程序的角色,也就是用户的容器,用户组如果从静态的角度来分,和上面的用户分类是一样的

 组类别划分1 

   管理员用户组 root UID 0 

   普通用户组 UID 1-60000

      系统用户组 非登录用户 对于CentOS7 1-999 CentOS6 1-499

       登录用户组 CentOS7 1000-60000 CentOS6 500-60000

 组类别划分2

   用户的主组,基本组

   用户的附加组

 组类别划分3

   用户的私有组 组名同用户名且包含一个用户

   用户的公共组 组内可以包含多个用户

 说完上述2个概念之后,我们来详细说明/etc/passwd 中的内容,我们可以使用man 5 passwd 命令来查询passwd中的详细信息

 

     /etc/passwd:用户的信息库文件(图1)

     name:password:UID:GID:GECOS:directory:shell

     UID:用户ID

     GID:用户所属的主组的ID号

     GECOS:用户的注释信息

     directory:用户的家目录

     shell:用户的默认shell

      /etc/shadow:用户密码文件(图2)

      用户名:加密的密码:最近一次修改密码的时间:密码的最短使用期限:密码的最长使用期限:密码警告期限:账户过期期限:保留字段

      用一幅图来描述一下各个期限的范围

      blob.png

    /etc/group 组信息库 

    group_name:password:GID:user_list

    user_list 改组的用户成员:以此组为附加组的用户列表

 下面具体的讲解Linux用户和组管理的各种命令

 1、groupadd命令 创建组命令

   groupadd [选项] group

   有2个选项,一个是

   -g GID 手动指定GID 默认如果不指定的话,是上一个组的GID号加1

   -r 创建系统组

   介绍一下安全上下文的概念,任何一个进程,都要以发起者的身份运行

   比如说,进程访问文件时,对文件的访问权限,取决于发起此进程的用户的权限。

   例如:cat /etc/shadow 如果以管理员的身份运行这个命令的时候,那么访问这个文件的权限就要以管理员的身份进行访问,也就是先要查询这个文件的属主 属组 和其他权限是什么,如果说这个文件的属主和发起进程,(运行命令)的用户一样,那么就执行属主的权限,如果没有,那么就要看文件的属组中有没有进程发起者这个用户,如果有,就执行属组权限,否则最后就执行其他权限。

  至于说系统用户,就是为了能够让那些后台进程或服务类进程以非管理员的身份运行,通常需要为此任务创建多个普通用户,这类用户不用登陆系统,这类用户就叫做系统用户。

 2、删除组命令 groupdel 命令

   groupdel [选项] GROUP

 3、修改组属性命令 groupmod 命令

   groupmod [选项] GROUP

   -g GID :修改GID 原组名

   -n new_name 原组名 

 4、useradd命令:创建用户

   useradd [选项] 登录名

-u, –uid UID:指定UID;

-g, –gid GROUP:指定基本组ID,此组得事先存在;

-G, –groups GROUP1[,GROUP2,…[,GROUPN]]]:指明用户所属的附加组,多个组之间用逗号分隔;

-c, –comment COMMENT:指明注释信息;

-d, –home HOME_DIR:以指定的路径为用户的家目录;通过复制/etc/skel此目录并重命名实现;指定的家目录路径如果事先存在,则不会为用户复制环境配置文件;

-s, –shell SHELL:指定用户的默认shell,可用的所有shell列表存储在/etc/shells文件中;

-r, –system:创建系统用户;

   注意:创建用户时的诸多默认设定配置文件为/etc/login.defs

   useradd -D:显示创建用户的默认配置;

   useradd -D 选项: 修改默认选项的值;

   修改的结果保存于/etc/default/useradd文件中;

 5、usermod命令:修改用户属性

   usermod [选项] 登录

-u, –uid UID:修改用户的ID为此处指定的新UID;

-g, –gid GROUP:修改用户所属的基本组;

-G, –groups GROUP1[,GROUP2,…[,GROUPN]]]:修改用户所属的附加组;原来的附加组会被覆盖;

-a, –append:与-G一同使用,用于为用户追加新的附加组;

-c, –comment COMMENT:修改注释信息;

-d, –home HOME_DIR:修改用户的家目录;用户原有的文件不会被转移至新位置;

-m, –move-home:只能与-d选项一同使用,用于将原来的家目录移动为新的家目录;

-l, –login NEW_LOGIN:修改用户名;

-s, –shell SHELL:修改用户的默认shell;

            -L, –lock:锁定用户密码;即在用户原来的密码字符串之前添加一个"!";

-U, –unlock:解锁用户的密码;

 6、userdel命令:删除用户

   userdel [选项] 登录

-r:删除用户时一并删除其家目录;

 7、passwd命令:

passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [–stdin] [username]

(1) passwd:修改用户自己的密码;

(2) passwd USERNAME:修改指定用户的密码,但仅root有此权限;

-l, -u:锁定和解锁用户;

-d:清除用户密码串;

-e DATE: 用户账户过期期限,日期;

-i DAYS:非活动期限,宽限期;

-n DAYS:密码的最短使用期限;

-x DAYS:密码的最长使用期限;

-w DAYS:警告期限;

            不懂去看那副图

–stdin:

echo "PASSWORD" | passwd –stdin USERNAME

 8、gpasswd命令:

    组密码文件:/etc/gshadow

    gpasswd [选项] group

-a USERNAME:向组中添加用户

-d USERNAME:从组中移除用户

 9、newgrp命令:临时切换指定的组为基本组;

   newgrp [-] [group]

   -: 会模拟用户重新登录以实现重新初始化其工作环境;

 10、chage命令:更改用户密码过期信息

   chage [选项] 登录名

             -d:–lastday 修改最近一次修改密码的时间 是距离1970.1.1的Days天数

-E:–expiredate EXPIRE_DATE 账户过期日期 EXPIRE_DATE 设置为 -1 会移除账户的过期日期。

-W:–warndays WARN_DAYS 警告日期天数

-m:–mindays MIN_DAYS 密码最小使用的天数 在密码更改之间的最小天数设置为 MIN_DAYS。此字段中的 0 值表示用户可以在任何时间更改其密码。

-M:–maxdays MAX_DAYS 密码最大最长使用的天数 MAX_DAYS 设置为 -1 会移除密码有效性检查。

 11、id命令:显示用户的真和有效ID; 

   id [OPTION]… [USER]

-u: 仅显示有效的UID;

-g: 仅显示用户的基本组ID; 

-G:仅显示用户所属的所有组的ID;

-n: 显示名字而非ID;

 12、su命令:switch user

        登录式切换:会通过读取目标用户的配置文件来重新初始化

su – USERNAME

su -l USERNAME

非登录式切换:不会读取目标用户的配置文件进行初始化

su USERNAME

        注意:管理员可无密码切换至其它任何用户;

        -c 'COMMAND':仅以指定用户的身份运行此处指定的命令;

  其他需要了解的命令:

  其它几个命令:chsh, chfn, finger, whoami, pwck, grpck

 

权限管理:

ls -l 

rwxrwxrwx:

左三位:定义user(owner)的权限

中三位:定义group的权限;

右三位:定义other的权限

进程安全上下文:

进程对文件的访问权限应用模型:

进程的属主与文件的属主是否相同;如果相同,则应用属主权限;

否则,则检查进程的属主是否属于文件的属组;如果是,则应用属组权限;

否则,就只能应用other的权限;

权限:

r:readable, 读

w:writable, 写

x:excutable,执行

文件:

r:可获取文件的数据;

w: 可修改文件的数据;

x:可将此文件运行为进程;

目录:

r:可使用ls命令获取其下的所有文件列表;

w: 可修改此目录下的文件列表;即创建或删除文件;

x: 可cd至此目录中,且可使用ls -l来获取所有文件的详细属性信息;

mode:rwxrwxrwx

ownership:user, group

权限组合机制:

— 000 0

–x 001 1

-w- 010 2

-wx 011 3

r– 100 4

r-x 101 5

rw- 110 6

rwx 111 7

练习:rw-rw-r–, rwxrwxr-x, rwxr-x—, rw——, rwxr-xr-x

 664, 640, 600, 775, 750, 755

权限管理命令:

chmod命令:

      chmod [OPTION]… MODE[,MODE]… FILE…

      chmod [OPTION]… OCTAL-MODE FILE…

      chmod [OPTION]… –reference=RFILE FILE…

      三类用户:

      u:属主

      g:属组

      o:其它

      a: 所有

      (1) chmod [OPTION]… MODE[,MODE]… FILE…

      MODE表示法:

      赋权表示法:直接操作一类用户的所有权限位rwx;

      u=

      g=

      o=

      a=

      授权表示法:直接操作一类用户的一个权限位r,w,x;

      u+, u-

      g+, g-

      o+, o-

      a+, a-

      (2) chmod [OPTION]… OCTAL-MODE FILE…

      (3) chmod [OPTION]… –reference=RFILE FILE…

      选项:

      -R, –recursive:递归修改

      注意:用户仅能修改属主为自己的那些文件的权限;

从属关系管理命令:chown, chgrp

chown命令:

chown [OPTION]… [OWNER][:[GROUP]] FILE…

        chown [OPTION]… –reference=RFILE FILE…

        选项:

        -R:递归修改

        chgrp命令:

        chgrp [OPTION]… GROUP FILE…

        chgrp [OPTION]… –reference=RFILE FILE…

        注意:仅管理员可修改文件的属主和属组;

        思考:用户对目录有写权限,但对目录下的文件没有写权限时,能否修改此文件内容?能否删除此文件?

        模拟之;

        umask:文件的权限反向掩码,遮罩码;

        文件:

        666-umask

        目录:

        777-umask

        注意:之所以文件用666去减,表示文件默认不能拥有执行权限;如果减得的结果中有执行权限,则需要将其加1;

        umask: 023

        666-023=644

        777-023=754

        umask命令:

        umask:查看当前umask

        umask MASK: 设置umask

        注意:此类设定仅对当前shell进程有效;

        练习:完成以下任务

        1、新建系统组mariadb, 新建系统用户mariadb, 属于mariadb组,要求其没有家目录,且shell为/sbin/nologin;尝试root切换至用户,查看其命令提示符;

        2、新建GID为5000的组mageedu,新建用户gentoo,要求其家目录为/users/gentoo,密码同用户名;

        3、新建用户fedora,其家目录为/users/fedora,密码同用户名;

        4、新建用户www, 其家目录为/users/www;删除www用户,但保留其家目录;

        5、为用户gentoo和fedora新增附加组mageedu; 

        6、复制目录/var/log至/tmp/目录,修改/tmp/log及其内部的所有文件的属组为mageedu,并让属组对目录本身拥有写权限;

    install命令:

    install – copy files and set attributes

    单源复制:

        install [OPTION]… [-T] SOURCE DEST

        多源复制:

        install [OPTION]… SOURCE… DIRECTORY

        install [OPTION]… -t DIRECTORY SOURCE…

        创建目录:

        install [OPTION]… -d DIRECTORY…

        常用选项:

        -m, –mode=MODE:设定目标文件权限,默认为755;

        -o, –owner=OWNER:设定目标文件属主;

        -g, –group=GROUP:设定目标文件属组;

    mktemp命令:

    mktemp – create a temporary file or directory

    mktemp [OPTION]… [TEMPLATE]

    常用选项:

    -d:创建临时目录

    注意:mktemp会将创建的临时文件名直接返回,因此,可直接通过命令引用保存起来;

原创文章,作者:luobo3692003,如若转载,请注明出处:http://www.178linux.com/41896

(0)
luobo3692003luobo3692003
上一篇 2016-09-15
下一篇 2016-09-15

相关推荐

  • vim快捷方式

    Vim是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器

    Linux干货 2017-11-26
  • 111-puppet

    一.运维层次分类 OS Provision:

    2016-12-04
  • 软链接与硬链接

    软链接 硬链接

    2017-11-18
  • bash通配符和正则表达式元字符部分归纳

    Linux中有各种各样的字符,而且在不同环境和不同命令之下含义也不同 作为新手,决定先归纳学到的符号,方便后面学习厘清它们之间的关系。 glob 简化了的正则表达式 bash默认通配符: ? :只匹配一个任意字符; * :匹配零个或多个任意字符;   [^] :方括号及其中^中的取反 [abc]:匹配任何一个列在方括号中的字符(这个例子要么匹配一个…

    Linux干货 2016-04-11
  • 文本三剑客之awk

    文本三剑客之awk 简介      awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk的处理文本和数据的方式是这…

    2017-09-06
  • N21沉舟第六周作业

    N21沉舟第六周作业 1、  复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; cp /etc/rc.d/rc.sysinit /tmp vim /tmp/rc.sysinit %s/^[[:space:]]\+/#&…

    Linux干货 2016-08-08