Quando um processo obtém um fd com sucesso usando open(flags=O_RDWR)
, ele poderá ler/gravar nesse arquivo desde que o fd não esteja fechado (arquivo regular no sistema de arquivos local), mesmo que algum outro processo use chmod para cancelar a leitura/gravação permissão para o usuário correspondente. O kernel do Linux verifica as permissões de arquivo no inode ou na descrição do arquivo aberto? Mas e quando o processo tentar executar esse arquivo usando execveat
, o kernel lerá o disco para verificar a permissão x bit e suid bit? Que tipo de permissões são registradas na descrição do arquivo aberto, ele contém uma ACL completa ou um bit simplesmente legível/gravável para que todas as outras operações ( execveat
, fchdir
, fchmod
, etc) verifiquem as informações no disco?
E se eu transferir este fd para outro processo de outro cujo fsuid não tenha um bit de leitura/gravação/execução nesse arquivo (de acordo com as informações do sistema de arquivos no disco), esse processo receptor será capaz de ler/gravar/executar o arquivo através do fd?