用户信息文件
大多成熟的系统都会有一套符合自己设计逻辑的用户管理系统。就比如 Mysq ,它是 mysql 数据库下的 user 表。其中每行记录表示一个用户以及该用户所拥有的权限。
在 linux 中,当然就在配置文件目录中了
他也是用户名、密码以及权限,不同的只是权限表达方式的不同。
[root@VM-0-7-centos etc]
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
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
abrt:x:173:173::/etc/abrt:/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:997:995::/var/lib/chrony:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
syslog:x:996:994::/home/syslog:/bin/false
user:x:1000:1000::/home/user:/bin/bash
carell:x:1001:1001::/home/carell:/bin/bash
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false
每行代表一个用户,绝大多数是系统或服务正常运行所必需的用户,这种用户称为系统用户或伪用户。
系统用户是不能登录系统的,但是这些用户同样也不能被删除,因为一旦删除,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题。
单独拿出 root 用户来看
root:x:0:0:root:/root:/bin/bash
看配置文件最重要的一点就是知道 : 是分隔符
-
用户名称
需要注意,用户名称只是为了方便管理员记忆,Linux系统是通过用户ID(UID)来区分不同用户、分配用户权限的。而用户名称和UID的对应正是通过/etc/passwd这个文件来定义的。
-
密码标志
“x” 代表的是密码标志,而不是真正的密码,真正的密码是保存在 /etc/shadow 文件中的。
在早期的UNIX中,这里保存的就是真正的加密密码串,但是这个文件的权限是644,查询命令如下:
[root@localhost ~]
-rw-r--r-- 1 root root 1648 12月 29 00:17 /etc/passwd
所有用户都可以读取 /etc/passwd文件,这样非常容易导致密码的泄露。虽然密码是加密的,但是采用暴力破解的方式也是能够进行破解的。所以现在的Linux系统把真正的加密密码串放置在影子文件 /etc/shadow中,而影子文件的权限是000,查询命令如下:
[root@VM-0-7-centos etc]
---------- 1 root root 799 Aug 4 2020 /etc/shadow
这个文件是没有任何权限的,但因为是root用户,所以读取权限不受限制。当然,用强制修改的方法也是可以手工修改这个文件的内容的。只有root用户可以浏览和操作这个文件。
在 /etc/passwd中只有一个“x”代表用户是拥有密码的,我们把这个字段称作密码标志,具体的密码要去 /etc/shadow 文件中查询。但是这个密码标志“x”也是不能被删除的,如果删除了密码标志“x”,那么系统会认为这个用户没有密码,从而导致只输入用户名而不用输入密码就可以登录(当然只能在本机上使用无密码登录,远程是不可以的)。
- UID
root:x:0:0:root:/root:/bin/bash
第三个字段是用户ID(UID),系统是通过UID来识别不同的用户和分配用户权限的。
- 0:超级用户UID。如果用户UID为0,则代表这个账号是管理员账号。在Linux中如何把普通用户升级成管理员呢?只需把其他用户的UID修改为 0 就可以了,这一点和Windows是不同的。不过不建议建立多个管理员账号。
- 1~499:系统用户(伪用户)UID。这些UID是系统保留给系统用户的UID,也就是说UID是1~499范围内的用户是不能登录系统的,而是用来运行系统或服务的。其中,1~99是系统保留的账号,系统自动创建;100~499是预留给用户创建系统账号的。
- 500~65535:普通用户UID。建立的普通用户UID从500开始,最大到65535。
- GID
root:x:0:0:root:/root:/bin/bash
第四个字段就是用户的 组ID(GID),也就是这个用户的初始组的标志号。
用户组分为初始组和附加组:
- 初始组,指用户一登录就立刻拥有这个用户组的相关权限。每个用户的初始组只能有一个,一般就是将和这个用户的用户名相同的组名作为这个用户的初始组。举例来说,我们手工添加用户 carell,在建立用户 carell 的同时就会建立 carell 组作为 carell 用户的初始组。
- 附加组,指用户可以加入多个其他的用户组,并拥有这些组的权限。每个用户只能有一个初始组,除初始组要把用户再加入其他的用户组外,这些用户组就是这个用户的附加组。附加组可以有多个,而且用户可以有这些附加组的权限。
例如,刚刚的 carell 用户除属于初始组 carell 外,我又把它加入了users组,那么 carell 用户同时属于carell 组、users组,其中 carell 是初始组,users是附加组。当然,初始组和附加组的身份是可以修改的,但是我们在工作中一般不修改初始组,只修改附加组,因为修改了初始组有时会让管理员逻辑混乱。
- 用户说明
root:x:0:0:root:/root:/bin/bash
第五个字段是这个用户的简单说明,没有什么特殊作用,可以不写。
- 家目录
root:x:0:0:root:/root:/bin/bash
第六个字段是这个用户的家目录,也就是用户登录后有操作权限的访问目录,我们把这个目录称为用户的家目录。超级用户的家目录是/root目录,普通用户在/home/目录下建立和用户名相同的目录作为家目录,如 carell 用户的家目录就是 /home/carell/ 目录。
- 登录之后的Shell
root:x:0:0:root:/root:/bin/bash
Shell 就是 Linux 的命令解释器。管理员输入的密码都是 ASCII 码,也就是类似 abcd 的英文。但是系统可以识别的编码是类似 0101 的机器语言。Shell 的作用就是把 ASCII 编码的命令翻译成系统可以识别的机器语言,同时把系统的执行结果翻译为用户可以识别的 ASCII 编码。Linux 的标准 Shell 就是 /bin/bash。
在 /etc/passwd 文件中,可以把这个字段理解为用户登录之后所拥有的权限。如果写入的是Linux的标准 Shell, /bin/bash 就代表这个用户拥有权限范围内的所有权限。例如:
[root@localhost ~]
carell:x:502:502::/home/carell:/bin/bash
手工添加了 carell 用户,它的登录 Shell 是 /bin/bash,那么这个用户就可以使用普通用户的所有权限。如果把 carell 用户的 Shell 修改为 /sbin/nologin,例如:
[root@localhost ~]
carell:x:502:502::/home/carell:/sbin/nologin
那么这个用户就不能登录了,因为 /sbin/nologin 就是禁止登录的 Shell。
如果在这里放入的是一个系统命令,如 /usr/bin/passwd,例如:
[root@localhost ~]
carell:x:502:502::/home/carell:/usr/bin/passwd
那么这个用户可以登录,但是登录之后就只能修改自己的密码了。但是在这里不能随便写入和登录没有关系的命令,如 ls,否则系统不会识别这些命令,也就意味着这个用户不能登录。