Linux踩坑——文件出现用户名为1000
一、问题记录
今天要解决一个遗留问题,在开发板上存在一些文件(我们的应用程序相关文件),用户所有权和组ID都是1000,如图所示。
二、原因
查阅关于用户ID的相关资料:
- 管理员UID为0:系统的管理员用户。
- 系统用户UID为1~999: Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。
- 普通用户UID从1000开始:是由管理员创建的用于日常工作的用户。
这说明我们这个也是个普通用户创建的文件,但是考虑到该文件是在编译移植过得,于是去编译主机上找问题。发现编译主机用户ID确实是1000,说明可能是程序移植的时候,开发板直接识别到了主机ID号,但是开发板上只有root用户,于是直接使用了用户ID号(没有ID名字)
三、验证
将主机的文件所有权改为root权限,移植到开发板。
果然如此,改为root权限后移植过来的文件也是root用户了。
为了进一步验证该情况,创建了一个新的用户lgg,并将hello文件所有权改为lgg。能够看到lgg用户的ID是1001。
移植到开发板,能够看到此时文件的用户ID变为1001,说明该用户ID是根据主机的用户ID产生的。
四、补充
尝试复制新的文件去覆盖旧文件,发现用户所有权没有变化。
这是由于复制时,仅覆盖了文件内容,但是文件的元数据没有发生改变。这意味着,即使文件内容已经更新为用户B的版本,文件仍然属于用户A,并且继续保持用户A在文件上的权限控制。
覆盖操作实际上是将文件内容替换为新文件的内容,并不会改变文件的元数据,如所有权。这是因为Linux中文件的所有权是与文件的Inode相关联的,而Inode在覆盖操作中并未改变。
如果想同时更新所有权,需要在cp指令时加上"-p"选项,来保留文件的权限和所有者信息。
参考文献
https://www.cnblogs.com/dyanbk/p/11197724.html
https://blog.csdn.net/xuleisdjn/article/details/122038229