Linux作为一种多用户多任务操作系统,在日常的使用中不可避免地要划分出一个角色的概念来管理和使用计算机,这个角色与每一个计算机使用者关联,在Linux中称这种角色为用户。而在每一个用户使用计算机的过程中,又必然存在对有限计算机资源使用的限制性,那么操作系统就必须提供一种途径来保证每个用户独立、合理的使用计算机。

一、用户和用户组管理  


(一)用户及用户组相关基本概念 

 用户:泛指计算机的使用者。用计算机可识别的用户ID(UID,user id)标识。

 用户组:用户容器,用来将多个用户合并为一个单一的逻辑组件。用计算机可识别的用户组ID(GID,group id)标识。

 UID和GID:都是16位二进制数,其范围为0-65535,共计2^16=65536个。

 用户类别:

    (1)管理员用户:被称为root,UID为0。

    (2)系统用户:为系统运行提供服务的非登陆式用户,UID从1-999这个范围进行分配。

    (3)登陆用户:真正使用计算机的普通用户,UID从500-60000进行分配。

 组类别:Linux系统中用户组可按三种方式划分:

    1、与类似用户的分类方式

    (1)管理员组:管理员所在组,GID为0。

    (2)系统用户组:系统用户所在组,GID为1-999。

    (3)登陆用户组:登陆用户所在组,GID为1000-60000。

    2、从用户角度出发分类

    (1)用户的基本组:每个用户的主要组。

    (2)用户的附加组:每个用户加入的其他组。

    3、从用户组的角度出发分类

    (1)私有组:组名和用户名相同,且只包含一个用户。

    (2)公共组:组名包含多个用户。

 认证信息:用户名和密码,通过比对事先存储的信息与登陆时用户提供的信息是否一致来认证用户。

 那么遵从Linux中“一切皆文件”的哲学理念,认证信息也保存在文件来中。我们来认识三个文件分别是/etc/passwd、/etc/group和/etc/shadow,这三个文件分别保存了用户的信息、组的信息和密码的信息,当用户登陆时就是通过比对这三个文件中的信息来实现认证,接下来,我们对这三个文件的内容格式作出解释。

      (1)/etc/passwd 文件字段说明

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

         name:用户名

          password:可以是加密的密码,也可以是占位符x

          UID:用户ID

          GID:用户所属的基本组ID

          GECOS:可选,用户的注释信息

          directory:用户的家目录

          shell:用户的默认shell(登陆时)

    (2)/etc/shadow 文件字段说明        

          name:用户名。

           ② $加密算法$salt$加密密码:salt称为杂质,加密时添加。

                                      最近一次修改密码的时间:表示从197011日(unix元年)开始的天数;0表示用户下次登录时应该更改密码;空字段表示这个功能被禁止。

                                      最短使用期限:从更改密码开始,下次可更改密码经过的天数。

                                      最长使用期限:从更改密码开始,可合法使用此密码的天数。

                                      警告期限:在最长使用期限过期之前,警告密码应更改的天数。

                                     ⑦ 非活动期限:在最长使用期限后,此密码还可被使用的一段时间。

                                      账户过期期限:从1970年开始,账户可被使用的天数。

                                     ⑨ 保留字段

浅析Linux系统下用户与权限管理_权限

       (3)/etc/group 文件字段说明

           group_name:password:GID:user_list

          group_name:用户组名

         ② passwd:组密码

         ③ GID:用户组ID

         ④ user_list:以该组为其附加组的用户的用户列表;


  (二)用户和用户组管理相关命令 


 命令概述useradduserdelusermodpasswdgroupaddgroupdelgroupmodgpasswdchageidsu,chown,chgrp

            1groupadd  添加组

                  使用格式 :groupadd [options] group

                        -g--gid GID  指定GID;如不指定则默认是上一个已存在组的GID1

                                -r, --system   创建系统组 

# group add mygroup
# groupadd -r mygroup

            2、groupmod  修改组属性

                 使用格式 : groupmod [options] GROUP

                        -g GID: 修改GID

                               -n new_name:修改组名        

#  groupmod -g 1002 mygroup
#  groupmod -n mynewgroup mygroup

                3、groupdel  删除组

                         使用格式:    groupdel [options] group

#  groupdel mynewgroup

           4、useradd  创建用户

                  使用格式:    useradd [options] LOGIN

                         -u--uid UID:指定UID

                         -g--gid GROUP:指定基本组ID,此组需要事先存在

                         -G, --groupsGROUP1[,GROUP2,...[,GROUPN]]]:指明用户所属的附加组,多个组之

       间用逗号隔开

                         -c--comment COMMENT:指定注释信息

                         -d--homeHOME_DIR:  以指定的路径为用户的家目录;通过复制/etc/skel此目录并

       重命名来实现:指定的家目录路径事先存在,则不会为用户复制环境配置文件;

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

       件当中;

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

                         -M   不创建用户主目录

                         -f     密码过期后的使用天数,0表示禁用,-1表示永不禁用

                         -D   显示创建用户的默认设定

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

#  useradd myuser

            5、usermod  更改用户属性

                   使用格式:     usermod [options] LOGIN

                          -u--uid UID :修改用户ID

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

                          -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改用户所属的附加组;原来的

        附加组会被覆盖

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

                          -c--comment COMMENT:修改注释信息

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

                          -m--move-home:只能与-d一起使用,用于将用户的主目录移动到新位置

                            -l--login LOGIN:修改用户登录名

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

                           -L--lock:锁定用户密码

                           -U--unclock:解锁用户的密码;

#  将用户myuser的家目录更改为/tmp/home/user,并且原来的用户配置不变,且更改用户的默认shell为tcsh
#  usermod -s /bin/tcsh -d /tmp/home/user -m myuser

            6、userdel   删除用户

                  使用格式:    userdel[option] login

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

                       注意:当删除一个用户时,其基本组也会被删除。

#  删除用户myuser
#  userdel myuser

                7、passwd  密码管理

                      使用格式:    passwd [-k] [-l][-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i 

                                            inactivedays] [-S][--stdin] [username]

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

                   2passwd USERNAME:修改指定用户的密码,但仅root用户有此权限,且不需要知道

        原密码;

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

                               -d:清除用户密码串

                               -e DATE:设定过期期限;

                                -i DAYS:非活动期限;

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

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

                                -w DAYS:警告期限

                                --stdin:从标准输入读入密码。

                                 通常在脚本中如此使用:echo "PASSWORD" | passwd--stdin USENAME

#  更改用户user的密码
#  passwd myuser

     8、gpasswd: 更改用户组密码

                       使用格式:    gpasswd [option]  group

                             -a USERNAME: 向组中添加用户

                             -d USERNAME: 从组中移除用户

#  更改用户组密码
#  gpasswd mygroup
        
#  将用户myuser添加进mygroup组中,即让mygroup成为myuser的附加组。
#  gpasswd myuser

                  9、chage 更改密码过期信息

                      使用格式:     chage [options] LOGIN

                              -d:更改上次修改密码的期限

                              -E:更改账户过期期限

          -I:更改密码的非活动期限

                              -W:更改警告期限

                              -m:更改密码最短使用期限

                              -M:更改密码最长使用期限

                10、id  显示用户的真实和有效 id 信息

                      使用格式:     id[OPTION]... [USER]

                             id:显示自己的ID信息

                             -u:仅显示有效UID

                             -g:仅显示有效基本组ID

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

                             -n:不显示ID而显示名称(配合以上显示ID的选项一起用)

                11、su   切换用户

                       登陆时切换:会重新读取目标用户的配置文件来重新初始化

                               su- USERNAME

                               su-l USERNAME

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

                               suUSERNAME

               

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

                          注意:管理员可无密码切换至其他任何用户;非管理员必须要给出目标用户的登陆密码

    12、chown 更改文件属主或者属组或者属主和属组

                  使用格式:      chown [OPTION]... [OWNER][:|.[GROUP]] FILE...

                 可以使用OWNER:GROUP或者OWNER.GROUP

                chown [OPTION]... --reference=RFILE FILE...

         选项:

               -R,--recursive:递归修改

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

#  将文件file1的属组和属主更改为mygroup和myuser
#  chown myuser:mygroup file1

     13、chgrp 仅更改属组

        使用格式:      chgrp [OPTION]... GROUP FILE...

                 chgrp [OPTION]... --reference=RFILE FILE...

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

二、权限管理 


  (一)权限相关基本概念  

   (1)引言

    我们可以使用ls –l命令查看一个文件来认识权限在Linux中的体现

      # ls -l /etc/passwd
       -rw-r--r--. 1 root root 2093 12月 16 17:36 /etc/passwd

    注意看前面共有十位,第一位是文件类型,而剩余9位即为权限位,每三位为一组,分别表示文

    件属主、属组和其他用户的权限。

    (2)进程对文件的访问权限应用模型

     检查进程的属主与文件的属主是否相同;若相同,则应用属主权限;否则,就检查进程的

    属主是否属于文件的属组;如果是,则应用属组权限否则,就只能应用other权限;        

    (3)权限分类:

     r、w、x(读 read、写 write、执行 excute)     

      权限用八进制来表示 如下图

    浅析Linux系统下用户与权限管理_用户组_02

    (4)权限管理命令

        chmod

        使用格式:

           chmod[OPTION]... MODE[,MODE]... FILE...

           chmod[OPTION]... OCTAL-MODE FILE...

           chmod [OPTION]... --reference=RFILE FILE...

         三类用户

             u:属主

             g:属组

             o:其他

             a:所有

            chmod [OPTION]... MODE[,MODE]... FILE...

             MODE表示法:

                赋权表示法:灵活组合使用,一次直接操作一类用户的所有权限位

                    u=MODE,g=MODE,o=MODE,a=MODE,亦可以ug=MODE

                授权表示法:直接操作一类用户的一个权限位和多位,精细到一位

                    u+,u-

                    g+,g-

                    o+,o-

                    a+,a-

                    注意:+w 全局写很危险,所以此命令只对属主有效

          chmod [OPTION]... OCTAL-MODE FILE...

                八进制权限位要给全(至少三位八进制)

               注意: 若为三位以下,则右位有效,其结果很有可能并不是你期望的

              结果

          chmod [OPTION]... --reference=RFILE FILE...

               引用性修改,根据某个参照文件来修改文件权限

           选项:

               -R,--recursive:递归修改

            注意:此操作慎用(尤为注意执行权限的给出,给了目录中的文件会很危

            险!!!)

#  给file1的属主和属组加上写权限
#  chmod u+w,g+w file1
#  chmod ug+w file1

#  给file1的属主和属组仅赋予写权限
#  chmod 220 file1


注:此文是根据CentOS 7为例进行说明。如有错误及不足之处,欢迎指正。