Linux基础之用户管理
一、用户标识:UID、GID
1、UID:用户的唯一id,系统识别用户也是通过uid识别,而不是通过用户名。(类似于同名同姓的人,身份证不一样)
标识解释:
- 0: 超级用户(root)
- 1-999: 系统用户(伪用户)
- 1000-60000:普通用户
注意:系统使用UID标识用户,如果将普通用户UID改为0,该用户就会成为超级用户
2、GID:用户所在组的id
注意:
- 初始组:用户一登录就会拥有这个组的相关权限,每个用过户的初始组只能有一个,一般和这个用户名相同的文件作为这个用户的初始组。
- 附加组:用户可以加入多个其他用户组,并拥有这些组的权限。
二、用户管理相关的7个文件
1、用户信息文件:/etc/passwd
注意:不是用来存密码相关信息的,不要被名字骗了。
字段含义:
- 用户名
- 密码占位符
- 用户uid
- 用户gid
- 注释性描述:默认为用户名
- 用户主目录(用户家目录):root用户:/root ;普通用户:/home/用户名
- 用户的Shell:命令解释器(人机交互系统),用户默认使用/bin/bash,设置错误会导致用户无法登录。/sbin/nologin 用户不能登录,可以使用该设置禁止用户登录。
2、用户配置文件(影子文件):/etc/shadow
注意:这才是存和密码相关信息的文件
字段解释
- 用户名
- 加密密码:前两位如果是!!或者*代表没有密码,普通用户密码前加上!可以临时禁用用户
- 密码最后一次修改日期:不是标准日期格式,而是使用1970年1月1日作为标准时间,每过一天时间戳加1。
- 密码更改间隔:0表示随时可以更改,1表示修改密码后1天后才能更改,类比n表示修改密码后n天后才能更改
- 密码有效天数:99999,超过该天数必须要修改密码
- 密码到期的提醒时间:7表示密码到期前7天内每天都会有密码即将失效提醒。
- 密码到期后临时允许用户登录时间:字段为空,表示密码到期后立即禁止用户登录,设置n天,表示密码到期后还允许该用户登录n天。
- 账户失效日期:字段为空,表示账户永久有效,时间戳转换成日期:date -d “1970-1-1 18720 days”,日期转时间戳:echo $(($(date --date=“2022/04/26” + %s)/86400+1))
- 保留字段
3、用户管理相关文件:/etc/group
字段解释
- 组名
- 组密码标识
- GID
- 组中附加用户
4、组密码管理文件:/etc/gshadow
字段解释
1、组名
2、组密码
3、组管理员用户名
4、组中附加用户
5、用户家目录
1、root用户家目录:/
2、普通用户家目录:/home/用户名
6、用户邮箱:/var/spool/mail/用户名
创建用户的时候会默认创建一个邮箱
7、用户的模板目录:/etc/skel
类似于群公告,创建一个新用户的时候,skel中的文件会复制到新用户的家目录下面,比如放一个说明文档放到里面,每个用户在注册后就会收到通知。
三、用户管理命令
1、创建用户:useradd [选项] 用户名
选项:
- -u:手工指定用户UID号
- -d:手工指定用户家目录
- -c:手工指定用户的说明
- -g:手工指定用过户的初始组
- -G:手工指定用户的夫家族
- -s:手工指定用户登录的shell,默认为/bin/bash
举个栗子:
创建UID为6666,家目录在/root/test/userhome(此目录不能提前创建,在创建用户的时候会创建,不需要自己创),说明为test,初始组为0,附加组为1001(1001这个组要有,这里我的1001为ChenMing),用户名为user1的用户
补充:
创建用户缺省设置的配置文件1:/etc/default/useradd
创建用户缺省设置的配置文件2:/etc/login.defs
2、创建用户密码:passwd [选项] 用户名
选项:
- -S: 查看密码状态
- -l :锁定用户
- -u:解锁用户
- –stdin:可以用过管道符输出的数据作为用户的密码
举个栗子
注意:
- root用户可以为所有用户修改密码,无需遵循密码规则。
- 普通用户只能修改自己密码,密码必须遵循密码规则,否则报错。
密码规则:
- 不能基于字典单词
- 密码不能少于8个字符
- 新密码包括旧密码
- 与旧密码过于相似
- 等等
举个栗子:
3、修改用户信息:usermod [选项] 用户名
选项:
- -u: 修改用户UID
- -c: 修改用户说明
- -g: 修改用户的初始组
- -G: 修改用户的附加组:usermod -G [组名] [用户名]
- -L:零时锁定用户
- -U:解锁用户
4、修改密码状态:chage [选项] 用户名
选项:
- -l:列出用户的详细密码状态
- -d:修改密码状态最后一次更改日期(shadow字段3)
- -m:修改两次密码的间隔时间(shadow字段4)
- -M:修改密码的有效期(shadow字段5)
- -W:修改密码过期前的警告天数(shadow字段6)
- -I(大写i):修改密码过期后的宽限天数(shadow字段7)
- -E:账号失效时间(shadow字段8)
常用功能:chage -d 0 用户名:强制用户登录后修改密码
5、删除用户:userdel [选项] 组名
选项:-r:删除用户的同时删除用户的配置文件(家目录、邮箱等)
注意:如果不加上-r,删除的用户的家目录、邮箱文件就会成为垃圾文件,如果删除用户的时候忘了加上-r,删除家目录(/home)中的用户家目录和邮件文件(/var/spool/mail/)中的该用户右键目录,再重新创建该用户,然后再加上-r删除该用户即可。
6、切换用户:su [选项] 用户名
选项:
- -:切换用户的时候,用户环境也切换过来。
- -c:不切换用户,仅使用另一用户的权限,去执行一次命令。
举个栗子:
使用普通用户创建用户是没有权限的,这时候user1使用root权限去创建user2,就要加上-c,但是是需要输入root密码的。
扩展:sudo
背景:不是所有用户是知道管理员密码的,所以这时候可以使用sudo
步骤
方法1、让管理员在/etc/sudoers文件下101行加上该用户,允许切换所有身份,并且允许使用所有命令。
方法2、让管理员把107行的注释删除,允许wheel组下面的所有用户使用所有命令。
举个栗子:
使用方法1、在没有获取权限之前,user1是没有办法创建用户的,然后管理员在/etc/sudoers文件下给user1权限,此时用户创建user3还是失败的,必须加上sudo命令,然后旧可以创建用户了
使用方法2、
7、组的创建:groupadd [选项] 组名
选项:-g + GID :指定组ID
举个栗子
7、组的修改:groupmod [选项] 组名
选项:
- -g + GID + 组名
- -n + 新组名 + 原本组名
举个栗子
就修改上面的新建的组
1、修改GID
2、修改组名
8、组的删除:groupdel + 组名
9、用户加入组及从组中删除用户:gpasswd [选项] 用户 组名
选项
- -a :把用户加入组
- -d :把用户从组中删除