/ proc不是一个实时文件系统,而是一个伪文件系统,它在Linux内核中公开数据结构,您可以使用在处理文件系统时更熟悉的CLI工具来操作它们或读取它们.例如.猫,回声等
由于您已更改此用户的UID / GID,因此在执行此更改之前,这些可能是作为此用户运行的进程.我只是重新启动系统,这些应该消失,因为它们实际上只在/ proc中作为系统上的活动运行进程.
例
让我们从用户开始:
$getent passwd user1
user1:x:1001:1001::/home/user1:/bin/bash
现在运行我们的示例流程:
$su -c "sleep 1000" user1 &
[1] 1677
注意过程:
$ps auxf | grep [s]leep
root 1676 0.0 0.2 195956 2424 pts/1 S 22:59 0:00 \_ su -c sleep 1000 user1
user1 1677 0.0 0.0 107948 348 ? Ss 22:59 0:00 | \_ sleep 1000
现在,如果我们在/ etc / passwd文件中注释掉user1条目,我们会得到相同的场景:
$find /proc/1677 -ls | head
258536 0 dr-xr-xr-x 9 1001 user1 0 Jul 16 22:59 /proc/1677
272483 0 dr-xr-xr-x 3 1001 user1 0 Jul 16 23:01 /proc/1677/task
272527 0 dr-xr-xr-x 6 1001 user1 0 Jul 16 23:01 /proc/1677/task/1677
272528 0 dr-x------ 2 1001 user1 0 Jul 16 23:01 /proc/1677/task/1677/fd
272570 0 lrwx------ 1 1001 user1 64 Jul 16 23:01 /proc/1677/task/1677/fd/0 -> /dev/pts/1
272571 0 lrwx------ 1 1001 user1 64 Jul 16 23:01 /proc/1677/task/1677/fd/1 -> /dev/pts/1
272572 0 lrwx------ 1 1001 user1 64 Jul 16 23:01 /proc/1677/task/1677/fd/2 -> /dev/pts/1
272529 0 dr-x------ 2 1001 user1 0 Jul 16 23:01 /proc/1677/task/1677/fdinfo
272573 0 -r-------- 1 1001 user1 0 Jul 16 23:01 /proc/1677/task/1677/fdinfo/0
272574 0 -r-------- 1 1001 user1 0 Jul 16 23:01 /proc/1677/task/1677/fdinfo/1
我们无法更改这些文件,因为它们不是实际文件,而是Linux内核的内部文件.
$sudo chown user2 /proc/1677/task/1677/fdinfo/1
注意,没有效果:
$ll /proc/1677/task/1677/fdinfo/1
-r-------- 1 1001 user1 0 Jul 16 23:01 /proc/1677/task/1677/fdinfo/1
注意:同样的问题同时适用于/ etc / passwd和/ etc / group文件.我只是使用用户& UID场景,同样适用于该组& GID.
顺便说一句,如果我在/ etc / passwd中取消注释我的user1,那么事情会恢复正常:
$ll /proc/1677/task/1677/fdinfo/1
-r-------- 1 user1 user1 0 Jul 16 23:01 /proc/1677/task/1677/fdinfo/1