Linux用户管理

一,用户/组基本概念

1,概念

Users and groups:
. Every process (running program) on the system runs as a particular 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.

2,查看当前登录的用户信息

    [[email protected] ~]# id
    uid=0(root) gid=0(root) groups=0(root)

3,查看文件的owner

    [[email protected] ~]# 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

4,查看运行的进程username

    [[email protected] ~]# 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]

5,用户组信息存储的文件

 /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
8列所代表的含义
 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)“失效时间”字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。(硬限制。)
9) 保留
/etc/group
root:x:0:
[[email protected] ~]# 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)

[[email protected] ~]# man 5 shadow

SHADOW(5)                       文件格式和转化                       SHADOW(5)

名称
       shadow - 影子化了的密码文件
描述
       shadow 是一个文件,它包含系统账户的密码信息和可选的年龄信息。
       如果没有维护好密码安全,此文件绝对不能让普通用户可读。
       此文件的每行包括 9 个字段,使用半角冒号 (“:”) 分隔,顺序如下:
       登录名
           必须是有效的账户名,且已经存在于系统中。
       加密了的密码
           请参考 crypt(3) 来了解关于解析此字符串的细节信息。
           如果密码字段包含一些不是 crypt(3) 合法结果的字符,比如 ! 或
           *,用户将无法使用 unix 密码登录(但是可以通过其它方法登录系统)。
           此字段可以为空,此时认证为特定的登录名时,不要求密码。然而,一些读取
           /etc/shadow
           文件的应用程序,在密码字段为空时,可能决定禁止任何访问。
           以叹号开始的密码字段意味着密码被锁定。该行的剩余字符表示锁定之前的密码。
      最后一次更改密码的日期
           最近一次更改密码的时间,表示从1970年1月1日开始的天数。
           0 有特殊意思,表示用户应该在下次登录系统时更改密码。
           空字段表示密码年龄功能被禁用。
       密码的最小年龄
           最小密码年龄是指,用户一次更改密码之后,要等多长时间才再次被允许更改密码。
           空字段或 0 表示没有最小密码年龄。
       最大密码年龄
           最大密码年龄是指,这写天之后,用户必须更改密码。
           这写天之后,密码仍然可用。用户将会在下次登录的时候被要求更改密码。
           空字段表示没有最大密码年龄,没有密码警告时间段,没有密码禁用时间段(请看下边)。
           如果最大密码年龄小于最小密码年龄,用户将会不能更改密码。
       密码警告时间段
           密码过期之前,提前警告用户的的天数(请参考上边的密码的最大年龄)。
           空字段或者 0 表示没有密码警告期。
       密码禁用期
           密码过期(查看上边的密码最大年龄)后,仍然接受此密码的天数(在此期间,用户应该在下次登录时修改密码)。
           密码到期并且过了这个宽限期之后,使用用户的当前的密码将会不能登录。用户需要联系系统管理员。
           空字段表示没有强制密码过期。
       账户过期日期
           账户过期的日期,表示从1970年1月1日开始的天数。
           注意,账户过期不同于密码过期。账户过期时,用户将不被允许登录;密码过期时,用户将不被允许使用其密码登
录。
           空字段表示账户永不过期。
           应该避免使用
           0,因为它既能理解成永不过期也能理解成在1970年1月1日过期。
       保留字段
           此字段保留作将来使用。
文件
        /etc/passwd
           用户账户信息。
       /etc/shadow
           安全用户账户信息。
      /etc/shadow-
           /etc/shadow 的备份文件。
           注意,此文件由 shadow
           工具集使用,而不是所有的用户和密码管理工具都会使用。

[[email protected] ~]# man 5 group(不演示了)
关于man手册

1、用户命令
2、系统调用
3、C库调用
4、设备文件及特殊文件
5、配置文件格式
6、游戏
7、杂项
8、管理命令及守护进程
9、Linux内核API(CentOS7以后出现)
之所以分这九个章节是应为有的命令分属不同类,查看命令具体属于man中的哪个章节需要使用命令

二,用户/组管理(重点掌握)

1,用户

1.1 创建用户未指定选项

[[email protected] ~]# useradd user01
. 未指定该用户的主组
. 未指定该用户的附加组
. 未指定用户的HOME
. 未指定用户的SHELL
. 未指定用户的UID...
[[email protected] ~]# 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:

[[email protected] ~]# id user01
uid=507(user01) gid=512(user01) groups=512(user01)

[[email protected] ~]# ls /var/spool/mail/user01
/var/spool/mail/user01

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

1.2 创建用户并指定选项

[[email protected] ~]# useradd user02 -u 1503 //创建用户usr02,指定uid
[[email protected] ~]# useradd user03 -d /aaa //创建用户user03 指定家目录
[[email protected] ~]# useradd user05 -s /sbin/nologin //创建用户并指定shell
[[email protected] ~]# useradd user07 -G hr,it,fd //创建用户,指定附加组
[[email protected] ~]# useradd user10 -u 4000 -s /sbin/nologin

1.3 删除用户

[[email protected] ~]# userdel user10
//删除用户user10,但不删除用户家目录和mail spool
[[email protected] ~]# ll -d /home/user10/
drwx------ 3 506 510 4096 09-01 21:14 /home/user10/
[[email protected] ~]# ll /var/spool/mail/user10
-rw-rw---- 1 506 mail 0 09-01 21:14 /var/spool/mail/user10

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

1.4 用户密码

方法一:root修改其他用户(alice)密码
[[email protected] ~]# passwd alice
方法二:用户(zhuzhu)登录,自己修改密码。
[[email protected] ~]$ passwd

1.5 组成员管理

注意:只针对已存在的用户      -G  组名 组名 ... 用户名
[[email protected] ~]# usermod -G hr niuniu2 //覆盖原有的附加组
[[email protected] ~]# usermod -G fd,it niuniu2
[[email protected] ~]# usermod -aG hr niuniu2 //增加新的附加组

1.6 其他选项管理

[[email protected] ~]# usermod -s /sbin/nologin niuniu2
修改登录SHELL

2,用户组

[[email protected] ~]# groupadd hr

[[email protected] ~]# groupadd net01 -g 2000
//添加组net01,并指定gid 2000

[[email protected] ~]# grep 'net01' /etc/group
//查看/etc/group中组net01信息

[[email protected] ~]# groupdel net01
//删除组net01

2.1 分类

2.1.1 基本组

随用户创建,自动创建的同名组
用户的基本组,显示在/etc/passwd

2.1.2 附加组

用于加入的其他组

2.1.3 案例

1 useradd是创建用户的命令。
2 usermod是修改用户的命令。
3 groupadd是创建组的命令。
4 -u 制定用户的UID。
5 -g 制定用户的基本组。
6 -G 制定用户的附加组。
7 /etc/passwd 可以查看的是用户的基本组。
8 /etc/group 可以查看用户的附加组。

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

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

三、创建组CCC
[[email protected] ~]# groupadd CCC
[[email protected] ~]# grep CCC /etc/group
CCC:x:7001:

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

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

三,提权(了解)

1,永久提权Switching users with su

[[email protected] ~]$ useradd u1
-bash: /usr/sbin/useradd: 权限不够
[[email protected] ~]$ su - root
password:
[[email protected] ~]# useradd u1
成功

2,临时提权Running commands as root with sudo

以root身份授权普通用户xulei
[[email protected] ~]# vim /etc/sudoers
%wheel ALL=(ALL) NOPASSWD: ALL

[[email protected] ~]# useradd xulei -G wheel
[[email protected] ~]# id xulei
uid=504(xulei) gid=504(xulei) 组=504(xulei),10(wheel)

# passwd xulei
切换用户xulei登陆

[[email protected] ~]$ useradd gougou10
-bash: /usr/sbin/useradd: 权限不够
[[email protected] ~]$ sudo useradd gougou10
[[email protected] ~]$ id gougou10
uid=505(gougou10) gid=505(gougou10) 组=505(gougou10)

四,命令概览

groupadd,groupdel

useradd,usermod,userdel

passwd,chage

五,扩展知识

1, useradd创建用户时,参照的文件...

[[email protected] ~]# vim /etc/login.defs
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

[[email protected] ~]# vim /etc/default/useradd
SHELL=/sbin/nologin

/etc/login.defs详解
        man login.defs

/etc/login.defs文件定义了与/etc/password和/etc/shadow配套的用户限制设定。这个文件是需要的,缺失并不会影响系统的使用,但是也许会产生意想不到的错误。

如果/etc/shadow文件里有相同的选项,则以/etc/shadow里的设置为准,也就是说/etc/shadow的配置优先级高于/etc/login.defs。

# *REQUIRED* required
#  Directory where mailboxes reside, _or_ name of file, relative to the
#   home directory.  If you _do_ define both, MAIL_DIR takes precedence.
#   QMAIL_DIR is for Qmail
#
#QMAIL_DIR      Maildir
MAIL_DIR        /var/spool/mail
#创建用户时,要在目录/var/spool/mail中创建一个用户mail文件
#MAIL_FILE      .mail

# Password aging controls:
#
#       PASS_MAX_DAYS   Maximum number of days a password may be used.
#       PASS_MIN_DAYS   Minimum number of days allowed between password changes.
#       PASS_MIN_LEN    Minimum acceptable password length.
#       PASS_WARN_AGE   Number of days warning given before a password expires.
#
PASS_MAX_DAYS   99999
#密码最大有效期
PASS_MIN_DAYS   0
#两次修改密码的最小间隔时间
PASS_MIN_LEN    5
#密码最小长度,对于root无效
PASS_WARN_AGE   7
#密码过期前多少天开始提示
#
# Min/max values for automatic uid selection in useradd
#创建用户时不指定UID的话自动UID的范围
UID_MIN                   500
#用户ID的最小值
UID_MAX                 60000
#用户ID的最大值
#
# Min/max values for automatic gid selection in groupadd
#自动组ID的范围
GID_MIN                   500
#组ID的最小值
GID_MAX                 60000
#组ID的最大值

#
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD    /usr/sbin/userdel_local
#当删除用户的时候执行的脚本

#
# If useradd should create home directories for users by default
# On RH systems, we do. This option is overridden with the -m flag on
# useradd command line.
#
CREATE_HOME     yes
#使用useradd的时候是够创建用户目录

# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
UMASK           077
# This enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes
#用MD5加密密码
Password aging
  Linux用户管理     
 last change 最后一次更改密码的时间
max days 最长过期天数
min days 两次修改密码的最小间隔时间
warn days 警告密码过期时间。
password expired 密码已过期
 inactive days不活跃的时期
查找修改密码策略的方法
chage -m 0 -M 90 -W 7 -I 14 username
chage -d 0 username will force a password update on next login.
chage -l username will list a username's current settings.
chage -E YYYY-MM-DD will expire an account on a specific day.

2, 生产环境手动创建用户示例

[[email protected]~]# useradd maomao100
[[email protected]~]# echo 123456 |passwd --stdin maomao100
[[email protected]~]# chage -d 0 maomao100 //强制用户在下一次登录时修改密码

3, 将多个用户加入到指定的组

[[email protected] ~]# useradd user1
[[email protected] ~]# useradd user2
[[email protected] ~]# useradd user3
[[email protected] ~]# groupadd group1
[[email protected] ~]# gpasswd -a user1 group1
正在将用户“user1”加入到“group1”组中
[[email protected] ~]# cat /etc/group
group1:x:1011:user1

4,替换某个组的成员

[[email protected] ~]# gpasswd -M user2,user3 group1
[[email protected] ~]# cat /etc/group
group1:x:1011:user2,user3

5,删除某个组的某个成员

原组中有三个用户,删除其中一个用户。
[[email protected] ~]# grep group1 /etc/group
group1:x:1011:user3,user1,user2
[[email protected] ~]# gpasswd -d user1 group1
正在将用户“user1”从“group1”组中删除
[[email protected] ~]# grep group1 /etc/group
group1:x:1011:user3,user2
[[email protected] ~]#