[리눅스] 리눅스의 권한과 사용자 -2(소유자가 없는 파일)
그러나 리눅스는 이름으로 계정을 구분하지 않는다.
내부적으로는 모든 사용자를 숫자 ID로 구분한다.
UID와 GID
UID(User ID)
한 사용자에게 부여되는 숫자 ID다.
리눅스는 아래와 같이 UID값을 보고 사용자를 식별한다.

GID(Group ID)
마찬가지로 그룹에게도 숫자 ID를 부여하고 이 값을 통해 그룹을 식별한다.

소유자가 없는 파일?
리눅스의 사용자-UID정보는 /etc/passwd 파일에 , 그룹-GID 정보는 /etc/group에서 관리된다.
그래서 리눅스는 해당 파일이나 폴더의 권한 정보를 확인할 때 해당 파일 이나 폴더에 대한 메타데이터가 저장되어있는 inode를 확인하는데 이때 inode에는 UID,GID 숫자값만 저장되어있고 이 숫자값을 가지고 passwd와 group파일에 가서 해당 계정을 확인하는 것이다.
그런데 만약 어떤 계정을 삭제했다면 passwd파일에는 삭제되지만 메타데이터가 저장된 inode라는 곳에는 여전히 UID값이 남아있다. 이로 인해, 소유자가 없는 파일이나 폴더가 발생하는 문제가 생긴다.
이런 경우 보통 보안 취약점으로 지적된다.
왜냐하면
UID가 517인 samrok이라는 계정이 삭제되었고 그동안 samrok이 만든 파일들의 inode에는 소유주가 517로 여전히 남아있다.
이 상황에서 누군가 sudo useradd -u 517 hacker라는 명령어를 친다면 hacker라는 이름의 계정이 추가되고 그 계정의 UID는 517이 된다. 그 순간 이전 samrok이 만들었던 모든 파일들은 같은 UID 517값을 가진 hacker의 소유가 되기 때문이다.
또한 계정을 삭제한 적이 없더라도 소유자가 없는 파일이 발생하는 경우가 많은데
이런 경우는 대게 어떤 소프트웨어를 설치했고, 그 소프트웨어가 설치되면서 소프트웨어 전용계정으로 소프트웨어 관련 파일들이 생성된다. 그리고 해당 소프트웨어를 나중에 삭제한다면 그 소프트웨어 전용계정도 삭제되지만 그 전에 전용계정이 만들었던 파일들이 남아 소유자가 없는 파일이 된다.
*inode란?
리눅스에서는 각 파일/폴더마다 inode라는 것이 1개씩 존재한다.
쉽게 말하면 개별 파일의 주민등록증 같은 거다.
이 inode에는 UID,GID,권한,파일크기,위치정보,시간정보 와 같은 메타데이터가 저장되고
파일내용은 이 inode에 저장되지 않는다.
파일의 실제 내용은 데이터 블록이라는 고정된 크기(보통 4KB)의 청크(하나의 단위)에 저장된다.
inode가 이 파일은 123번,124번,125번 블록을 사용하고 있다는 정보를 저장하여 연결해주는 것이다.