用户和组权限

 

  在Linux系统上,进程所能够访问资源的权限取决于进程运行者的身份.为了系统资源的安全及易管理,系统中就需要有不同权限的用户.而为了方便用户本身的分类及管理,于是就出现了组的概念.

 

1.Linux用户

       Linux用户有自己的名字,即Username,还有一个和我们×××号码一样的编码UID,它是系统辨识用户的唯一编码.

       

       Linux用户分为两类:管理员和普通用户,普通用户又分为系统用户和登录用户.

       管理员 username=root,UID=0

       普通用户的UID: 1-65535

           系统用户:1-499(centos6),1-999(centos7)用于标识守护进程及其可获得的资                         

           源       

           登录用户:500+(centos6),1000+(centos7)用于交互式登录

    

    Attention:多个用户可以使用同一个UID,但系统识别用户只是看uid,遇到uid相同  

  的,系统就认为是同一用户

   登录后,现在提示符前显示用户的username,对于同一个uid系统该采用哪个username

  呢?系统会去查询/etc/passwd中username和uid的映射关系,找到第一个和当前用户

  uid相同的条目就退出,此时这个条目中对应的username就是要显示的username。因此,

  排在文件前面的映射会生效。


2.Linux组

        Linux组和用户一样也有自己的名字和编号,groupname和gid 

        Linux组分为:管理员组和普通组,普通组又分为系统组和普通组

        管理员组:groupname=root,gid=0

        普通组: 

                        系统组:1-499(CentOS6),1-999(CentOS7)

                        普通组:500+(CentOS6),1000+(CentOS7)               


3.Linux用户和组之间的关系:

    对于用户而言:

        用户必须有且只有一个主要组(primary group),也叫私有组,组名和用户名相同

        辅助组(secondary group),一个用户可以有0个或多个辅助组

    一个组可以有多个成员,也可以有多个组管理员,组管理员可以改变组密码,添加或删除

    组成员


4.跟用户相关的两个配置文件

    /etc/passwd  /etc/shadow


    注意:1):这两个文件一个是存储用户信息,一个是存储密码的,早期是放在一起的,可想而知这种做法并不安全,但使用命令也可以将这两个文件合并:

          #pwunconv 

          将密码填入/etc/passwd的x位置,并重命名/etc/shadow文件为/etc/shadow-,相关的密码策略不会显示在/etc/paaawd中


          #pwconv 

          恢复成两个文件

  

         2):查看/etc/passwd和/etc/shadow中某个特定用户的信息:

          #getent passwd 用户名

          #getent shadow 用户名


    /etc/passwd 用于存储用户的相关信息,此文件以:为分隔符分为7个字段,各个字段的含义如下:

        1) login name:登录用户名

        2) passwd:密码(x,表示占位符;其内容在/etc/shadow文件中)

        3) UID:用户ID 

        4) GID:基本组ID

        5) Comment:用户全名或注释

        6) home directory:用户家目录

        7) shell:用户的默认shell

    

    /etc/shadow 用于存储用户的密码信息,同样以:为分隔符分为9个字段,各个字段的含义如下:

        1) 用户名

        2) 加密后的用户密码;现在一般使用sha512加密

        3) 上次修改时间:从1970年1月1日起到最近一次被更改的时间

        4) 最小使用时间:密码过几天后可以变更(0表示可随时变更)

        5) 最大使用时间:密码过期时间(99999表示永不过期)

        6) 密码警告时间:密码过期前几天系统提示用户(默认为一周)

        7) 密码失效时间:密码过期后多少天账号会被锁定

        8) 账号过期时间:从1970年1月1日起,多少天后账号失效

        9) 保留字段(reserved field)


5.组相关的两个配置文件

    /etc/group和/etc/gshadow

      查看/etc/group和/etc/gshadow中某个特定用户的信息:

          #getent group 用户名

          #getent gshadow 用户名


    /etc/group存储的是组的相关信息,以:为分隔符:

        1) 组名

        2) 组密码;通常不需要设定;密码被记录在/etc/gshadow

        3) GID:组ID

        4) 以当前组为附加组(辅助组)的用户列表(以逗号分隔)


    /etc/gshadow 存储的是组密码的相关信息

        1) 组名

        2) 组密码;和/etc/shadow的密码构造一样

        3) 组管理员;逗号分隔用户列表,这些用户都是组管理员

        4) 组成员;逗号分隔用户列表,这些都是组成员


6.专门来修改/etc/passwd和/etc/group的工具:

    修改且带有语法检查的:vipw和vigr

    只有语法检查功能:pwck和grpck


7.用户管理命令

    

    1) 创建用户

  

        useradd [option] username

            -u UID  UID的范围在/etc/login.defs中定义

            -u -o   不检查UID的唯一性

            -g GID  指明要加入的基本组,如果不指定则创建一个与用户名相同的组,并将其作为用户的基本组

            -c "Comment" 用户的注释信息

            -d HOME_DIR 以指定的路径为家目录 此处指定的路径必须不能是已存在的目录

            -s SHELL 指明用户的默认shell

            -G GP1[GP2,...] 为用户指明附加组,组必须事先存在

            -N 不创建私有组作为,使用users组(Gid=100)作为基本组

            -r 创建系统用户

            -M 不创建家目录

            -D 显示默认配置

            -D -s 修改用户的默认shell信息

    

    2)创建用户口令            


        passwd [options] username

            -l 锁定指定用户 (密码前加!!) 

            -u 解锁指定用户 (删除密码前的!!)

            -n mindays: 指定最短使用期限

            -x maxdays: 最大使用期限

            -w warndays: 提前多少天开始警告

            -i inactive-days: 非活动期限

            --stdin 从标准输入接收用户密码; eg: echo "123456" | passwd --stdin username


    3)批量创建用户和修改用户口令 


        #newusers files 批量创建用户;file是满足/etc/passwd格式的文件


        #chpasswd 从标准输出读入user:passwd的格式的多行文本,以此来批量修改用户口令

                    vim batchpasswd


                    user1:明文口令

                    user2:明文口令

                    ...


                    cat batchpasswd | chpasswd

    

    4)用户属性修改


        #usermod [option] username 

            -u UID:指定用户新的UID

            -g GID:指明用户新的基本组

            -G GP1[Gp2...] 指明新的附加组,原来的附加组会被覆盖(若要保留原来的附加组,则要使用-aG)

                -G ""  清空附加组

            -s SHELL:指明新的默认shell

            -c 'COMMENT':新的注释信息

            -d HOME: 新的家目录,原来的家目录中的文件不会同时移动至新的家目录中,若要移动,则要同时使用-m选项

            -l login_name: 新用户名

            -L: 锁定用户 (在/etc/shadow密码前加!)

            -U: 解锁用户

            -e yyyy-MM-DD:指明用户账号的过期日期

            -f INACTIVE:设定非活动期限

            -r:删除用户家目录


    5)查看用户的相关信息

        #id [options] [user]  查看用户相关信息;不指明用户则查看的是当前用户

            -u:UID

            -g:GID

            -G:group 附加组

            -n:显示id对应的名字,通常和-u和-g一起使用

                 id -un [user] 或 is -gn [user]


        #finger 打印登录到系统的所有用户的信息

            finger user  查看user相关的一些信息,比如家目录,shell类型,邮件等


    6) 在/etc/passwd中家目录字段必须不能为空

     如果为空,则登录这个用户时,键入用户和密码之后,会不出现提示符,不能输入任何命令,等待超时之后(提示:/usr/bin/xauth:  timeout in locking authority file /.Xauthority),进入/

               若su - user完全切换或不完全切换 su user, 则会显示su: user user does not exist

     

     如果不空,但目录不存在,则登录这个用户时,会直接进入/,

                             若su - user完全切换 会直接进入/

                             若不完全切换 su user 会进入执行 su user的目录

  

  7) 切换用户或以其它用户身份执行命令

      su [options] [-] [user [args...]]

      切换用户的方式:

      su user:非登录式切换,不会读取目标用户的配置文件,不改变当前工作目录,也称之为不完全切换

      su - user 登录式切换,会读取目标用户的配置文件,切换至其家目录,也称之为完全切换

      Attention:root执行su至其他用户无需密码,非root用户切换时需要密码

      

      切换身份执行命令

      su [-] user -c 'cmd'

      选项 -l --login

      su -l user 相当于 su - user

  

  8)修改用户相关信息的其他命令

    chfn 指定个人信息

    chsh 指定shell

  

  9)修改用户密码策略

    chage [option]  user

          -d last_day 修改最后修改时间 对应于/etc/shadow的第3个字段

          -m --mindays Min_days 修改最小使用时间 对应于/etc/shadow的第4个字段 过多少时间可以修改

          -M --maxdays Max_days 修改最大使用时间 对应于/etc/shadow的第5个字段

          -W --warndays Warn_days 修改警告时间 对应于/etc/shadow的第6个字段

          -I --inactive Inactive 修改账户失效时间 对应于/etc/shadow的第7个字段                  

          -E --expiredate Expire_Date 修改账户过期时间 对应于/etc/shadow的第8个字段 

          -l 显示密码策略

    下次登录强制重设密码

    chage -d 0 tom 等价于 passwd -e tom

    e.g. chage -m 0 -M 42 -W 14   -I 7 tom

         chage -E 2016-09-10 tom 

  

  10)删除用户

      userdel user 不会删除用户家目录

              -r user 才会删除用户的同时删除家目录

     在/etc/login.defs中,有这样的描述

     # This enables userdel to remove user groups if no members exist.

     #

     USERGROUPS_ENAB yes    


8. 组管理命令

  1)创建组

     groupadd [option] groupname

              -g gid 指明GID 范围在/etc/login.defs中指定

              -r 创建系统组

     

  2)修改组

    groupmod [OPTION] group

             -n groupname :组的新名字

             -g GID :新的GID

  

  3)组删除

     groupdel group 

  

  4)更改组密码

    gpasswd [option] group

            -a user 将user加入到指定组中

            -M user1,user2...指定组成员列表

            -d user 从指定组中删除user

            -A user1,user2,... 设置有管理权限的用户列表,即设置组管理员

    

    newgrp命令:临时切换基本组

        如果用户不属于此组,则需要组密码

        Attention:具体参见本文档/etc/gshadow部分

   

   5)更改组成员

    groupmems [options] [action]

    options:

        -g /--group groupname 更改为指定组(只有root可用)

    

    action:

        -a /--add username 指定加入组的用户

        -d / --delete username 指定从组删除的用户

        -p / --purge        从组中清除所有成员

        -l / --list         显示组中成员

    

    e.g. groupmems -g peng -a wang 将wang用户加入peng组

         groupmems -g peng -l 查看peng组中的所有成员,似乎是查看以peng组为附加组的成员列表

         groupmems -g peng -p 清除所有peng组中的成员

    

    6)查看组成员

       groups user1 user2 .. usern 列出指定一个或多个用户的组关系,格式:primary group:secondary group1 secondary group

       groups 如果没有指定用户,那么打印当前进程的组关系,通常是没有基本组和附加组的概念