Quem teria pensado que esta questão iria arrastar uma coleção de respostas excessivamente confiantes e mal informadas?
O sistema de arquivos uid ou fsuid é um recurso do Linux projetado para ajudar na implementação do servidor NFS. É um uid extra (não-POSIX) que é usado apenas para verificações de permissão de arquivo. Para qualquer processo que não chame setfsuid
(basicamente qualquer processo que não esteja tentando ser um servidor NFS), o fsuid é o mesmo que o uid efetivo.
Existe até uma página de manual para isso, então desculpa para alegar que não existe.
Atualização : Eu fui inspirado a encontrar a origem do fsuid. Quando foi adicionado no Linux 1.1.44, este comentário foi colocado acima da nova função 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..
+ */
e essa alteração foi feita no comentário acima de 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
Então, o NFS era um dos dois propósitos originais. O outro estava fazendo o acesso () funcionar corretamente. access () é usado por programas setuid para determinar se o usuário real teria acesso a um arquivo sem os privilégios adicionais do setuid. Antes de 1.1.44 era buggy. Desde então, tem usado uma mudança temporária de fsuid para fazer o trabalho. Como o fsuid é restaurado antes que a chamada do sistema access () retorne, você nunca verá a mudança do espaço do usuário.