管理Linux服务器的用户和组
一、用户和组群
1、基本概念
- 用户名:标识用户的名称,可以是字母、数字组成的字符串,区分大小写
- 密码:验证用户身份的特殊验证码
- 用户标识(UID):用户的数字标识符
- 用户主目录:用户的私人目录,也是用户登录系统后默认所在的目录
- 登录shell:用户登录后默认使用的shell程序,默认为/bin/bash
- 组群:具有相同属性的用户属于同一个组群
- 组群标识(GID):组群的数字标识符
2、用户
- 管理员(root)UID为0:系统的管理员用户。(Linux 系统的管理员之所以是 root,并不是因为它的名字叫 root,而是因为该用户的身份号码即UID的数值为 0)。
- 系统用户UID为1~999: Linux 系统为了避免因某个服务程序出现漏洞而被黑客提 权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。(权限最小,不能登录)。
- 普通用户 UID从1000 开始:是由管理员创建的用于日常工作的用户。
PS:在 Linux 系统中,UID 就相当于我们的身份证号码一样具有唯一性,因此可通过用户的 UID 值来判断用户身份。UID是不能冲突,管理员创建的普通用户的 UID 默认是从1000开始的(即使前面有闲置的号码)。
3、组群
- 方便管理员的管理和用户工作的方便。
- 具有相同特性的用户的逻辑集合。
- 将权限赋予某个组群,组群中的成员即可自动获得此权限。
- 在 Linux 系统中创建每个用户时,将自动创建一个与其同名的基本用户组,而且这个基本用户组只有该用户一个人。(组群的GID默认也是用1000开始编号)
- 如果该用户以后被归纳入其他用户组,则这个其他用户 组称之为扩展用户组。
PS:一个用户只有一个基本用户组,但是可以有多个扩展用户组。
二、用户和组群的文件
1、用户账户文件
①、/etc/passwd文件:存放用户账号极其相关信息(密码除外)
- 用户对passwd文件均有读取权限
- passwd文件的每一行用“ : ”分隔为7个域
——————————————————————————————————
用户名 : 加密口令 : UID : GID : 用户的描述信息 : 主目录 : 命令解释器(shell)
——————————————————————————————————
(第一用户为root,后面则是系统用户)
(系统管理员创建的普通用户)
字段 | 说明 |
---|---|
用户名 | 用户账号名称 |
加密口令 | 用户口令,考虑系统的安全性,不使用该字段保存口令,而用字母“x”来填充改字段,真正的密码保存在/etc/shadow文件中 |
UID | 用户号,唯一表示某用户的数字标识 |
GID | 用户所属的私有组号 |
用户描述信息 | 可选的关于用户全名、用户电话等描述性目录 |
主目录 | 用户的宿主目录,用户成功登录后的默认目录 |
命令解释器 | 用户所使用的shell,默认为“ /bin/bash ” |
②、/etc/shadow文件:存放用户经过加密之后的口令
-
shadow文件只对root用户可读
-
shadow文件用“ : ”分隔为9个域
字段 | 说明 |
---|---|
1 | 用户登陆名 |
2 | 加密后的用户口令,*表示非登录用户,!!表示没有设置密码 |
3 | 从1970年1月1日起,到用户最近一次口令被修改的天数 |
4 | 从1970年1月1日起 ,到用户可以更改密码的天数,即最短口令存活期 |
5 | 从1970年1月1日起,到用户可以更改密码的天数,即最长口令存活期 |
6 | 口令过期前几天提醒用户更改口令 |
7 | 口令过期后几天账户被禁用 |
8 | 口令被禁用的具体日期(相对日期,从1970年1月1日至禁用时的天数) |
9 | 保留域,用于功能扩展 |
③、/etc/login.defs文件:建立用户账户时会根据此文件的配置设置用户账户的某些选项
MAIL_DIR /var/spool/mail | //用户邮箱目录 |
MAIL_FILE .mail | |
PASS_MAX_DAYS 99999 | //可以使用密码的最大天数。 |
PASS_MIN_DAYS 0 | //密码更改之间允许的最小天数。 |
PASS_MIN_LEN 5 | //可接受的最小密码长度。 |
PASS_WARN_AGE 7 | //密码过期前发出警告的天数。 |
UID_MIN 1000 | //用useradd命令创建用户时自动产生的最小UID值 |
UID_MAX 60000 | //用useradd命令创建用户时自动产生的最大UID值 |
GID_MIN 1000 | //用groupadd命令创建用户时自动产生的最小GID值 |
GID_MAX 60000 | //用groupadd命令创建用户时自动产生的最大GID值 |
USERDEL_CMD /usr/sbin/userdel_local | //如果定义的话,将在删除用户时执行,以删除相应用户的计划作业和打印作业等 |
CREATE_HOME yes | //创建用户账户时是否为用户创建主目录 |
2、组群文件
①、/etc/group文件:存放用户的组账户信息
- 该文件的内容任何用户都可读取
- 每个组群账户在group文件中占一行,用“ : ”分隔为4个域
——————————————————————————————
组群名称 : 组群口令(一般为空,用x占位): GID : 组群成员列表
——————————————————————————————
- 族群成员列表中如果有多个用户账户属于同一个组群,各成员之间用“ , ”隔开
(root的GID为0,没有其他组成员)
②、/etc/gshadow文件:存放组群的加密口令、组管理员等信息
- 该文件只有root用户可以读取
- 每个组群账户在该文件占用一行,用“ : ”分隔为4个域
——————————————————————————————————
族群名称 : 加密后的组群口令(没有就用 ! ): 组群的管理员 : 组群成员列表
——————————————————————————————————
一、useradd 命令 ——创建新的用户
-
useradd [选项] 用户名
-
默认的用户家目录会被存放在 /home 目录中
-
默认的shell解释器为 /bin/bash
-
默认创建一个与该用户同名的基本用户组
PS:默认设置可以根据命令参数自行修改
参数 | 作用 |
---|---|
-D | 改变新建用户的预设值 |
-c | 添加备注文字 |
-d | 新用户每次登陆时所使用的家目录 |
-e | 用户终止日期,日期的格式为YYYY-MM-DD |
-f | 用户过期几日后永久停权。当值为0时用户立即被停权,而值为-1时则关闭此功能,预设值为-1 |
-g | 指定用户对应的用户组 |
-G | 定义此用户为多个不同组的成员 |
-m | 用户目录不存在时则自动创建 |
-M | 不建立用户家目录,优先于/etc/login.defs文件设定 |
-n | 取消建立以用户名称为名的群组 |
-r | 建立系统帐号 |
-u | 指定用户id |
-s | 指定该用户的默认shell解释器 |
实例:
①、不创建家目录,并且禁止登陆:
useradd -M -s /sbin/nologin linux
- 1
PS:用户的解释器被设置为nologin,则代表该用户不能登录到系统中
②、添加新用户user1,指定UID为888,指定归属用户组为root,user1成员,其shell类型为/bin/sh:
useradd -u 888 -s /bin/sh -G root,user1 user1
- 1
二、userdel命令 ——删除用户
- userdel [选项] 用户名
- 在执行删除操作时,该用户的家目录默认会保留下来,可以使用-r参数
- 要删除一个账户,也可以直接删除/etc/passwd和/etcc/shadow文件中要删除的用户所对应的行
参数 | 作用 |
---|---|
-f | 强制删除用户账号 |
-r | 删除用户主目录及其中的任何文件 |
三、usermod命令——修改用户属性
- usermod [选项] 用户名
- Linux 系统中的一切都是文件,因此在系统中创建用户也就是修改配置 文件的过程
- 用户的信息保存在/etc/passwd 文件中,可以直接用文本编辑器来修改其中的用 户参数项目
- 将用户user1加入到root用户组中,这样扩展组列表中会出现root用户组的字样,而基本组不会受到影响
-c<备注> | 修改用户账号的备注文字 |
-d<登入目录> | 修改用户登入时的目录 |
-e<有效期限> | 修改账号的有效期限 |
-f<缓冲天数> | 修改在密码过期后多少天即关闭该账号 |
-g<群组> | 修改用户所属的群组 |
-G<群组> | 修改用户所属的附加群组 |
-l<账号名称> | 修改用户账号名称 |
-L | 锁定用户密码,使密码无效 |
-s | 修改用户登入后所使用的shell |
-u | 修改用户ID |
-U | 解除密码锁定 |
四、groupadd命令——创建一个新的工作组
- groupadd [选项] 群组名
- 新工作组的信息将被添加到系统文件中。
-g | 指定新建工作组的id |
-r | 创建系统工作组,系统工作组的组ID小于500 |
-K | 覆盖配置文件“/ect/login.defs” |
-o | 允许添加组ID号不唯一的工作组 |
五、groupdel命令——删除指定的工作组
- groupdel [选项] 群组名
- 删除的组群是某个用户的主组群,则不能被删除
六、groupmod命令——更改群组识别码或名称
- groupmod [选项] 群组名
-g | 设置欲使用的群组识别码 |
-o | 重复使用群组识别码 |
-n | 设置欲使用的群组名称 |
七、passwd命令——修改用户密码、过期时间、认证信息等
- passwd [选项] 用户名
- 普通用户只能使用 passwd 命令修改自身的系统密码,而 root 管理员则有权限修改其他所有人的密码
- root 管理员在 Linux 系统中修改自己或他人的密码时不需要验证旧密码
- root 管理员可以修改其他用户的密码,就表示完全拥有该用户的管理权限
修改其他人密码时,需要具有root管理员权限
-d | 删除密码 |
-l | 锁定用户密码,无法被用户自行修改 |
-u | 解开已锁定用户密码,允许用户自行修改 |
-e | 密码立即过期,下次登陆强制修改密码 |
-k | 保留即将过期的用户在期满后能仍能使用 |
-S | 查询密码状态 |
八、chage命令——修改帐号和密码的有效期限
- chage [选项] 用户名
-M | 密码保持有效的最大天数 |
-W | 用户密码到期前,提前收到警告信息的天数 |
-E | 帐号到期的日期,会禁止此帐号 |
-d | 上一次更改的日期 |
-l | 例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。 |
九、禁用和恢复用户账户
1、使用passwd命令
passwd -l user1
passwd -u user1
2、使用usermod命令
usermod -L user1
usermod -U user1
3、直接修改用户账户配置文件
可以将/etc/passwd文件或/etc/shadow文件中关于user1账户的passwd域的第一个字符前面加上一个“ * ”,达到禁用账户的目的,在需要恢复的时候删除字符“ * ”即可。