Segurança de pipe nomeado e direitos de acesso

A segurança do Windows permite controlar o acesso a pipes nomeados. Para obter mais informações sobre segurança, consulte Modelo de controle de acesso.

Você pode especificar um descritor de segurança para um pipe nomeado ao chamar a função CreateNamedPipe . O descritor de segurança controla o acesso às extremidades do cliente e do servidor do pipe nomeado. Se você especificar NULL, o pipe nomeado obterá um descritor de segurança padrão. As ACLs no descritor de segurança padrão para um pipe nomeado concedem controle total à conta localSystem, aos administradores e ao proprietário do criador. Eles também concedem acesso de leitura aos membros do grupo Todos e à conta anônima.

Para recuperar o descritor de segurança de um pipe nomeado, chame a função GetSecurityInfo . Para alterar o descritor de segurança de um pipe nomeado, chame a função SetSecurityInfo .

Quando um thread chama CreateNamedPipe para abrir um identificador para a extremidade do servidor de um pipe nomeado existente, o sistema executa uma marcar de acesso antes de retornar o identificador. O marcar de acesso compara o token de acesso do thread e os direitos de acesso solicitados com a DACL no descritor de segurança do pipe nomeado. Além dos direitos de acesso solicitados, a DACL deve permitir que o thread de chamada FILE_CREATE_PIPE_INSTANCE acesso ao pipe nomeado.

Da mesma forma, quando um cliente chama a função CreateFile ou CallNamedPipe para se conectar à extremidade do cliente de um pipe nomeado, o sistema executa uma marcar de acesso antes de conceder acesso ao cliente.

O identificador retornado pela função CreateNamedPipe sempre tem acesso SYNCHRONIZE. Ele também tem GENERIC_READ, GENERIC_WRITE ou ambos, dependendo do modo aberto do pipe. Veja a seguir os direitos de acesso para cada modo aberto.

Modo aberto Direitos de acesso
PIPE_ACCESS_DUPLEX (0x00000003) FILE_GENERIC_READ, FILE_GENERIC_WRITE e SYNCHRONIZE
PIPE_ACCESS_INBOUND (0x00000001) FILE_GENERIC_READ e SYNCHRONIZE
PIPE_ACCESS_OUTBOUND (0x00000002) FILE_GENERIC_WRITE e SYNCHRONIZE

 

FILE_GENERIC_READ acesso a um pipe nomeado combina os direitos para ler dados do pipe, ler atributos de pipe, ler atributos estendidos e ler a DACL do pipe.

FILE_GENERIC_WRITE acesso a um pipe nomeado combina os direitos para gravar dados no pipe, acrescentar dados a ele, gravar atributos de pipe, gravar atributos estendidos e ler a DACL do pipe. Como FILE_APPEND_DATA e FILE_CREATE_PIPE_INSTANCE têm a mesma definição, FILE_GENERIC_WRITE permite a permissão para criar o pipe. Para evitar esse problema, use os direitos individuais em vez de usar FILE_GENERIC_WRITE.

Você pode solicitar o acesso ACCESS_SYSTEM_SECURITY direito a um objeto de pipe nomeado se quiser ler ou gravar a SACL do objeto. Para obter mais informações, consulte ACLs (Listas de Controle de Acesso) e Direito de Acesso à SACL.

Para impedir que usuários remotos ou usuários em uma sessão de serviços de terminal diferentes acessem um pipe nomeado, use o SID de logon na DACL para o pipe. O SID de logon também é usado em logons de execução como; é o SID usado para proteger o namespace de objeto por sessão. Para obter mais informações, consulte Obtendo o SID de logon em C++.