Linux系统用户有一个标记,为UID和GID,一般情况下UID和GID要唯一。
UID | User id | 用户的ID号 | 身份证号码 |
GID | Group id | 用户组的ID号 | 户口本号码 |
用户分类
UID
root用户
root用户<-->UID=0 反之也成立
程序/系统用户
1<=UID<=999(CentOS7之后) 1<=UID<=499(CentOS6,7)
主要用于服务和进程运行使用的用户,通常不允许直接登录(一种傀儡用户-)
普通用户
1000<=UID<=65535(CentOS7之后)
手动创建,无法对系统进行更改,只在当前家目录有权限
判断是否为虚拟用户
shell | |
/bin/sh | |
/bin/bash | 正常可以使用 |
/sbin/nologin | 虚拟用户/傀儡用户 |
GID
root用户组
GID=0
通常只有root用户属于此组
程序/系统用户组
1<=GID<=999(CentOS7之后) 1-499(CentOS6)
通常不允许普通用户加入
普通用户组
1000<=GID<=65535
例:
部门北京核心
部门研究院-教研中心-北京教学部
部门研究院-研发中心-长沙研发
部门研究院-售后VIP服务中心
部门研究院-教研中心-长沙教学部
用户管理相关文件
/etc/passwd | 存放用户信息 |
/etc/shadow | 存放密码信息 |
/etc/group | 存放用户组信息 |
/etc/gshadow | 存放用户组密码信息,一般几乎不会个用户组设置密码 |
/etc/passwd文件格式
username:password:UID:GID:GECOS:home_directory:shell
用户名:密码标记:用户ID:组ID:用户说明信息:用户家目录:用户使用命令解释器shell
现在Linux系统通常将密码存在/etc/shadow中,而在/etc/passwd文件中仅标记X或*
用户说明信息和家目录可在添加用户时指定,不指定则为空
/etc/shadow文件格式
username:password:last_change:min_age:max_age:warn_period:inactive_expire:expire_date:reserve
用户名:密码(加密):上次更改密码时间:最小密码年龄:最大密码年龄:警告期:不活跃期:账号过期日期:保留字段
/etc/shadow文件权限通常为0000,只有root用户可读写
密码加密通常采用SHA-512,SHA-256或MD5算法,如果此字段为空表示用户没有设置密码,如果为!或*代表用户无法登录
以root用户为例
20212 | 从1970年1月1日(Unix纪元元年)算起的第20212天为上次更改密码的日期 |
0 | 最小密码年龄,用户在更改密码后0天内不能再次修改密码 |
99999 | 最大密码年龄,密码有效期为99999天 |
7 | 警告期,在密码过期前7天开始警告用户 |
X | 不活跃期,密码过期后X天内用户账号将被禁用 |
Y | 账号过期日期,从1970年1月1日算起的Y天 |
/etc/group文件格式
groupname:password:GID:user_list
用户组名:密码:组ID:用户列表
用户组名默认和用户名一致
组密码通常为空或包含占位符(X或*),表明密码已加密存储在/etc/gshadow中
用户列表属于该组的用户列表,用户之间用逗号分隔
/etc/gshadow文件格式
groupname:password:admin_list:number_list
用户组名:密码:管理员列表:成员列表
用户管理命令
创建新的系统用户
命令:useradd
选项:-u 指定用户UID数值
-s 指定用户登录shell(命令解释器),默认是/bin/bash
-M 不创建用户家目录,即使/etc/login.defs(CREATE_HOME)中系统范围设置为Yes
例:useradd -u 1314 -s /sbin/nologin -M mysql 创建虚拟用户mysql指定UID和命令解释器,并且不创建家目录
创建一个新的工作组
命令:groupadd
选项:-g 指定新建工作组的id
-r 创建系统工作组,系统工作组的组ID小于500
-K 覆盖配置文件“/etc/login.defs”
-o 允许添加组ID号不唯一的工作组
例:groupadd -g 344 ck 在/etc/passwd文件中产生一个组ID(GID)是344的新组
更改用户密码
命令:passwd
选项:--stdin 非交互式设置密码(RHEL及其衍生版支持在root用户中使用,批量修改密码)
例:echo newpasswd | passwd --stdin ck 修改ck用户密码为newpasswd-只能root用户使用
删除用户及相关文件
命令:userdel
避免使用,通过注释/etc/passwd和/etc/shadow文件禁止用户
选项:-r 删除用户时,删除用户家目录和相关文件(邮箱),默认不会删除
-f 强制删除用户,即使用户当前已经登录
例:userdel -rf ck
删除指定的工作组
命令:groupdel
格式:groupdel 工作组名
本命令要修改的系统文件包括/ect/group和/ect/gshadow。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组
修改用户信息
命令:usermod
不允许改变正在线上使用者的账号名称
选项:-s 修改用户登录后所使用的shell
-L 锁定用户密码,使密码无效
-U 解除密码锁定
例:usermod -s /bin/nologin ck
更改群组识别码或名称
命令:groupmod
选项:-g <群组识别码> 设置欲使用的群组识别码
-o 重复使用群组识别码
-n <新群组名称> 设置欲使用的群组名称
查看真实有效用户和所在组的信息
命令:id
检查用户是否存在
查看当前有效的用户ID对应名称
命令:whoami
获取当前用户名称
查看当前主机所有登陆用户的名称
命令:users
格式:users 选项 参数
参数:FILE(可选) 记录用户当前登录情况的文件,默认使用 /var/run/utmp 、/var/log/wtmp
查看指定用户所在组的名称
命令:groups
格式:groups 选项 参数
该命令等价于 id -Gn;每个用户属于/etc/passwd中指定的一个组和在/etc/group中指定的其他组
参数:username(可选) 可以是一到多个,不提供时默认为当前用户
切换当前用户身份到其他用户身份
命令:su 全拼:switch user
格式:su 选项 (要切换到的)用户账号名
变更时须输入所要变更的用户帐号与密码
选项:-c<指令> 执行完指定的指令后,即恢复原来的身份
-l 改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,logname。此外,也会变更PATH变量
-m,-p preserve-environment,变更身份时,不要变更环境变量
-s<shell> 指定要执行的shell
例:su -c ls root 变更帐号为root并在执行ls指令后退出变回原使用者
管理用户主要组成员
命令:groupmems
格式:groupmems 选项 参数
允许用户管理自己组成员列表,而不需要超级用户权限。适用于将其用户配置为以他们自己的名义主组的系统。只有作为管理员的超级用户可以更改其他组的成员资格
选项:-a add user_name,将用户添加到组成员列表。如果/etc/gshadow文件存在,并且该组中没有条目,则创建一个新条目
-d delete user_name,从组成员列表中删除用户,如果/etc/gshadow文件存在,用户将从组的成员和管理员列表中删除
-g group group_name,管理员可以指定要修改的组成员列表
-l list,列出组成员列表
-p purge,从组成员列表中清除所有用户
故障案例:命令行bash-4.2$
原因:用户没有家目录,用户家目录下的配置文件~/.bashrc和~/.bash_profile没了
/etc/skel/目录拥有所有新用户的家目录的模板,创建用户时,系统会把/etc/skel/下面所有内容复制到新用户的家目录下面
解决方案:cp /etc/skel/.bash* ~
之后重新登录
故障复现:rm -rf ~/.bash*,之后重新登录 禁止在root用户下操作