Um socket de rede em C ++ no Redhat 5 para usuários não root

1

Eu escrevi um programa em C ++ que usa sockets para falar com uma máquina windows7.

Eu executei o código como o usuário root e tudo funciona bem. No entanto, não quero acabar executando o programa como root, por motivos de segurança.

Primeiro eu criei um novo usuário para rodar o programa, mas ele não deixava o usuário iniciar um novo socket, então eu adicionei o usuário ao grupo raiz e tentei novamente, mas Redhat não me permitirá iniciar um novo socket como qualquer coisa, menos o usuário root.

Eu tentei isso com o firewall desativado apenas para descartá-lo e ainda sem sorte.

Então, algum de vocês tem uma ideia de quais permissões / grupos devo alterar / adicionar?

Examinei on-line e descobri que:

/usr/sbin/setsebool -P httpd_can_network_connect=1

É sugerido como uma cura possível, mas não parece me ajudar.

    
por Andy 09.08.2011 / 16:18

2 respostas

1

but Redhat will not let me start a new socket as anything but the root user.

Então você deve ter uma política de SELinux muito restritiva configurada.

Tem certeza de que não permitirá criar um soquete de escuta usando um número de porta menor que 1024?

editar

Se o número da porta não estiver abaixo de 1024, então é a política do SELinux. Você deve estar vendo entradas registradas em / var / log / messages dizendo que está sendo negado.

Para permitir ...

 /usr/sbin/semanage port -a -t <SEType> -p tcp 51717

Onde está o tipo sendo relatado no log ou use http_port_t para adicioná-lo ao tipo http. Consulte esta página para ver um exemplo

    
por 09.08.2011 / 16:32
1

Qual porta você está vinculando?

A vinculação a portas TCP menores que 1024 é restrita à raiz.

Você pode eliminar o privilégio de root após vincular o soquete em seu programa ou, alternativamente, usar uma solução alternativa como um redirecionamento de iptables ou authbind; Há uma boa discussão sobre as muitas opções neste no Stack Overflow .

    
por 09.08.2011 / 16:33