어떻게 이런 일이 발생했는지는 잘 모르겠지만 내 /proc
디렉터리에 있는 모든 파일(/proc/uptime과 같은 프로세스와 관련되지 않은 파일 포함)의 그룹 ID는 루트 대신 1001로 설정되어 있습니다. 이는 현재 삭제된 대체 사용자 계정의 ID이므로 이제 명령은 GID 1001을 UNKNOWN 으로 나열합니다 stat
.
chown
또는 chgrp
(아래 )을 사용하여 sudo
루트로 변경할 수 없습니다 . 재부팅 후에도 GID는 여전히 1001로 설정되어 있습니다.
답변1
/proc
실제 파일 시스템은 아니지만, 파일 시스템 작업 시 더 친숙하게 느껴지는 CLI 도구를 사용하여 데이터 구조를 조작하거나 읽을 수 있는 Linux 커널의 데이터 구조를 노출하는 의사 파일 시스템입니다. 예를 들어. cat
, echo
,등.
이 사용자의 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
user1
이제 파일의 항목을 주석 처리하면 /etc/passwd
동일한 시나리오가 나타납니다.
$ 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에도 마찬가지입니다.
그런데, 주석 처리를 제거하면 user1
모든 것이 /etc/passwd
정상으로 돌아갑니다.
$ ll /proc/1677/task/1677/fdinfo/1
-r-------- 1 user1 user1 0 Jul 16 23:01 /proc/1677/task/1677/fdinfo/1