Como desabilitar o SELinux para o Apache httpd apenas no meu Fedora 14?

4

Seguindo este link Eu sou capaz de desligar o SELinux completamente do meu Fedora 14. Mas eu me pergunto como eu poderia desabilitar o SELinux apenas para o daemon httpd? Eu não tenho o system-config-selinux instalado e devido à política de firewall da empresa eu tenho que procurar pelos RPMs de pkgs.org para instale qualquer pacote. Então, há uma maneira de resolver isso?

Editar:

Summary:

SELinux is preventing /opt/ibm/cognos/c10/cgi-bin/cognos.cgi "execute" access to
/opt/ibm/cognos/c10/cgi-bin/libIBJStreamsDLL.so.

Detailed Description:

SELinux denied access requested by /opt/ibm/cognos/c10/cgi-bin/cognos.cgi.
/opt/ibm/cognos/c10/cgi-bin/cognos.cgi is mislabeled.
/opt/ibm/cognos/c10/cgi-bin/cognos.cgi default SELinux type is bin_t, but its
current type is bin_t. Changing this file back to the default type, may fix your
problem.

If you believe this is a bug, please file a bug report against this package.

Allowing Access:

You can restore the default system context to this file by executing the
restorecon command. restorecon '/opt/ibm/cognos/c10/cgi-bin/cognos.cgi'.

Fix Command:

/sbin/restorecon '/opt/ibm/cognos/c10/cgi-bin/cognos.cgi'

Additional Information:

Source Context                unconfined_u:system_r:httpd_t:s0
Target Context                unconfined_u:object_r:usr_t:s0
Target Objects                /opt/ibm/cognos/c10/cgi-bin/libIBJStreamsDLL.so [
                              file ]
Source                        cognos.cgi
Source Path                   /opt/ibm/cognos/c10/cgi-bin/cognos.cgi
Port                          <Unknown>
Host                          mm2fedora.syd.cog
Source RPM Packages           
Target RPM Packages           
Policy RPM                    selinux-policy-3.9.7-3.fc14
Selinux Enabled               True
Policy Type                   targeted
Enforcing Mode                Enforcing
Plugin Name                   restore_source_context
Host Name                     mm2fedora.syd.cog
Platform                      Linux mm2fedora.syd.cog 2.6.35.6-45.fc14.i686 #1
                              SMP Mon Oct 18 23:56:17 UTC 2010 i686 i686
Alert Count                   18
First Seen                    Fri 15 Apr 2011 02:12:44 PM EST
Last Seen                     Fri 15 Apr 2011 02:33:11 PM EST
Local ID                      409e250f-049f-49c0-89f6-7155e4643868
Line Numbers                  

Raw Audit Messages            

node=mm2fedora.syd.cog type=AVC msg=audit(1302841991.999:22392): avc:  denied  { execute } for  pid=28242 comm="cognos.cgi" path="/opt/ibm/cognos/c10/cgi-bin/libIBJStreamsDLL.so" dev=dm-0 ino=138263 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:usr_t:s0 tclass=file

node=mm2fedora.syd.cog type=SYSCALL msg=audit(1302841991.999:22392): arch=40000003 syscall=192 success=no exit=-13 a0=0 a1=1bc08 a2=5 a3=802 items=0 ppid=27923 pid=28242 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm="cognos.cgi" exe="/opt/ibm/cognos/c10/cgi-bin/cognos.cgi" subj=unconfined_u:system_r:httpd_t:s0 key=(null)

Como recomendado, executo o comando de correção sugerido: /sbin/restorecon '/opt/ibm/cognos/c10/cgi-bin/cognos.cgi' muitas vezes, mas infelizmente. desabilitando o SELinux completamente eu posso ver este aplicativo da web funciona. Eu estou pesquisando sobre este tópico agora mesmo, como como habilitar o SELinux globalmente, enquanto apenas desabilitando-o para o httpd. Não deve ser a melhor abordagem, mas como isso é apenas um caso de teste que seria ótimo para mim e para minha equipe.

A dica que recebi do do Fedora 13 A FAQ do SELinux está aqui então eu pessoalmente acredito que existe uma maneira com o system-config-selinux, eu simplesmente não sei os detalhes ...

    
por Michael Mao 15.04.2011 / 07:13

6 respostas

3

Para o Fedora 14, como no el6, acho que você pode simplesmente descarregar o módulo http SELinux, rodando

semodule -r httpd

Isso provavelmente fará com que o httpd seja executado como initrc_t ou unconfined_t .

Se isso não funcionar para o F14, você pode desligar o booleano do SELinux (o 'antigo', do el5), assim:

setsebool httpd_disable_trans 1

e use

setsebool -P httpd_disable_trans 1

para torná-lo permanente

    
por 15.04.2011 / 09:43
3

Convertendo meu comentário anterior em uma resposta, para a demanda popular;)

From the you-learn-something-everyday department: I saw Dan Walsh give a presentation yesterday, in which he explained the new way of disabling confinement for applications in newer releases of Fedora and EL6. You no longer set a boolean to disable transition (which sometimes causes a cascade in booleans that need to be set for everything to work), but you put a certain type in permissive mode. You do this by running the 'semanage permissive -a TYPE' command (in your case 'semanage permissive -a httpd_t'). This leaves SELinux on for httpd_t, but in permissive mode. – wzzrd May 20 '11 at 8:45

    
por 12.12.2014 / 15:26
1

Eu não tenho certeza de como você desliga o SELinux por um único serviço - eu suspeito que você não pode.

Mas o que você pode fazer é usar o runcon para definir o processo do apache para ser executado em um contexto irrestrito.

Você pode pensar em runcon como sudoers para o selinux. Ele permite que você especifique em qual contexto executar um processo.

Você precisaria modificar seu script de inicialização do Apache adicionando algo como:

runcon unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Na parte do script de inicialização do httpd que realmente invoca o apache.

No meu host Fedora FC14 eu mudaria essa linha:

LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS

Para ler algo como:

LANG=$HTTPD_LANG daemon --pidfile=${pidfile} runcon unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 $httpd $OPTIONS

PS Eu realmente não testei isso no meu script de inicialização do apache, então o acima é um palpite sobre onde eu preciso colocá-lo, mas eu definitivamente usei o runcon para permitir que processos rodassem sem restrições antes, então vai funcionar, você só precisa encontrar o lugar certo.

    
por 15.04.2011 / 08:54
1

Não há booleano para desabilitar globalmente o SELinux para o httpd. Dito isso, você deve ler a página httpd_selinux(8) man para os contextos de arquivo relevantes que você deve usar; no seu caso, você quer httpd_sys_script_exec_t ou httpd_unconfined_script_exec_t e pode usar chcon para configurá-lo temporariamente para teste e semanage para defini-lo permanentemente.

    
por 15.04.2011 / 09:36
1

A questão não está totalmente clara - qual é exatamente a sua intenção?
Eu suponho que você não está tentando abrir a porta HTTP, como isso seria feito com o firewall em vez do próprio Selinux.
Então, talvez você esteja tentando permitir que o daemon httpd grave em algum diretório que não esteja sob a raiz do documento usual?
Em caso afirmativo, você precisa ler as permissões do Selinux e defini-las para os diretórios que deseja acessar.
Aqui está um lugar para ler sobre isso: link

É relevante porque tanto o Fedora quanto o Centos estão relacionados à Red Hat, então isso provavelmente ajudará.

[Editar]
Por favor tente isto:
chcon -t textrel_shlib_t ThePathToTheFile

Isso foi sugerido por PabloTwo neste post: link

Também foi sugerido pela IBM neste post: link

    
por 15.04.2011 / 08:12
1

Eu também tive o mesmo problema quando estava usando o GBrowse2. O GBrowse2 salva arquivos temporários em locais que não são da webroot e define bloqueios em sessões fora da raiz da web. Como o GBrowse2 é executado no Apache, o SELinux dint permite que o httpd acesse / modifique diretórios fora do webroot. Eu segui o link fornecido no post anterior:

" Aqui está um lugar para ler sobre isso: link "

Embora não dê as instruções completas sobre como resolver o problema, ele me ajudou muito (Seção 4: Controle de Acesso do SELinux). Isso me deu uma ideia sobre como o SELinux distingue entre arquivos webroot e não-webroot. Você precisa alterar o tipo de pasta / arquivo não-webroot para aquele que é compatível com o tipo de processo httpd. Este tipo pode ser configurado usando os comandos fornecidos nos detalhes do erro do SELinux (comandos semanage e restorecon). Depois de consertar o tipo de pasta que não é webroot, o GBrowse2 poderia criar novos arquivos na pasta que não é webroot e cujo tipo foi alterado.

    
por 09.11.2012 / 00:31