8.2 Linux UID和GID

简介: 登陆 Linux 系统时,虽然输入的是自己的用户名和密码,但其实 Linux 并不认识你的用户名称,它只认识用户名对应的 ID 号(也就是一串数字)。Linux 系统将所有用户的名称与 ID 的对应关系都存储在 /etc/passwd 文件中。

登陆 Linux 系统时,虽然输入的是自己的用户名和密码,但其实 Linux 并不认识你的用户名称,它只认识用户名对应的 ID 号(也就是一串数字)。Linux 系统将所有用户的名称与 ID 的对应关系都存储在 /etc/passwd 文件中。

说白了,用户名并无实际作用,仅是为了方便用户的记忆而已。

要论证 "Linux系统不认识用户名" 也很简单,在前面章节,我们曾经在网络上下载过 ".tar.gz" 或 ".tar.bz2" 格式的文件,在解压缩之后的文件中,你会发现文件拥有者的属性显示的是一串数字,这很正常,就是因为系统只认识代表你身份的 ID,这串数字就是用户的 ID(UID)号。

Linux 系统中,每个用户的 ID 细分为 2 种,分别是用户 ID(User ID,简称 UID)和组 ID(Group ID,简称 GID),这与文件有拥有者和拥有群组两种属性相对应(如图 1 所示)。

img
图 1 文件的拥有者和群组属性

从图 1 中可以看到,该文件的拥有者是超级管理员 root,拥有群组也是 root。读者可能会问,既然 Linux 系统不认识用户名,文件是如何判别它的拥有者名称和群组名称的呢?

每个文件都有自己的拥有者 ID 和群组 ID,当显示文件属性时,系统会根据 /etc/passwd 和 /etc/group 文件中的内容,分别找到 UID 和 GID 对应的用户名和群组名,然后显示出来。

/etc/passwd 文件和 /etc/group 文件,后续文章会做详细讲解,这里只需要知道,在 /etc/passwd 文件中,利用 UID 可以找到对应的用户名;在 /etc/group 文件中,利用 GID 可以找到对应的群组名。

做个小实验,笔者所用的 Linux 系统中,常用的有两个账户,分别为 root 超级管理员账户和 c.biancheng.net 普通账户,我们先使用 root 账号登陆并 Vim /etc/passwd,在该文件中找到 c.biancheng.net 账户并将其 UID 随意改一个数字,这时当你查看普通账户拥有的文件时,你会发现所有文件的拥有者不再是 c.biancheng.net,而是数字。

具体执行过程如下所示:

\#查看系统中是否存在c.biancheng.net这个用户
[root@livecd ~]#grep 'c.biancheng.net' /etc/passwd
c.biancheng.net:x:500:500:c.biancheng.net:/home/centoslive:/bin/bash
[root@livecd ~]#ll -d /home/centoslive
drwx------. 23 c.biancheng.net centoslive 4096 Apr 9 09:37 /home/centoslive
[root@livecd ~]#vim /etc.passwd
\#修改c.biancheng.net账户中的UID(第一个 500)为 2000
[root@livecd ~]#ll -d /home/centoslive
drwx------. 23 500 centoslive 4096 Apr 9 09:37 /home/centoslive
\#可以看到,之前的 c.biancheng.net 变为了 500,因为修改了UID,导致 500 找不到对应的账号,因此显示数字
\#记得最后将其再手动改正过来
[root@livecd ~]#vim /etc.passwd
\#修改c.biancheng.net账户中的UID从 2000 改为 500

由于 c.biancheng.net 账户的 UID 已经改为 2000,但其 home 目录却记录的是 500,会导致此用户再次登录时无法进入自己的home目录。

注意,本节为了说明 ID 和用户名的对应关系,所以才将 /etc/passwd 文件中用户的 UID 做了更改。此操作很可能会导致某些程序无法进行,因此 /etc/passwd 文件不能随意修改。

目录
相关文章
|
6月前
|
Shell Linux Perl
将 Linux 系统中 UID 大于等于 1000 的普通用户都删除shell脚本
将 Linux 系统中 UID 大于等于 1000 的普通用户都删除shell脚本
90 1
|
5月前
|
安全 Linux 数据处理
探索Linux命令newgidmap:用户命名空间与GID映射的桥梁
`newgidmap`是Linux工具,管理用户命名空间的GID映射,关键用于容器技术如Docker。它设置GID映射以确保隔离环境中进程的权限,避免ID冲突。通过映射文件或命令行参数设定主机GID到命名空间GID的对应,保证进程能安全访问文件。在Docker场景中,`newgidmap`配合映射文件调整进程PID的GID映射,确保数据处理任务有适当权限。使用时注意映射准确性、安全性和与其他工具的协同。
|
11月前
|
存储 Linux 开发工具
Linux UID和GID(用户ID和组ID)
Linux UID和GID(用户ID和组ID)
173 0
|
Linux
8.14 Linux查看用户的UID和GID(id命令)
id 命令可以查询用户的UID、GID 和附加组的信息。命令比较简单,格式如下:
554 0
8.14 Linux查看用户的UID和GID(id命令)
|
Linux 数据安全/隐私保护
Linux 下修改或者重命名用户名称或者UID/GID
摘要 在Linux操作系统下怎么样用命令行去修改用户的名称(也就是重命名),或者UID/GID 切记不要手动用vi之类的文本编辑器去修改 /etc/passwd 文件 修改用户名称 Usage: usermod -l login-name old-name 修改用户的名称 old-name 改成 login-name,别的都没有改变。其实我们也应
1631 0
|
4天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
19 3
|
4天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
16 2
|
11天前
|
缓存 监控 Linux
|
15天前
|
Linux Shell 数据安全/隐私保护