linux的账号和组
1.0 账号与用户组
1.1 用户标识符:UID,GID
虽然我们登陆Linux主机的时候输入的是账号,但其实Linux主机并不会直接认识你的账号名称,账号只是为了方便人。
一个文件如何判断他的拥有者ID和拥有组ID呢?
其实,就是利用UID和GID。每个文件都会有所谓的GID 和 UID。当我们需要显示文件实行的需求的时候,系统会根据/etc/passwd 与 /etc/group 的内容,找到相对应的账号与祖名在显示出来。
如果修改一个用户的UID,那么一个原本属于该用户的文件,现在属于该用户的UID(变成了数字,而不是账号名)。
同样,如果修改一个用户的GID,那么一个原本属于该用户的组,现在属于该用户的GID。
1.2 用户账号
登陆的顺序:
1.先查找/etc/passwd文件,寻找是否有输入的账号,如果没有就退出,如果有就将该账号对应的UID 和GID读出来,另外,该账号的家目录和shell设置一并读出。
2.再核对/etc/shadow文件,找出与uid gid相对应的账号和UID。然后核对密码
3.如果一切OK,那么就进入shell管理阶段。
1.2.1 /etc/passwd文件
/etc/passwd文件是Linux系统中最重要的文件之一,它存储了Linux系统中所有的用户账号信息。
/etc/passwd文件结构:
[root@server ~]# head -n 4 /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
这个文件的结构是:
用户名:口令:UID:GID:注释:家目录:登录shell
每一行代表一个账号,有几行就代表有几个账号。特别注意的是,有很多账号,本来就是里面系统这个厂运行所必须的,我们可以称它为系统账号,例如bin,daemon,adm,nobody
等,这些账号不要随意删除。
1.2.2 /etc/shadow文件
/etc/shadow文件是Linux系统中最重要的文件之一,它存储了Linux系统中所有的用户账号密码信息。
/etc/shadow文件结构:
[root@server ~]# head -n 4 /etc/shadow
root:$6$cVkANz1y$snmp8efw0x5J0wz5CwacyaSIq6cYM7F9b2lE5xrMd5KucmOSuoEi3x9xyIRBSoP2MVRMP9qgfHKH2xUXs8T6v0:19703:0:99999:7:::
bin:*:16925:0:99999:7:::
daemon:*:16925:0:99999:7:::
adm:*:16925:0:99999:7:::
这个文件的结构是:
用户名:加密口令:最后一次修改时间:最小天数:最大天数:警告天数:不活动天数:失效天数:保留字段
查看Linux中的加密机制
[root@server ~]# authconfig --test |grep hashing
password hashing algorithm is sha512
#这就是目前的密码加密机制
1.2.3 /etc/group文件
/etc/group文件是Linux系统中最重要的文件之一,它存储了Linux系统中所有的用户组信息。
/etc/group文件结构:
[root@server ~]# head -n 4 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
这个文件的结构是:
组名:口令:GID:组内用户列表
1.2.4 /etc/passwd和/etc/shadow的区别
/etc/passwd文件中存储的是用户账号信息,包括账号名称、口令、UID、GID、注释、家目录和登录shell等。
/etc/shadow文件中存储的是用户账号密码信息,包括账号名称、
1.3 关于用户组:有效与初始用户组,groups,newgr
1.3.1 /etc/group 文件结构
[root@server ~]# head -n 4 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
这个文件的结构是:
组名:口令:GID:组内用户列表
- 如果要加入用户组,可以直接在组内用户列表处逗号分隔,加入用户名。
每个用户可以加入多个用户组,那么到底哪一个用户组为主呢?
1.3.2 初始用户组
在/etc/passwd文件中,用户对应的GID,到/etc/group中找到对应的,那个就是用户的初始用户组。
[root@server ~]# cat /etc/passwd |awk -F: '{print $4}'
0
1
2
3
1.3.3 有效用户组
groups命令
如果一个用户,同时加入多个用户组,使用groups
查看用户当前有效用户组。
[hum@server root]$ groups
hum wheel sum
newgrp命令
如果一个用户,同时加入多个用户组,使用newgrp
命令切换用户组。
[hum@server root]$ groups
hum wheel sum
[hum@server root]$ newgrp sum
[hum@server root]$ groups
sum wheel hum
newgrp 是有限制的,你想要切换的用户组一定为你已经加入的用户组。
注意:记得退出newgrp环境,因为newgrp命令是新建了一个shell环境,退出这个环境后,原来的用户组就恢复了。
[hum@server root]$ groups
hum wheel sum
[hum@server root]$ newgrp sum
[hum@server root]$ groups
sum wheel hum
[hum@server root]$ exit
exit
[hum@server root]$ groups
hum wheel sum
1.3.4 /etc/gshadow文件
[root@server ~]# head -n 4 /etc/gshadow
root:::
bin:::
daemon:::
sys:::
这个文件的结构是:
组名:口令:用户组管理员的账号:有加入该用户组支持的所属账号
tips:这个文件最大的用处就是建立用户组管理员。(一般root很忙,又有用户想加入组,用户组管理员就能江那么账号加入自己挂里的用户组中,可以免去root的忙碌。不过,目前有类似sudo的之类的工具,这个功能也很少用)
2.0 账户管理
2.1 新增与删除用户:useradd,先关配置文件,passwd,usermod,userdel
2.1.1 useradd命令
选项 | 解释 |
---|---|
-u | 后面接UID 直接制定一个特定的UID给这个账号 |
-g | 后面接的用户组就是初始用户组,该用户组的GID会放在/etc/passwd文件的第四个栏位 |
-G | 后面接的用户组则是该账号还可加入的用户组,这个参数会修改/etc/group文件里的 |
-M | 强制,不要建立使用者的家目录(是系统账号的默认值) |
-m | 强制,要建立使用者的家目录(一般账号的默认值) |
-c | /etc/passwd文件的第五栏,解释说明字段,可以随便设置 |
-d | 指定某个目录就是家目录,而不要使用默认值,务必使用绝对路径 |
-r | 建立一个系统的账号,这个账号的UID会有限制(参考/etc/login.defs) |
-s | 后面接一个shell,若没有指定则默认是/bin/bash |
-e | 后面接一个日期,格式为YYYY-MM-DD ,此选项可写入shadow第八栏位,也就是账号失效日期 |
-f | 后面接shadow的第七栏,指定密码是否会失效,0为立即失效,-1为用不是小(密码只是会过期而强制于登陆重新设置) |
useradd的默认值用useradd -D查看
[root@server ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
而这些数据其实是由/etc/default/useradd文件决定的。
[root@server ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
明文输入密码:
echo '123' |passwd --stdin hum
#先echo密码 显示出来密码 在进行passwd命令 --stdin(明文输入密码) 用户名
2.1.2 passwd命令
选项 | 解释 |
---|---|
--stdin | 可以通过来自前一个管道的数据,作为密码输入,对shell脚本有帮助 |
-l | 是lock的意思,会将/etc/shadow第二栏最前面加上! 使密码失效 |
-u | 是unlock的意思,与-l相对 |
-S | 列出密码相关参数,即shadow文件内的大部分信息 |
-n | 后面接天数,对应shadow的第四栏位,多久不可修改密码天数 |
-x | 后面接天数,对应shadow的第五栏位,多久内必须修改密码 |
-w | 后面接天数,对应是shadow的第六栏位,密码过期前的警告天数 |
-i | 后面接[日期],shadow的第七栏位,密码失效日期 |
实验:
让sum暂时无法登陆
[root@server ~]# passwd -l sum
Locking password for user sum.
passwd: Success
[root@server ~]# passwd -S sum
sum LK 2023-12-02 0 99999 7 -1 (Password locked.)
[root@server ~]# passwd -u sum
Unlocking password for user sum.
passwd: Success
[root@server ~]# passwd -S sum
sum PS 2023-12-02 0 99999 7 -1 (Password set, SHA512 crypt.)
2.1.3 chage
除了passwd -S 之外,chage命令也能看密码的相关参数,且更加详细
选项 | 解释 |
---|---|
-l | 列出该账号的详细密码参数 |
-d | 后面接日期,修改shadow第三栏位(最近一次修改密码的日期),格式 YYYY-MM-DD |
-E | 后面接日期,修改shadow第八栏位(账号失效日),格式为YYYT-MM-DD |
-I | 后面接天数,修改shadow第七栏位(密码失效日期) |
-m | 后面接天数,修改shadow的第四栏位(密码最短保存天数) |
-M | 后面接天数,修改shadow第五栏位(密码多久需要进行修改) |
-w | 后面接天数,修改shadow的第六栏位(密码过期前警告日期) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构