用户管理相关命令
  工作中经常用到对系统上用户及文件权限的管理,本文详细介绍下用户及权限管理相关的命令
  相关知识:
      对计算机而言,每个使用者都是一个用户,每个用户都有一个用户ID和密码;用户登录系统分为认证(Authentication)、授权(Authorization)、审计(Audition)三步,任何一步出错用户都会登录不上系统;
  在linux系统中用户分为管理用户和普通用户,普通又分为系统用户和登录用户;其中,每个用户都有一个ID号用来惟一标识此用户,此ID号也叫做UID;在linux系统中UID是由16bits的二进制数字组成的,范围为(0-65535),其中:
     管理员的UID号为0
     普通用户为1-65535
      系统用户为1-499(CentOS5/6),1-999(CentOS7)
      登录用户为500-60000(CentOS5/6),1000-60000(CentOS7)
  当用户登录系统时需要输入用户名,用户输入用户名之后需要进行名称解析,将用户的用户名转换为系统的UID来惟一标识此用户,在此,系统根据名称解析库/etc/passwd进来行解析,其中,/etc/passwd中的内容由冒号分隔为七段:
   account:password:UID:GID:GECOS:directory:shell
      account:表示用户名
      password:表示加密的密码,也可以是占位符;用户的真实密码存放于/etc/shadow中
      UID:表示用户ID
      GID:表示用户所属的主组的ID号
      GECOS:表示注释信息
      directory:表示用户的家目录路径
      shell:表示用户的默认shell,登录时默认的shell程序
  刚刚提到用户的真实密码存放于/etc/shadow文件中,其中,/etc/shadow文件的内容由冒号分隔为九段:
      sp_namp:sp_pwdp:sp_lstchg:sp_min:sp_max:sp_warn:sp_inact:sp_expire:sp_flag
      sp_name:账号名称,由于密码也需要与账号对应。因此,这个文件的第一列就是账号,必须要与/etc/passwd相同才行;
      sp_pwdp:表示用户加密后的密码
      sp_lstchg:最近一次修改密码的时间
      sp_min:表示密码的最短使用期限(密码不可被改动的天数)
      sp_max:表示密码的最长使用期限(密码需要重新更动的天数)
      sp_warn:表示密码最长使用期限到期后的警告时间段,在此时间段内用户还可以正常使用密码
      sp_inact:非活动时间(密码过期后的账号宽限时间),不过,如果密码过期了,那当你登录系统时,系统会强制要求你必须要重新设置密码才能登录继续使用。                    
      sp_expire:账号失效日期,这个日期跟第三个字段一样,都是使用1970年以来的总日数设置。这个字段表示:这个账号在此字段规定的日期之后,将无法再使用。
      sp_inact:保留字段
  在linux系统中组分为管理员组和普通用户组,普通用户组又分为系统组和登录组,同用户ID一样,组也有ID叫做GID,GID和UID一样也是由16bits位的二进制数组成,范围为(0-65535),其中:
    管理员组的ID号为0
    普通用户组的ID号为1-65535
      系统登录组的ID号为1-499(CentOS5/6),1-999(CentOS7)
      登录用户组的ID号为500-60000(CentOS5/6),1000-60000(CentOS7)
  存储组信息的名称库为/etc/group,此文件被冒号分隔为四段:
    roup_name:passwd:GID:user_list
       group_name:表示组名
      passwd:组密码占位符,真实的密码存放于/etc/gshadow中,稍后介绍。
      GID:组ID号
      user_list:用户列表,表示的是以此组为附加组的用户列表。
    组密码存放于/etc/gshadow中,此文件由冒号分隔为四段
        group name:encrypted password:administrators:members
      group name:用户组名,和/etc/group里面的组名一样
      encrypted password:密码列
      administrators:用户组管理员的账号
      members:该用户组的所属账号
    用户管理的命令详解:
      useradd命令:
        功能:创建用户
      用法:useradd[options] LOGIN
      参数:
        -u:指定用户UID
        -g:指定基本组ID,此组得事先存在
        -G:指定用户所属的附加组,多个组之间用逗号分隔;
        -c:指明注释信息
        -d:指定用户家目录,通过复制/etc/skel目录并重命名实现,指定的家目录路径如果事先存在,则不会为用户复制环境配置文件
        -s:指定用户的默认shell,可用的所有shell列表存储在/etc/shells文件中;
        -r:表示创建的是系统用户
        -m:创建用户时为用户创建家目录,默认创建用户时已经创建家目录
        -M:表示创建用户时不为用户创建家目录
        -D:显示创建用户时的默认配置,用户的默认配置文件为/etc/login.defs;
        -e:后面接一个日期,格式为"YYYY-MM-DD",此选项可写入shadow第八个字段,即账号失效日;
        -f:后面接shadow的第七个字段选项,指定密码是否会失效;
    usermod命令:
      功能:修改用户属性
      用法:usermod[options] LOGIN
      参数:
        -u:修改用户的UID
        -g:修改用户所属的基本组
        -G:修改用户所属的附加组;原来的附加组会被覆盖,如果不想覆盖需要添加-a选项
        -c:修改注释信息
        -d:修改用户的家目录;用户原有的文件不会被转移至新位置,如果想转移原有的文件,需要添加-m选项;
        -l:修改用户名
        -s:修改用户的默认shell
        -L:锁定用户账号,即在用户原来的密码字符串之前添加一个“!”,解锁即去掉叹号;
        -U:解锁用户锁定
     userdel命令:
       功能:删除用户
       用法:userdel[options] LOGIN
       参数:
        -r:删除用户时一并删除用户家目录,默认不删除
      passwd命令:
        功能:(1)修改用户自己的密码(2)修改制定用户的密码,仅root有此权限
        用法:passwd/passwdUSERNAME
        参数:
         -l,-u:锁定和解锁用户
         -d:清除用户密码
         -e:date过期期限,日期
         -i:days非活动期限
         -n:密码的最短使用期限
         -x:密码的最长使用期限
         -w:警告期限
         --stdin:
         echo"PASSWORD" |passwd --stdin 用户名  修改用户名密码
      groupadd命令
        功能:添加用户组
        用法:groupadd[options] groupname
        参数:
          -g GID:指定GID,默认是上一个组的GID+1;
          -r:创建系统组,id号为1-499(CentOS6)或1-999(CentOS7)
      groupmod命令:
        功能:修改组信息
        用法:groupmod[options] groupname
        参数:
          -g GID:修改GID
          -n new_name:修改组名
      groupdel命令:
        功能:删除组
        用法:groupdel组名
      gpasswd命令:
        功能:给组设定密码
        用法:gpasswd[option] group
        参数:
          -a USERNAME:向组中添加用户
          -d USERNAME:从组中移除用户
      newgrp命令:
        功能:临时切换用户的基本组为其它组,这时如果切换的组不是用户的附加组需要输入密码;
        用法:newgrp[-] [group]
        参数:
         -:会模拟用户重新登录以实现重新初始化其工作环境;
      chage命令:
        功能:修改用户的密码过期信息
        用法:chage[options] [LOGIN]
        参数:
         -d:修改最近一次更改密码的日期
         -E:修改账号失效日
         -W:修改密码过期警告时间
         -m:修改密码最短保留天数
           -M:修改密码多久需要进行更改的时间
         -l:列出该账号的详细密码参数
         -I:修改密码失效日期
      id命令:
        功能:显示用户的真实和有效ID
        用法:id[OPTION]... [USERNAME]
        参数:
         -u:仅显示有效的UID;
         -g:仅显示用户的基本组ID;
         -G:仅显示用户所属的所有组的ID
         -n:显示名字而非ID
         -r:显示真实ID
      su命令:switchuser
        功能:
         登录式切换:会通过重新读取目标用户的配置文件来重新初始化
         非登录式切换:不会读取目标用户的配置文件来进行初始化
          注意:管理员可无密码切换至其它任何用户;非管理员切换时必须给出目标用户的密码,否则,无法切换;
        参数:
         -c ‘COMMAND’仅以指定用户的身份运行此处指定的命令;
  su - woniu -c 'whoami'  表示以woniu用户执行whoami命令,执行完成后还是当前用户
     chown命令:
       功能:更改文件的属主或属组
       用法:chown[OPTION]... [OWNER][:[GROUP]] FILE...
       chown [OPTION]... --reference=RFILE FILE...
       参数:
        -R:递归修改
 
权限管理知识及命令
    在命令ls -l的结果中,前一列为文件的类型和权限说明,如下所示:
      [root@localhost/]# ls -l
    total 106
    dr-xr-xr-x.   2 root root 4096 Dec 11 09:43 bin
    其中的d表示文件为目录,接下来的字符中,以3个为一组,且均为“rwx”的3个参数的组合。其中r代表可读、w代表可写、x代表可执行。要注意的是,这3个权限的位置不会改变,如果没有权限就会减号-代替。
      第一组为文件所有者的权限,用u表示
      第二组为文件用户组的权限,用g表示
      第三组为其它非本用户组的权限,用o表示
      进程对文件的访问权限应用模型:
        首先检查进程的属主于文件的属主是否相同;如果相同,则应用属主权限;
        否则,则检查进程的属主是否属于文件的属组;如果是,则应用属组权限;
        否则,就只能应用other的权限;
      对文件而言:
        r:可获取文件的数据
        w:可修改文件的数据
        x:可将此文件发起运行为进程
      对目录而言:
        r:可使用ls命令获取其下的所有文件列表
        w:可修改此目录下的文件列表;即创建或删除文件
        x:可cd至此目录中,且可使用ls -l来获取所有文件的详细属性信息;
      权限管理命令:
        chmod命令:
           功能:修改文件或目录的权限
           用法:chmod[OPTION]... MODE[,MODE]... FILE...
           MODE表示法:
             赋权表示法: 直接操作一类用户的所有权限位
               u=
               g=
               o=
               a=
             授权表示法:直接操作一类用户的一个权限位
               u+,u-
               g+,g-
               o+,o-
               a+,a-                        
          chmod [OPTION]...OCTAL-MODE FILE...
            chmod 755/etc/fstab
          chmod[OPTION]... --reference=RFILE FILE...
          chmod--reference=/var/log/message /etc/fstab 将/etc/fatab的权限修改为和/var/log/message的权限一样。
            参数:
             -R:表示递归修改        
   umask:文件的权限反向掩码,遮罩码,文件默认权限
    对文件而言,默认权限是666,因为文件默认没有执行权限:而目录默认权限是777,而umask是从权限中“拿走”相应的位
    所以默认创建文件时的权限为:666-umask;创建目录时的权限为777-umask
    对文件而言,如果减得的结果中有执行权限,则需要将其加1;而目录不变。
       例如,如果umask值为023,则创建出来的文件的权限为
          666-023+1=644
  umask命令:
    umask:查看当前umask
    umask MASK:设置umask
  注意:此类设定仅对当前shell进程有效;