Linux 入门总结(八) —— 用户和用户组管理
用户配置文件
1、用户信息文件 /etc/passwd 详解
在 Linux 中主要是通过用户配置文件来查看和修改用户信息。注意:在操作 passwd 文件的时候备份。可以使用 man 5 passwd
查看配置文件的帮助文档。
第 1 个字段:用户名称。
第 2 个字段:密码标志。x 表示这个用户是有密码的。注意 x 是不能省略的,如果省略了,则用户登录的时候,系统是不会去 shadow 文件中去搜索用户的真正密码的,它会认为这个用户压根就没有密码,可以直接登录。没有密码的登录只允许本地登录,不允许远程登录,因为 ssh 协议本身就禁止的。
第 3 个字段:UID(用户 ID)。注意:系统中默认有很多伪用户,但是这些伪用户不能删,一旦删除系统就会崩溃,因为系统有很多服务会调用这些伪用户。这些伪用户是专门用来给系统当中,启动服务、启动命令的时候来调用的。总之这些用户都是系统用户,这些用户不能登录,其次不能删除。
0: 超级用户,注意系统是通过 UID 为 0 来识别是否为超级管理员的,不是通过用户名是否为 root 识别
1-499: 系统用户(伪用户)
500-65535: 普通用户第 4 个字段:GID(用户初始组 ID)。
初始组:就是指用户一登录就立刻拥有这个用户组的相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组。初始组的特点:每一个用户都必须有且仅有一个初始组。初始组不能选,但是可以改,一旦改变,以前的初始组就会被放弃,因为只能有一个初始组存在。
附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个。第 5 个字段:用户说明。
第 6 个字段:家目录。
普通用户:/home/用户名/
超级用户:/root/第 7 个字段:登录之后的 Shell。
Shell 就是 Linux 的命令解释器。在 /etc/passwd 当中,除了标准 Shell 是 /bin/bash 之外,还可以写如 /sbin/nologin。简单来说:就是你在 Linux 中输入一个命令,eg:ll,实际上中间要通过命令解释器将 ll 命令解释成内核可以识别的符号然后传输给内核,内核再作出应答显示在命令操作窗口,这样的一个过程。对命令的解释就是 Shell 来执行的。默认即标准 Shell 是 /bin/bash,Linux 中 Shell 可以有多个,默认为 /bin/bash,理论上可以更改。
2、影子文件 /etc/shadow 详解
注意:/etc/shadow 文件的默认权限为 000,该文件很重要,保存了加密以后的用户密码。
第 1 个字段:用户名。
第 2 个字段:加密密码。注意:如果密码位是「!!」或「*」代表没有密码,不能登录。
第 3 个字段:密码最后一次修改日期。使用 1970.01.01 作为标准时间,每过一天时间戳加 1。
第 4 个字段:两次密码的修改间隔时间(和第 3 字段相比)。
第 5 个字段:密码有效期(和第 3 字段相比)。
第 6 个字段:密码修改到期前的警告天数(和第 5 字段相比)。
第 7 个字段:密码过期后的宽限天数(和第 5 字段相比)。0 代表密码过期后立即失效。-1 则表示密码永远不会失效。
第 8 个字段:账号失效时间。要用时间戳表示。不管前面怎么设置,到时间了直接密码失效。
第 9 个字段:保留。
时间戳换算方法:1
2
3
4
5
6# 把时间戳换算为日期
date -d "1970-01-01 16666 days"
# 把日期换算为时间戳
# $() 用来引用系统命令,date --date="2018/10/01" +%s 将指定日期换算成秒(以 1970.01.01 作为标准时间)
echo $(($(date --date="2018/10/01" +%s)/86400+1))
3、组信息文件 /etc/group
第 1 个字段:组名。
第 2 个字段:组密码标志。
第 3 个字段:GID。
第 4 个字段:组中附加用户。
4、组密码文件 /etc/gshadow
第 1 个字段:组名。
第 2 个字段:组密码。
第 3 个字段:组管理员用户名。
第 4 个字段:组中附加用户。
组密码的作用:只有管理员可以将用户加入到其他的用户组,但是 root 太忙了,这时候可以给组选一个管理员,给这个组设置一个密码,只要这个管理员知道密码,就可以把其他人拉到这个组里面来。或者把用户从这个组里面删掉。不推荐使用组密码,安全性差。
用户管理相关文件
1、用户的家目录
普通用户:/home/用户名/,所有者和所属组都是此用户,权限 700。
超级用户:/root,所有者和所属组都是 root 用户,权限是 550。
注意:用户的家目录是添加用户的时候自动生成的,可以在添加的时候不让它自动生成,手动创建,但是所有者、所属组以及权限都需要手动去调整。将普通用户变为超级管理员,修改 /etc/passwd 文件,将用户的 UID 改为 0,但是用户的家目录不会改变成 root,还是原来的家目录,只是它的权限是超级用户的权限了。
2、用户的邮箱
用户邮箱目录:/var/spool/mail/用户名/。注意:/var 目录是 Linux 中可变数据的保存位置。
3、用户模板目录 /etc/skel/
注意:添加一个用户会默认修改 7 个位置的文件,分别是:/etc/passwd/、/etc/shadow/、/etc/group/、/etc/gshadow/、家目录、邮箱目录、用户模板目录。模板文件 /etc/skel 里面有隐藏文件,新添加的用户,系统会默认将里面的文件拷贝到其所在的家目录下的。所以,添加一个用户实际会默认修改 6 个位置的文件,因为模板只是从其里面拷贝用的,不会修改。
用户管理命令
1、用户添加命令 useradd
1 | useradd 命令格式: |
用户默认值文件:/etc/default/useradd
用户默认值文件:/etc/login.defs
注意:密码最小长度为 5 位的那条记录已经不生效了,因为其定义的密码强度过于简单,现在采用的是 PAM 验证生效即默认最少 8 位。
2、修改用户密码 passwd
1 | passwd 命令格式: |
passwd 直接回车,表示给当前用户设置密码。 新建的用户如果没有设置密码是不能远程登录的,但是可以在本地无密码登录。普通用户修改密码只能使用 passwd,后面是不能加用户名的,只有超级用户可以。
3、修改用户信息 usermod
1 | usermod 即 user modify 修改用户的意思 |
4、修改用户密码状态 chage
注意:是 chage 不是 change,没有 n 。
1 | 命令格式: |
5、删除用户 userdel
1 | 命令格式: |
查看用户 ID:1
id 用户名
切换用户身份 su:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17命令格式:
su [选项] 用户名
选项:
- 选项只使用「-」代表连带用户的环境变量一起切换
-c 命令 仅执行一次命令,而不切换用户身份
举例:
# 切换成 root
# 命令 env 用来查看用户环境变量(环境变量就是这个用户当前所操作的环境)
# 注意:su 命令切换的时候中间的减号一定不能省略,而且减号前后都有空格
# 从普通用户切换超级用户或其他普通用户需要输入密码,从超级用户切换普通用户不需要输入密码
su - root
# 不切换成 root,但是执行 useradd 命令添加 user1 用户
# 没有切换用户,用 -c 选项表示暂时性的调用 root 身份去执行一条 root 用户才能执行的命令
su - root -c "useradd user1"
用户组管理命令
1、添加用户组1
2
3
4
5格式:
groupadd [选项] 组名
选项:
-g GID 指定组 ID
2、修改用户组1
2
3
4
5
6
7
8
9
10格式:
groupmod [选项] 组名
选项:
-g GID 修改组 ID
-n 新组名 修改组名
举例:
# 把组名 group1 修改为 group2
groupmod -n group2 group1
3、删除用户组1
2格式:
groupdel 组名
对于组的删除:如果这个组里面是某个用户的初始组,则这个组不能删。要想删除这个组首先要删除用户。如果某个组里面没有初始用户,附加用户有没有都可以删除,里面的用户会自动被清空。
4、把用户添加入组或从组中删除用户1
2
3
4
5
6
7
8
9
10格式:
gpasswd [选项] 组名
选项:
-a 用户名 把用户加入组
-d 用户名 把用户从组中删除
示例:
gpasswd -a 用户名 用户组
gpasswd -d 用户名 用户组
Linux 本地无密码登录方法:将 /etc/passwd/ 文件中对应用户的密码标志位置为空,即去掉 x。然后在本地直接输入用户名就可以登录了。