一、用户相关文件
/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
wangermazi:x:1004:1004::/home/wangermazi:/bin/bash
第一列:用户名
第二类:密码占位符(所有用户的密码都存放在/etc/shadow中,且为加密后后的密码,且此文件智能root查看)
很多程序的运行都和权限与UID/GID有关。因此各程序要读取/etc/passwd来了解不同账号的
权限。
但是如果如果取消密码占位符。就可以实现本地免密码登录(第二列如果为空则不能进行远
程登录)。
第三列:用户ID(UID)
在用户ID中0是超级用户的ID,只要UID是0就是超级用户。
在用户ID中1-999是系统用户的范围,作用是系统服务或命令在运行时会对这些账号进行调用。通常系统账号分为两种:1-200为系统自行创建的系统账号UID。201-999为保留给服务使用的账号UID(nfsnobody是个例外,默认安装后的uid为65534。是NFS服务的匿名访问用户的本地用户UID)
在用户ID中1000-65535是普通用户使用,当创建一个新用户时UID从1000开始,最大到60000。2.6.x内核(uname -r查看内核版本)以后的Linux系统UID可以支持2^32的UID了
(修改最大UID范围/etc/login.defs)。
第四列:用户初始组ID(GID)
为更加灵活的管理用户的权限,Linux里还采用用户组的概念。
有效用户组与初始用户组:
在/etc/passwd里边第四列是GID。这个GID就是初始用户组。
创建用户时如果不指定用户的初始组,则会自动创建和用户名相同的组,初始组只能有一个
也就是说用户登陆系统,立刻就拥有这个用户组的相关权限。
有效组是后续添加的组,每个用户可以属于多个有效组,用groups命令来查看当前的初始组和有效组。newgrp 组名 的格式用来切换当前的有效组。
第五列:用户描述信息(类似于“注释”,现在已经不常用)。
第六列:用户家目录
第七列:用户的shell类型
用户会取得一个shell与系统的内核通信以进行用户的操作任务。
/bin/bash:shell类型为bash,bash shell是最常用的一种shell(能正常登陆系统)。
/sbin/nologin:不能登陆系统,可以使用系统资源。
/etc/shadow:用户密码文件,此文件对应/etc/passwd中第二列的x密码占位符
第一列:用户名。
第二列:经过加密编码的密码,开头的表明是使用SHA-512加密。
如果密码位是“!!”或“”代表没有密码,不能登录(我们也可以在第二列用户的密码前面加入一个“!”或“”,加入后都不能登录)(新建用户时,如果不设置密码,那么第二列为“!!”)
第三列:密码最近更改时间
此段记录了改动密码的日期,日期是由1970年1月1日作为标准时间来计算的。
时间戳转日期:
[root@localhost yum.repos.d]# date -d "1970-01-01 19303 days"
2022年 11月 07日 星期一 00:00:00 CST
日期转时间戳
[root@localhost yum.repos.d]# echo $(($(date --date="2022-11-07" +%s)/86400+1))
19303
第四列:密码修改得间隔天数(与第三列相比)
第四列记录了这个账号的密码在最近一次修改过之后需要经过几天才可以再次修改。
如果是0的话,表示密码随时可以被修改。
如果设置为5的话,那么当你设置过密码后,需要等5天之后才能更改密码。
第五列:密码最长有效期(与第三列相比)
为了强制用户更改密码,这个字段可以指定密码的最长有效期。
用户必须在有效期内重设密码才行。
必须在期限时间内重设密码,否则这个账号的密码会变为过期特性。
而默认的99999(273年)表示为 近似永久。
第六列:密码到期前的警告天数(与第五字段相比)
当账号的密码有效期快到的时候,系统会依据这个字段的设置发出“警告”给这个账号,提醒他过N天后你的密码即将过期。
第七列:密码过期后的宽限天数(密码失效日,与第五字段相比)
密码过期后预留几天给账户修改密码,此时已无法使用旧密码登陆系统。
如果写入0,那么代表密码过去就马上失效。
如果写入5,那么代表密码会在5天后失效。
如果写入-1,那么代表密码永远不会失效。
第八列:账号失效日期
这里同样要写时间戳,用1970年1月1日进行时间换算,如果超过了失效时间,用户也就失效无法使用了。
第九列:保留。
/etc/group:组信息文件,用户组是具有相同特征用户的逻辑集合。
第一列:用户组名称(默认组成员)。
第二列:组密码占位符。
第三列:组ID号(GID)
第四列:组内成员列表
所以把用户添加到组内的方式有两种,一种临时,一种永久.
临时:root用户设置组密码,把密码告知即将加入组的用户。用户使用组密码,通过
newgrp命令切换到组内。但这种方式在重新登录之后,就会失效。
永久:写入/etc/group的方式。使用root用户给组添加管理员(gpasswd -A 管理员 组名)然后使用组管理员用户,将用户添加到组内(gpasswd -a 用户名 组名)。这种添加后,会在/etc/group信息中最后一列进行记录。重新登录不会失效。并且在添加之后,用户切换的时候不用输入密码。
有效用户组与初始用户组:在/etc/passwd里边第四列是GID。这个GID就是初始用户组。也就是说用户登陆系统,立刻就拥有这个用户组的相关权限。因为是初始组,使用者一登录就会被主动取得组相关权限。不需在/etc/group的第四列写入。有效组是后续添加的组。用groups命令来查看当前的初始组和有效组。newgrp 组名 的格式用来切换当前的有效
组。
/etc/gshadow:组密码文件
第一列:用户组
第二列:用户组密码,这个段可以为空或!,如果是空或!表示没有密码。
第三列:用户组管理者,这个字段也可以为空,如果有多个用户组管理者,用,分隔。
第四列:组成员,如果有多个成员,用,分隔。
通过gpasswd 组名的方式来为组设置密码(需要root用户设置)。组密码的作用:非本用户组的用户想要切换到本用户组身份时,可以通过密码来确保安全。输入密码正确,直接添加至该组。如果没有设置组密码,则只有属于本用户组的用户能够切换到本用户组的身份。
通过gpasswd -A 账户名 组名 来为组添加管理员(拥有添加或移除组员的权限,只有root有权限添加管理员,即使是默认初始组,也没有组管理员权限)。
通过gpasswd -a/-d 用户名 组名 来添加/移除组成员
/etc/login.defs:用来定义创建一个用户时的默认设置,比如指定用户的UID和GID范围,用户过期时间,是否需要创建用户主目录等。
1.当用户创建时,同时在目录/var/spool/mail中创建一个用户mail文件
2.指定密码保持有效最大天数。
3.表示修改密码的间隔时间。
4.指定密码的最小长度。
5.表示密码到期前多少天系统提示用户密码到期。
6.指定UID最小为1000,也就是说创建新用户时用户的UID从1000开始。
7.指定最大UID为60000。
系统用户最小201
系统用户最大999
8.最小GID为1000。
9.最大GID为60000。
系统组ID最小201
系统组ID最大999
10.指定是否创建用户家目录,yes为创建,no表示不创建。
11.创建用户时默认创建用户家目录。
12.权限默认掩码值。
13.表示userdel删除用户时,如果该用户组没有成员存在,则会删除用户组。
14.使用SHA512加密方式。
/etc/default/useradd:创建用户时使用的默认文件
1.新创建用户时默认初始组的GID号(公共组),现在使用的都是私有组机制(根据创建用户名称创建组)
2./home表示用户家目录的位置
3.表示是否启用账号过期禁用,-1表示不启用。
4.表示账号过期时间,不设置表示不启用。
5.指定了新建用户的默认shell类型。
6.指定用户家目录中默认文件的来源,新建用户家目录下的文件都是从这个目录中复制的。
7.表示是否创建邮箱缓存 yes表示创建
/etc/skel/:新用户家目录模板文件存放位置
[root@localhost skel]# ls -a
. .. .bash_logout .bash_profile .bashrc
在创建新用户后,会在新用户家目录下看到类似.bash_profile .bashrc .bash_logout等文件。/etc/skel 目录定义了新建用户在主目录下默认的配置文件,更改/etc/skel目录下的内容就可以改变新建用户默认主目录的配置文件信息。
二、用户管理命令
useradd 添加用户 (添加完用户之后一定要设置密码passwd,否则是不允许登录的)
选项:
-u 指定用户uid
-g 组名 指定初始组 不要指定
-G 指定附加组,把用户加入组。使用附加组
-d 指定用户家目录,目录不需要事先建立(ftp虚拟用户使用)
-s 指定shell类型。/bin/bash 或者/sbin/nologin
-c 用户说明
passwd 修改密码
选项:
-l 锁定用户(用户不能登陆)
-u 解锁用户
--stdin (非交互式修改密码)
[root@localhost ~]# echo "111" | passwd --stdin lml
更改用户 lml 的密码 。
passwd:所有的身份验证令牌已经成功更新。
有时候我们需要用户登陆后自动修改密码,可以使用下面的命令
[root@localhost ~]# chage -d 0 lml
# 执行这条命令后,实际上修改的就是用户密码文件的第三列。当用户再次登录时会让其强制修改密码。
You must change your password now and login again!
更改用户 lml 的密码 。
为 lml 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
无效的密码: 密码少于 8 个字符
新的 密码:
无效的密码: 密码少于 8 个字符
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
usermod 修改用户信息
跟useradd不同的是修改的是现有用户的信息
选项:
-u 修改用户uid
-g 组名 修改初始组 ,修改的是用户信息的文件的第五个字段
-G 修改附加组,修改的是用户信息文件的第四个字段
-d 修改用户家目录,必须是绝对路径
-s 修改shell类型。/bin/bash 或者/sbin/nologin
-c 修改用户说明
-e 修改用户失效时间,修改的是/etc/shadow文件的第八个字段/格式为“YYYY-MM-DD”
-l 临时锁定用户
-u 解锁用户
删除用户
userdel [选项] 用户名
选项:
-r 删除用户同时删除家目录
身份切换
命令:su
选项:
- 只使用“-”代表连环境变量一起切换(不能省略)
-c 仅执行一次命令,而不切换用户身份
列:
[lml@localhost ~]$ su root
密码:
[root@localhost lml]# whoami
root
[root@localhost lml]# env #系统环境变量
XDG_SESSION_ID=22
HOSTNAME=localhost.localdomain
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
SSH_CLIENT=192.168.15.1 60716 22
SSH_TTY=/dev/pts/1
USER=lml #注意此时身份还是lml
#就好比我们不想做男的了,想做女的,但是特么发现去错地方了,去了特么的韩国做手术,但是回来后洗澡一低头发现,呦,那玩意儿还在。
[root@localhost lml]# exit
[lml@localhost ~]$ su - root
密码:
上一次登录:五 2月 10 01:11:37 CST 2023pts/1 上
[root@localhost ~]# env
XDG_SESSION_ID=22
HOSTNAME=localhost.localdomain
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
USER=root 《《《《
#注意:加上-才能完全变成女的。
组管理命令
添加用户组
groupadd 【选项】 组名
选项:
-g 指定组gid(没什么卵用)
删除用户组
groupdel 组名
groupdel用于删除用户组,如果该用户组中扔包括某些用户,则必须先删除这些用户后,才能删除用户组。
把用户添加进组或从组中删除
gpasswd 【选项】组名
选项:
-a 用户名:把用户加入组
-d 用户名:把用户从组中删除
-A 用户名:为组添加管理员
切换组
netgrp 组名
如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户权限,newgrp主要用于在多个用户组之间进行切换,可以使用exit退出。
groups 查询用户所属哪些组。
其它相关命令
- id 用户名
显示用户的UID、初始组、附加组列表
2.finger:查看用户详细信息。