您的当前位置:首页正文

第03章用户管理

2024-12-20 来源:二三四教育网
用户管理

1.用户/组基本概念

概念
Users and groups:
. Every process (running program) on the system runs as aparticular user.
. Every file is owned by a particular user. 
. Access to files and directories are restricted by user. 
. The user associated with a running process determines the files and directories accessible to that process.

#查看当前登录的用户信息:
[root@tianyun ~]# id
      uid=0(root) gid=0(root) groups=0(root)
#查看文件的owner:
        [root@tianyun ~]# ll /home/ 
        drwx------. 4 alice alice 4096 Jun 2 15:59 alice
        drwx------. 2 root root 16384 Jun 1 23:09 lost+found
        drwxr-xr-x 2 root root 4096 Jun 2 15:33 tianyun
#查看运行进程的username:
        [root@tianyun ~]# ps aux 
        USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
        root 1 0.0 0.0 19360 1536 ? Ss 13:29 0:00 /sbin/init
        root 2 0.0 0.0 0 0 ? S 13:29 0:00 [kthreadd]
        root 3 0.0 0.0 0 0 ? S 13:29 0:00 [migration/0]
        root 4 0.0 0.0 0 0 ? S 13:29 0:00 [ksoftirqd/0]
#用户组信息存储的文件:
        /etc/passwd(7列)
        root:x:0:0:root:/root:/bin/bash
 #用户名:x:uid:gid:描述:HOME:shell
 #系统约定: RHEL6
        uid: 0 特权用户
        uid: 1~499 系统用户
        uid: 500+ 普通用户

#The root user

  . uid is 0
  . all power
  . This user has the power to override normal privileges on the file system
  . installing or removing software and to manage system files and directorie
 . Most devices can only be controlled by root

#/etc/shadow(8列)
   root:$1$MYG2NDG6$a1wtyr5GDM2esAPjug0YP0:15636:0:99999:7:   :   :
#加密算法$id$salt$encrypted
    $1: MD5
    $5: SHA-256
    $6: SHA-512

    root:$1$MYG2NDG6$a1wtyr5GDM2esAPjug0YP0:15636:0:99999:7:: :

 --------------------------

1)“登录名”是与/etc/passwd文件中的登录名相一致的用户账号
2)“口令”字段存放的是加密后的用户口令字,如果为空,则对应用户没有口令,登录时不需要口令;
星号代表帐号被锁定;
双叹号表示这个密码已经过期了。
$6$开头的,表明是用SHA-512加密的,
$1$ 表明是用MD5加密的
$2$ 是用Blowfish加密的
$5$ 是用 SHA-256加密的。

3)“最后一次修改时间”表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样。例如在SCOLinux中,这个时间起点是1970年1月1日。
4)“最小时间间隔”指的是两次修改口令之间所需的最小天数。
5)“最大时间间隔”指的是口令保持有效的最大天数。
6)“警告时间”字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。
7)“不活动时间”表示的是用户没有登录活动但账号仍能保持有效的最大天数。(软限制。到期后多少天就不能用账号了。)
8)“失效时间”字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。(硬限制。)

  1. 保留
    /etc/group
    root:x:0:
    [root@tianyun ~]# man 5 passwd
    PASSWD(5) File formats PASSWD(5)

NAME 名称
passwd - 密码文件

描述
Passwd 是个文本文件, 它包含了一个系统帐户列表,
给出每个帐户一些有用的信息,比如用户 ID,组 ID, 家目录, shell,等.
通常它也包含了每个用户经过加密的密码.
它通常应该是可读的(许多命令,工具程序,象 ls(1) 用它做用户 Id
到用户名称的映射),但是只允许超级用户有写方式权限.

在过去美好的日子里,这种一般的读许可没有什么大问题.
每个人都能读到加密了的密码,因为硬件太慢以至于不能解开一个
精选的密码,另外,这基本假定是为友好的使用团体使用的.
现在,许多人运行一些版本的影子密码套件,它们在 /etc/passwd
的密码域里是 *,而不再是加密的口令, 加密的口令放在 /etc/shadow
中,那个文件只有超级用户能读.

不管是否使用了影子密码,许多系统管理员使用一个星号在加密的密码字段
以确保用户不能鉴别他(她)自己的密码. (见下面的注意)

如果你建立了一个新的登录,首先放个星号在密码字段, 然后使用
passwd(1) 设置它.

   (密码文件)里每行一条记录,并且每行有这样的格式:

          account:password:UID:GID:GECOS:directory:shell
          (帐号:密码:用户ID:组ID:一般的信息:目录:shell)

        [root@tianyun ~]# man 5 shadow
        [root@tianyun ~]# man 5 group
            关于man手册
                1、用户命令
                2、系统调用
                3、C库调用
                4、设备文件及特殊文件
                5、配置文件格式
                6、游戏
                7、杂项
                8、管理命令及守护进程
                9、Linux内核API(CentOS7以后出现)
                之所以分这九个章节是应为有的命令分属不同类,查看命令具体属于man中的哪个章节需要使用命令
#2.用户/组管理
    用户:
    ==创建用户 未指定选项==
        [root@tianyun ~]# useradd user01 
                    . 未指定该用户的主组
                    . 未指定该用户的附加组
                    . 未指定用户的HOME
                    . 未指定用户的SHELL
                    . 未指定用户的UID...
  [root@tianyun ~]# grep 'user01' /etc/passwd /etc/shadow /etc/group
  /etc/passwd:user01:x:507:512::/home/user01:/bin/bash
  /etc/shadow:user01:!!:16589:0:99999:7:::
  /etc/group:user01:x:512:

  [root@tianyun ~]# id user01 
    uid=507(user01) gid=512(user01) groups=512(user01)

  [root@tianyun ~]# ls /var/spool/mail/user01 
     /var/spool/mail/user01

小结:
如果创建一个用户时,未指定任何选项,系统会创建一个和用户名相同的组作为用户的Primary Group.

==创建用户    指定选项==
            [root@tianyun ~]# useradd user02 -u 1503 //创建用户usr02,指定uid
            [root@tianyun ~]# useradd user03 -d /aaa //创建用户user03 指定家目录
            [root@tianyun ~]# useradd user05 -s /sbin/nologin //创建用户并指定shell
            [root@tianyun ~]# useradd user07 -G hr,it,fd //创建用户,指定附加组
            [root@tianyun ~]# useradd user10 -u 4000 -s /sbin/nologin
==删除用户========
    [root@tianyun ~]# userdel user10 
     //删除用户user10,但不删除用户家目录和mail spool
    [root@tianyun ~]# ll -d /home/user10/
           drwx------ 3 506 510 4096 09-01 21:14 /home/user10/
    [root@tianyun ~]# ll /var/spool/mail/user10 
          -rw-rw---- 1 506 mail 0 09-01 21:14 /var/spool/mail/user10

    [root@tianyun ~]# userdel -r user2
          //删除用户user2,同时删除用户家目录和mail spool

==用户密码========
    方法一:root修改其他用户(alice)密码
        [root@tianyun ~]# passwd alice
    方法二:用户(zhuzhu)登录,自己修改密码。
        [zhuzhu@tianyun ~]$ passwd
==组成员管理========
    注意:只针对已存在的用户      -G  组名 组名 ... 用户名
        [root@tianyun ~]# usermod -G hr niuniu2 //覆盖原有的附加组
        [root@tianyun ~]# usermod -G fd,it niuniu2
        [root@tianyun ~]# usermod -aG hr niuniu2 //增加新的附加组

==其它选项管理=======
    [root@tianyun ~]# usermod -s /sbin/nologin niuniu2
#修改登录SHELL
   用户组:
        [root@tianyun ~]# groupadd hr

        [root@tianyun ~]# groupadd net01 -g 2000 
                           //添加组net01,并指定gid 2000

        [root@tianyun ~]# grep 'net01' /etc/group 
                            //查看/etc/group中组net01信息

        [root@tianyun ~]# groupdel net01 
                                      //删除组net01

分类

#基本组
        随用户创建,自动创建的同名组
        用户的基本组,显示在/etc/passwd
#附加组
        用户加入的其他组。
    #案例
        1 useradd是创建用户的命令。
        2 usermod是修改用户的命令。
        3 groupadd是创建组的命令。
        4 -u 制定用户的UID。
        5 -g 制定用户的基本组。
        6 -G 制定用户的附加组。
        7 /etc/passwd 可以查看的是用户的基本组。
        8 /etc/group 可以查看用户的附加组。



#一、创建用户AAA,同时生成基本组AAA
      [root@QF ~]# useradd AAA
      [root@QF ~]# grep AAA /etc/passwd
      AAA:x:6001:6001::/home/AAA:/bin/bash

#二、创建用户BBB,同时生成基本组BBB
      [root@QF ~]# useradd BBB
      [root@QF ~]# grep BBB /etc/passwd
      BBB:x:6002:6002::/home/BBB:/bin/bash

#三、创建组CCC
      [root@qf ~]# groupadd CCC
      [root@qf ~]# grep CCC /etc/group
      CCC:x:7001:

#四、修改用户AAA的基本组为CCC.
#五、查看passwd中,用户AAA的基本组是CCC。
      [root@qf ~]# usermod  AAA   -g CCC
      [root@qf ~]# grep AAA /etc/passwd
      AAA:x:6001:7001::/home/AAA:/bin/bash

#六、修改用户BBB的附加组为CCC.
#七、查看group中,用户BBB的附加组是CCC。 
     [root@qf ~]# usermod  BBB   -G CCC
     [root@qf ~]# grep CCC /etc/group
     CCC:x:7001:BBB

3.提权(了解)

#永久提权Switching users with su
        [alice@tianyun ~]$ useradd u1
             -bash: /usr/sbin/useradd: 权限不够
        [alice@tianyun ~]$ su - root
              password:
        [root@tianyun ~]# useradd u1
      成功
#临时提权Running commands as root with sudo
#以root身份授权普通用户xulei
      [root@tianyun ~]# vim /etc/sudoers (vim 脚本)
           %wheel ALL=(ALL) NOPASSWD: ALL
  允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令

      [root@tianyun ~]# useradd xulei -G wheel (-G 添加到附加组)
      [root@tianyun ~]# id xulei
         uid=504(xulei) gid=504(xulei) 组=504(xulei),10(wheel)

# passwd xulei
  切换用户xulei登陆
 [xulei@tianyun ~]$ useradd gougou10
  -bash: /usr/sbin/useradd: 权限不够
 [xulei@tianyun ~]$ sudo useradd gougou10
 [xulei@tianyun ~]$ id gougou10
  uid=505(gougou10) gid=505(gougou10) 组=505(gougou10)
4.命令概览
groupadd(创建组)groupdel(删除组)
passwd(修改密码)
5.扩展知识
1.用户创建时的默认设置能否改变呢?(比如SHELL是禁止登陆)
    原理
       /etc/default/useradd文件为设置添加的用户规则文件。
        示例
       [root@tianyun ~]# vim /etc/default/useradd (vim 脚本)
                          SHELL=/sbin/nologin (禁止shell登录)
---尝试新建用户吧。
2.用户密码策略能否设置?(比如密码有效期只有14天)
  设置个别用户
     #chage
       原理
         chage 命令负责管理用户密码时效问题
       名词
          last change 最后一次更改密码的时间
          max days 最长过期天数
          min days 两次修改密码的最小间隔时间
          warn days 警告密码过期时间。
          password expired 密码已过期
          inactive days不活跃的时期,密码过期后,锁定帐号的天数
选项:
    -d, --lastday 最近日期        将最近一次密码设置时间设为“最近日期”
     -E, --expiredate 过期日期     将帐户过期时间设为“过期日期”
     -h, --help                    显示此帮助信息并推出
     -I, --inactive INACITVE       过期 INACTIVE 天数后,设定密码为失效状态
     -l, --list                    显示帐户年龄信息
     -m, --mindays 最小天数        将两次改变密码之间相距的最小天数设为“最小天数”
     -M, --maxdays 最大天数        将两次改变密码之间相距的最大天数设为“最大天数”
     -R, --root CHROOT_DIR         chroot 到的目录
     -W, --warndays 警告天数       将过期警告天数设为“警告天数”
            
#案例
 1.设置用户密码最小天数(-m),最大天 数(-M),提醒天数(-W),不活跃天数(-l)
    chage -m 0 -M 90 -W 7 -I 14 username 
 2.设置用户下次登录立刻更改密码。
    chage -d 0 username
 3.列出用户密码策略信息。
    chage -l username 
 4.设置用户密码过期日期。
    chage -E YYYY-MM-DD username
#设置新建用户
/etc/login.defs
  #原理
     /etc/login.defs是设置用户帐号密码限制的文件。该文件里的配置对root用户无效
  #示例
     [root@tianyun ~]# vim /etc/login.defs (vim 脚本)
         MAIL_DIR /var/spool/mail
         PASS_MAX_DAYS 30
         PASS_MIN_DAYS 0
         PASS_MIN_LEN 5
         PASS_WARN_AGE 7
         CREATE_HOME yes
         ENCRYPT_METHOD SHA512

3.生产环境手动创建用户示例:
    1.创建用户
      [root@tianyun~]# useradd maomao100
    2.免会话配置密码。
      [root@tianyun~]# echo 123456 |passwd --stdin maomao100
    3.强制用户在下一次登录时修改密码
      [root@tianyun~]# chage -d 0 maomao100
4.如何将多个用户加入到指定的组:
  #前言
     usemod -G 改写用户的组之后,用户的组信息是覆盖,也就是说usermod使用户只能存在于一个组。那么如何使用户同时属于多个组呢? gpasswd -a试试吧
  #案例
      [root@localhost ~]# useradd user1
      [root@localhost ~]# useradd user2
      [root@localhost ~]# useradd user3
      [root@localhost ~]# groupadd group1
      [root@localhost ~]# gpasswd -a user1 group1
      正在将用户“user1”加入到“group1”组中
      [root@localhost ~]# gpasswd -a user2 group1
      [root@localhost ~]# cat /etc/group
          group1:x:1011:user1,user2 
5.如何替换某个组的所有成员呢?
     [root@localhost ~]# gpasswd -M user2,user3 group1
     [root@localhost ~]# cat /etc/group
            group1:x:1011:user2,user3
6.如何删除某个组的某个成员
   原组中有三个用户,删除其中一个用户。
     [root@localhost ~]# grep group1 /etc/group
            group1:x:1011:user3,user1,user2
     [root@localhost ~]# gpasswd -d user1 group1
     正在将用户“user1”从“group1”组中删除
     [root@localhost ~]# grep group1 /etc/group
           group1:x:1011:user3,user2
显示全文