나는 리눅스 커널을 발견했다지도 시간그곳에서 그들은 4쌍의 식별자에 대해 논의했는데 그 중 하나는 다음과 같습니다.파일 시스템 uid 및 gid.
누군가 그것이 무엇인지, 그리고 그것이 어떻게 관련되는지 설명할 수 있습니까?uid와 gid?
답변1
이 질문이 그렇게 많은 과신과 정보 부족의 반응을 불러일으킬 것이라고 누가 생각이나 했겠습니까!
이것파일 시스템 UID또는FSUIDNFS 서버를 돕기 위해 설계된 Linux 기능입니다. 파일 권한 확인에만 사용되는 추가(POSIX가 아닌) uid입니다. 호출하지 않는 프로세스 setfsuid
(기본적으로 NFS 서버가 되려고 하지 않는 프로세스)의 경우 fsuid는 유효 uid와 동일합니다.
심지어매뉴얼 페이지그렇기 때문에 그것이 존재하지 않는다고 주장할 변명이 있습니다.
고쳐 쓰다: fsuid의 유래를 찾다가 영감을 받았어요. Linux 1.1.44에 추가되었을 때 이 주석은 sys_setfsuid
새 함수 위에 배치되었습니다.
+/*
+ * "setfsuid()" sets the fsuid - the uid used for filesystem checks. This
+ * is used for "access()" and for the NFS daemon (letting nfsd stay at
+ * whatever uid it wants to). It normally shadows "euid", except when
+ * explicitly set by setfsuid() or for access..
+ */
이 변경 사항은 위의 설명에서 이루어졌습니다 sys_access
.
- * XXX we should use the real ids for checking _all_ components of the
- * path. Now we only use them for the final component of the path.
+ * access() needs to use the real uid/gid, not the effective uid/gid.
+ * We do this by temporarily setting fsuid/fsgid to the wanted values
따라서 NFS는 원래 두 가지 목적 중 하나였습니다. 다른 하나는 access
올바르게 작동하고 있습니다. access
이는 setuid 프로그램에서 실제 사용자가 setuid의 추가 권한 없이 파일에 액세스할 수 있는지 여부를 결정하는 데 사용됩니다. 1.1.44 이전에는 버그가 있었습니다. 그 이후로 임시로 변경된 fsuid를 사용하여 작업을 수행했습니다. access
시스템 호출이 반환되기 전에 fsuid가 복원되므로 실제로 사용자 공간 변경 사항을 볼 수 없습니다.