/etc/passwd用户记录文件,文件记录着ID和账号与一般身份用户的对应关系
用户至少会有2个ID,用户ID(UserID简UID)和用户组ID(GroupID简GID)。
/etc/group用户组记录文件,文件记录着ID和用户组名的对应关系
文件利用UID和GID判别所有者和用户组。当要显示文件属性需求时,系统会根据/etc/passwd和/etc/group的内容,找到UID/GID对应的账号与用户组名再显示出来。
/etc/shadow为专门管理密码相关数据文件
/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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
- operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
jiangshan:x:1000:1000::/home/jiangshan:/bin/bash
jinyan:x:1001:1001::/home/jinyan:/bin/bash
以‘jinyan’用户为例,其中,1001:1001为UID:GID,UID标识用户,GID标识用户组。
/etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
cdrom:x:11:
mail:x:12:postfix
man:x:15:
dialout:x:18:
floppy:x:19:
games:x:20:
tape:x:33:
video:x:39:
ftp:x:50:
lock:x:54:
audio:x:63:
nobody:x:99:
users:x:100:
utmp:x:22:
utempter:x:35:
input:x:999:
systemd-journal:x:190:
systemd-network:x:192:
dbus:x:81:
polkitd:x:998:
ssh_keys:x:997:
sshd:x:74:
postdrop:x:90:
postfix:x:89:
chrony:x:996:
jiangshan:x:1000:
jinyan:x:1001:
/etc/shadow
root:$6$Ue1tISumzuerjoaq$1Y696T4DwWQdL5m9HU3XAvlT3z3TGR2eVSxo5vBId7x2T8hti9SQenCetayvF6UxOR4am0uXWbeg5Kagavzfe0::0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
adm:*:17834:0:99999:7:::
lp:*:17834:0:99999:7:::
sync:*:17834:0:99999:7:::
shutdown:*:17834:0:99999:7:::
halt:*:17834:0:99999:7:::
mail:*:17834:0:99999:7:::
- operator:*:17834:0:99999:7:::
games:*:17834:0:99999:7:::
ftp:*:17834:0:99999:7:::
nobody:*:17834:0:99999:7:::
systemd-network:!!:17960::::::
dbus:!!:17960::::::
polkitd:!!:17960::::::
sshd:!!:17960::::::
postfix:!!:17960::::::
chrony:!!:17960::::::
jiangshan:$6$ZPd3YtMU$4.SDHumdEN9V4jD4L2sa.MZ318jx3yl2ByKQV3mxjxmMfDCXM2IFTEl1MqG/UAqJeSVsltjcnB4NWr4j9X7Hy1:17962:0:99999:7:::
jinyan:$6$3/Py/FGX$RgIA8mFS1CWvSM7GcNYa0CDe3IHcEpbPuZOWrKgPzugEQBnRiNbAsLdliMjcVefoXj9jYOqCofjONbmHRuOiu1:17962:0:99999:7:::
若某用户登录主机以取得shell的环境:在计算机前面利用tty1~tty2的终端机提供的login接口,输入账号和密码;若通过网络,还需要设置ssh远程访问功能;系统后台替你完成的工作:
- 系统在/etc/passwd文件中找到输入的账号,并读取出该账号对应的UID与GID(在/etc/group中读取),另外账号的主文件夹与shell设置也一并读出。
- 核对密码表,系统在/etc/shadow文件中找出对应的账号与UID,然后核对输入的密码和/etc/shadow文件中账号对应的密码是否相符。
- 一切OK,则进入shell阶段。
/etc/passwd文件结构
每一行代表一个账号,有几行系统就有几个账号,大多数为系统所必需的账号。
以/etc/passwd文件第一行为例解读:
root:x:0:0:root:/root:/bin/bash
共7个字段,用:分隔,每个字段分别是:
- 账号名称 账号用来对应UID的,例如root的UID对应就是0第3个字段。
- 密码,早期是将密码放入该字段中,由于不安全,后来将密码放置在/etc/shadow中,用x填入。
- UID 用户标识符,UID的限制如下:
i. 0 系统管理员
ii. 1~499 系统账号(保留给系统使用)
iii. 500~2^32-1 可登录账号 给一般用户使用
- GID 与/etc/group有关 /etc/group与/etc/passwd差不多,只是它用来规定组名与GID的对应而已。
- 用户信息列表 解释账号而已
- 主文件夹 当用户登录后,就会立刻进入到该目录中
- Shell 当用户登陆系统后就会取得一个Shell来与系统的内核通信以进行用户操作,这个字段指定shell会使用bash,如该字段为“/bin/bash”。注意:/sbin/nologin Shell可以用来替代成让账号无法取得shell环境的登录操作,如可以用来制作纯pop邮件账号者的数据。
/etc/shadow文件结构 共有9个字段
程序运行都与权限有关,而权限与UID/GID有关,因此各程序需要读取/etc/passwd文件来了解不同账号的权限,因此/etc/passwd文件的权限设置为“-rw-r-r--”。早期密码放置在/etc/passwd文件中,存在着风险,因此发展后期将密码移至/etc/shadow文件中,进行分隔开来,例如:
root:$6$Ue1tISumzuerjoaq$1Y696T4DwWQdL5m9HU3XAvlT3z3TGR2eVSxo5vBId7x2T8hti9SQenCetayvF6UxOR4am0uXWbeg5Kagavzfe0::0:99999:7:::
- 账号名称 由于密码也需要和账号对应 必须要和/etc/passwd相同
- 密码 经过加密的密码
- 最近更动密码的日期
- 密码不可被更动的天数(与第3个字段相比)
- 密码需要重新更改的天数(与第3个字段相比)
- 密码需要更改期限前的警告天数(与第5个字段相比)
- 密码过期后的账号宽限时间(密码失效日)(与第5个字段相比)
- 账号失效日期 常用来做“收费服务”
- 保留字段
/etc/group文件结构 共有4个字段
每一行代表一个用户组。例如:
root:x:0:
- 用户组名称
- 用户组密码 通常不需要设置,这个设置通常是给“用户管理员”使用,但是密码早已移动到/etc/gshadow文件中了,此字段只会存在一个“x”
- GID 用户组ID
- 此用户组支持的账号名称 一个账号可以加入多个用户组,某个账号想要加入此用户组,将该账号填入该字段即可。例如想让 jeshy 加入root这个用户组,那么在该字段加入“,jeshy”即“root,jeshy”------ root:x:0:root,jeshy