저는 UNIX 파일 권한에 대해 배우고 있는데 Ubuntu 시스템에서 /var/mail에 setgid 비트가 설정되어 있다는 것을 발견했습니다. 왜 이런거야?
$ ls /var/mail/ -dl
drwxrwsr-x 2 root mail 4096 Feb 23 05:57 /var/mail/
내가 읽고 있는 책에는 이렇게 적혀 있습니다.
Setgid는 많은 수의 파일을 공유해야 하는 사용자 그룹이 있을 때 유용합니다. setgid 속성을 사용하여 공용 디렉토리에서 작업하게 하면 그룹의 사람들이 동일한 기본 그룹을 공유하지 않더라도 새 파일에 대한 올바른 그룹 소유권이 자동으로 설정됩니다.
이 설명은 사용자가 해당 디렉토리를 직접 조작하지 않기 때문에 /var/mail에 대한 용도가 없는 것처럼 들립니다.
/var/mail에 생성된 파일은 그룹 소유자 "mail"로 끝나지만 이미 그런 일이 발생하지 않습니까? "mail"만이 디렉터리(및 루트 디렉터리)에 새 파일을 만들 수 있습니다.
이것이 유용하다고 생각되는 유일한 상황은 시스템 관리자가 새 메일 계정을 추가할 때입니다 sudo touch /var/mail/<user>
. 파일에는 여전히 "메일" 그룹 소유자가 있습니다.
답변1
단 하나의 서비스 대신 로컬 이메일은 여러 서비스에서 처리됩니다. 실제 메일 전송 에이전트(간단히 MTA: 일반적으로 또는 유사) 외에도 postfix
메일 exim
필터링 sendmail
/후처리 유틸리티(이전 유틸리티와 같은 procmail
), 사용자 메일함에 대한 원격 액세스를 가능하게 하는 서비스(다양한 POP 및 IMAP 서비스), 메일링 리스트 관리 유틸리티 등이 있습니다.
역사적으로 이러한 서비스는 일반적으로 각 사용자의 사서함에 액세스할 수 있어야 하고 해당 소유자만 사서함에 액세스할 수 있어야 했기 때문에 루트로 실행되었습니다. 그러나 이메일 시스템을 루트로 실행하는 것은 쉽게 악용할 수 있는 코드 덩어리라는 것이 곧 명백해졌습니다. 아주 많은 취약점이 발견되고 수정되었지만 결국 사람들은 메일 시스템을 루트로 실행하는 것이 나쁜 생각이라는 것을 깨달았습니다. 해결 방법은 그룹을 만들고 mail
사용자의 사서함에 메일을 배달하는 데 필요한 이메일 서비스의 모든 구성 요소를 해당 그룹에 설정하는 것입니다.
하지만 당시에는 이미 이메일 관련 도구의 수가 너무 많아 완벽한 변환을 보장할 수 없었습니다. 따라서 보험으로 사용자 받은 편지함의 상위 디렉토리 /var/mail/
도 메일로 설정되어 사용자의 받은 편지함으로 메일을 보내는 소프트웨어가 자동으로 올바른 그룹의 새 받은 편지함을 생성하도록 합니다. 남은 작업은 사용자의 받은 편지함에 올바른 umask를 사용하도록 모든 메일 배달 프로그램을 패치하거나 구성하는 것입니다. 메일 시스템이 루트로 실행될 때 umask 077(권한용 -rw-------
)을 사용할 수 있지만 그룹 mail
유효 사례의 경우 umask에는 -rw-rw----
007이 필요합니다. (허가). 그러나 이는 기존 요구 사항에 대한 조정이 아니라올바른 그룹을 실행하기 위한 새로운 책임 추가이므로 이는 더 간단한 변경입니다.
(물론 올바른 그룹의 실행을 추가하는 것은 확실히 좋은 생각이지만 /var/mail
setgid를 만들면 mail
코드가 변경됩니다.임의로 선택할 수 있는그리고 덜 긴급합니다. )
예, 사용자의 받은 편지함으로 메일을 보내는 대부분의 프로그램은 /var/mail/
사용자의 메일함 파일이 존재하지 않는 경우 자동으로 생성합니다. 따라서 사용자가 첫 번째 수신 이메일을 받을 때까지 사용자는 메일함 없이 그대로 유지됩니다. 문서는 완전히 유효합니다.
요약하자면, /var/mail/
setgid는 mail
잘못 구성된 메일 배달 프로그램에 대한 보험 정책이자 이메일 서비스가 항상 완벽하게 작동했던 암흑 시대의 역사적 유물입니다 root
.
답변2
/var/mail/에서 각 파일은 게시 사용자의 uid입니다. 이를 통해 모든 사용자는 권한이 없는 디렉토리에서 자신의 uid를 사용하여 파일을 쓰거나 읽을 수 있습니다. gid가 설정되지 않으면 사용자는 자신의 이메일을 삭제할 수 없습니다.
사용자는 자신의 메일 파일을 읽고 삭제합니다. mutt를 참조하세요.