linux用户和组

1.用户配置文件说明

1-1 /etc/passwd文件

字段 说明 备注
字段1 用户名
字段2 密码位 x表示标识有密码
字段3 UID 0: 超级管理员
1-449: 系统用户(伪用户)
500-65535: 普通用户
如果把普通用户uid变为0,那么它就相当于管理员了
字段4 GID
字段5 用户说明
字段6 家目录 root: /root 其他用户: /home/xxx
字段7 默认shell目录 默认/bin/bsh,如果改为/bin/bashasd那么用户将无法登陆
cat /etc/passwd

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
...

1-2 影子文件/etc/shadow文件

这个文件的权限是000,只有root可以操作

字段 说明 备注
字段1 用户名
字段2 密码位 *!!表示没有密码,不能登录
字段3 最后修改密码日期 1970-1-1作为表中,1970-1-1表示19363天后
字段4 两次密码修改的间隔时间 和第三字段做比较
字段5 密码有效期 默认99999天,改为30表示用户没一个月就要改一次密码
字段6 密码修改到期前的警告天数 7天
字段7 密码到期之后的宽限时间 5表示延迟5天,0表示立即失效,-1表示永远不会失效
字段8 账号失效时间 时间戳(天数)表示到了这个时间就失效,不管字段5是多少
字段9 保留字段
# 天数换转时间
date -d "1970-01-01 19363 day"

# 时间换转天数
echo $(($(date --date="2023/01/06" +%s)/86400+1))
cat /etc/shadow

root:asdad12eqweqweqeqqweqweqeqq.Cu/:19361:0:99999:7:::
bin:*:18353:0:99999:7:::
daemon:*:18353:0:99999:7:::
adm:*:18353:0:99999:7:::
...

1-3 组信息文件/etc/group

字段 说明 备注
字段1 组名
字段2 组密码
字段3 GID
字段4 组中附加的用户 不能看到初始用户,可以看到附加用户
cat /etc/group

root:x:0:
bin:x:1:
daemon:x:2:
...

1-4 组密码文件夹/etc/gshadow

字段 说明 备注
字段1 组名
字段2 组密码
字段3 组管理员用户名
字段4 组中附加的用户
cat /etc/gshadow

root:::
bin:::
daemon:::
...

2.用户管理相关文件

2-1 用户目录

root在/root,其他都在/home/[user_name]

# 开头表示超级用户,$开头表示普通用户

# 超级用户
[root@xxxx ssh]# 

# 普通用户
[lxd@xxxx ~]$ 

2-2 用户的邮箱

/var/spool/mail/用户名

2-3 用户模板

初始用户家目录下的文件都是用这个/etc/skel下的模板

ls -a /etc/skel
.bash_logout  .bash_profile  .bashrc

3.用户管理命令

3-1 添加用户useradd

useradd test1命令之后,会更新和创建信息/ect/passwd/ect/shadow/ect/group/ect/gshadow/var/spool/mail/test1/home/test1

3-1-1 用户默认值文件说明

3-1-1-1 /etc/default/useradd

/etc/default/useradd文件是在使用useradd添加用户时的一个需要调用的一个默认的配置文件

# useradd defaults file
GROUP=100							# 用户默认组
HOME=/home						# 用户家目录
INACTIVE=-1						# 密码过期宽限天数(shadow字段7)
EXPIRE=								# 密码失效时间(shadow字段8)
SHELL=/bin/bash				# 默认shell
SKEL=/etc/skel				# 模板目录
CREATE_MAIL_SPOOL=yes	# 是否建立邮箱
3-1-1-2 /etc/login.defs

/etc/login.defs文件用于在创建用户时,对用户的一些基本属性做默认设置,例如指定用户 UID 和 GID 的范围,用户的过期时间,密码的最大长度,等等。

MAIL_DIR /var/spool/mail 	#	创建用户时,系统会在目录 /var/spool/mail 中创建一个用户邮箱
PASS_MAX_DAYS 99999				# 密码有效期,99999 是自1970-1-1起密码有效的天数,相当于273年,可理解为密码始终有效。
PASS_MIN_DAYS 0						# 表示自上次修改密码以来,最少隔多少天后用户才能再次修改密码,默认值是 0。
PASS_MIN_LEN 5						# 指定密码的最小长度,默认不小于5位,但是现在用户登录时验证已经被PAM模块取代,所以这个选项并不生效。
PASS_WARN_AGE 7						# 指定在密码到期前多少天,系统就开始通过用户密码即将到期,默认为7天。
UID_MIN 500 							# 指定最小UID为500,也就是说,添加用户时,默认UID从500开始。注意,如果手工指定了一个用户的UID是 550,那么下一个创建的用户的UID就会从551开始,哪怕500~549之间的UID没有使用。
UID_MAX 60000							# 指定用户最大的UID为60000。
GID_MIN 500								# 指定最小GID为500,也就是在添加组时,组的GID从500开始。
GID_MAX 60000							# 用GID最大为60000。
CREATE_HOME yes						# 指定在创建用户时,是否同时创建用户主目录,yes表示创建,no则不创建,默认是yes。
UMASK 077									# 用户主目录的权限默认设置为077。
USERGROUPS_ENAB yes				# 删除用户的时候是否同时删除用户组(删除用户的初始组),默认值为yes。
ENCRYPT_METHOD SHA512			# 加密模式,默认采用SHA512,原先使用DES或MD5加密。

3-1-2 命令选项

useradd [选择] 用户名
  -u 指定uid号
  -u 指定用户家目录,默认(/home/用户名)下
  -c 用户说明信息
  -g 指定用户的初始组
  -G 指定用户的附加组
  -s 指定shell,默认/bin/bash

3-2 修改用户密码passwd

超级用户可以改所有用户密码,普通用户只能改自己的密码passwd后直接回车

3-2-1 命令选项

# 超级用户(可以设置很简单的密码)
passwd [选项] 用户名
  -S	查询用户密码状态(仅root可用)
  -l	暂时锁定用户,用户不能登录(仅root可用)
  -u	解锁用户(仅root可用)
  --stdin	可以通过管道符输出数据作为用户的密码
  
# 普通用户(不需要更用户名,需要设置复杂的密码)
passwd

3-2-2 查询密码状态

passwd -S lxd
lxd PS 2023-01-06 0 99999 7 -1 (Password set, SHA512 crypt.)
密码设定时间(2023-01-06)
密码修改间隔(0)
密码有效期(99999)
密码过期时间(-1)
# shadow内容
lxd:密码加密内容:19363:0:99999:7:::

3-2-3 锁定/解锁用户

原理就是把shadow文件的密码前加入了!!

# 加锁
passwd -l lxd
Locking password for user lxd.
passwd: Success
  # shadow内容
  lxd:!!密码加密内容:19363:0:99999:7:::

# 解锁
passwd -u lxd
Unlocking password for user lxd.
passwd: Success
	# shadow内容
  lxd:密码加密内容:19363:0:99999:7:::

3-2-4 输出密码

批量生成用户

echo "123" | passwd --stdin test

3-3 修改用户信息usermod

usermod是修改已存在的用户,useradd 设定新用户

锁定解锁,原理就是把shadow文件的密码前加入了!

usermod [选项] 用户名
  -u 修改用户UID
  -c 修改用户说明
  -G 修改用户附加组
  -L 锁定用户
  -U 解锁用户

3-4 修改用户密码状态chage

直接使用vim修改shadow文件是一样的效果

change [选项] 用户名
  -l 列出用户的信息密码状态
  -d 修改密码最后一次更改日期(字段3)
  -m 两次密码修改间隔(字段4)
  -M Miami有效期(字段5)
  -W 密码过期警告天数(字段6)
  -I 密码过期宽限天数(字段7)
  -E 账号失效时间(字段8)
chage -l lxd
Last password change                                    : Jan 06, 2023
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7
chage -d 0 lxd
# 这个命令把密码修改日期归0了。(字段3)
# 这样用户一登录就要求修改密码(适用于批量创建用户的时候)

ssh lxd@192.168.0.2
lxd@192.168.0.2's password: 初始密码
You are required to change your password immediately (root enforced)
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user lxd.
Changing password for lxd.
(current) UNIX password: 初始密码
New password: 新密码(密码中不能带账号)
Retype new password: 新密码
passwd: all authentication tokens updated successfully.
Connection to 192.168.0.2 closed.

3-5 删除用户userdel

原理是userdel -r test1命令之后,会删除/ect/passwd/ect/shadow/ect/group/ect/gshadow文件中内容和删除/var/spool/mail/test1/home/test1目录

userdel [选项] 用户名
	-r 删除用户的同时删除用户家目录

3-6查询用户id

能看到uid(用户ID)、gid(初始组ID), groups是用户所在组,这里既可以看到初始组,如果有附加组,则也能看到附加组

id lxd
uid=1000(lxd) gid=1000(lxd) groups=1000(lxd)

3-7 用户切换su

su [选项] 用户名
  -		代表连带用户的环境变量一起切换
  -c	仅切换用户执行一次命令,执行后自动切换回来,该选项后通常会带有要执行的命令。

3-7-1 不加-切换用户的错误方法

- 选项,切换用户身份更彻底;反之,只切换了一部分,这会导致某些命令运行出现问题或错误(例如无法使用 service 命令)

[lxd@xxx ~]$ su root
Password: 输入root密码
[root@xxx lxd]# env
XDG_SESSION_ID=691
HOSTNAME=xxx
SHELL=/bin/bash
HISTSIZE=1000
USER=lxd
MAIL=/var/spool/mail/lxd
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/lxd/.local/bin:/home/lxd/bin
PWD=/home/lxd

3-7-2 需要加-切换

[lxd@xxx ~]$ su - root
Password: 输入root密码
[root@xxx ~]# env
XDG_SESSION_ID=691
HOSTNAME=xxx
SHELL=/bin/bash
HISTSIZE=1000
USER=root
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root

3-7-3 -c使用

使用root身份操作命令,但是不切换用户身份

[lxd@xxx ~]$ su - root -c "whoami"
Password: root密码
root

3-8 查看登录用户信息who

执行权限:所有用户

root执行 ps -ef|grep pts 找到 使用虚拟终端的进程

[lxd@xxx ~]$ who
# 登录用户名  登录终端 登录时间  登录的主机的IP地址(未写则表示本机登录,即虚拟机登录)
# tty表示本地终端,pts表示远程终端
root     pts/0        2023-01-06 13:20 (192.168.0.1)
lxd      pts/1        2023-01-06 14:03 (192.168.0.1)
lxd      pts/2        2023-01-06 16:07 (192.168.0.1)

3-9 查看登录用户详细信息w

执行权限:所有用户

root执行 ps -ef|grep pts 找到 使用虚拟终端的进程

[root@xxx ~]# w
 16:36:37 up 2 days, 2 min,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM          LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.0.1   13:20    5.00s  0.10s  0.00s w
lxd      pts/1    192.168.0.1   14:03    1:47m  0.01s  0.01s -bash

4.用户组管理命令

4-1 添加用户组groupadd

groupadd [选项] 组名
	-g 指定GID

4-2 修改用户组groupmod

groupmod [选项] 组名
  -g 修改GID
  -n 修改组名

# -n用法
# 修改前
test1:x:1001:
[root@xxx ~]# groupmod -n ttt test1
# 修改后
ttt:x:1001:

4-3 删除用户组groupdel

如果这个组有初始用户,那么需要删除这个用户才可以删除这个用户组

groupdel 组名

4-4 把用户加入/删除组

原理是操作了/etc/group文件,添加的是附加组

gpasswd [选项] 组名
  -a 用户名	把用户添加到组里
  -d 用户名	把用户从组里删除
posted @ 2023-01-06 17:15  lxd670  阅读(25)  评论(0编辑  收藏  举报