/proc에서 파일의 GID를 수정하는 방법은 무엇입니까?

/proc에서 파일의 GID를 수정하는 방법은 무엇입니까?

어떻게 이런 일이 발생했는지는 잘 모르겠지만 내 /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

관련 정보