Acesso de gravação httpd do SELinux a um diretório

9

Eu sou novo no SELinux. veio do debian. Eu quero dar httpdacesso a um diretório.

O Navegador de alertas do SELinux sugere:

# grep httpd /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp 

Eu não conseguia entender como esse comando funciona. Eu não especifico um caminho de diretório em nenhum lugar. como ele sabe qual diretório permitir httpd?

Anteriormente, usei o grep para extrair texto da saída ou arquivo. Mas aqui o grep está sendo usado em um processo. Que eu não entendi.

Também qual é a solução real. Se eu quiser conceder acesso de gravação httpd a um diretório?

Neel Basu
fonte
4
E para responder sua outra pergunta, o audit2allow lê o arquivo de log do SELinux e escreve uma política que permite qualquer coisa que tenha sido bloqueada; o nome do diretório estará na mensagem de log. Ao grepping para httpd, você o está limitando um pouco, mas o método ainda é mais amplo do que deveria ser.
miken32
Resposta relevante: unix.stackexchange.com/questions/511929/…
Salah-1

Respostas:

17

Veja como alterar permanentemente o contexto de um diretório:

# install semanage if you don't already have it:
yum install policycoreutils-python

# give the directory a new default context. The part at the end is a regex.
semanage fcontext -a -t httpd_sys_rw_content_t "/path/to/directory(/.*)?"

# apply the default context to the directory
restorecon -R /path/to/directory

Aqui está mais uma documentação sobre os diferentes contextos para httpd:

RHEL 7: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/SELinux_Users_and_Administrators_Guide/sect-Managing_Confined_Services-The_Apache_HTTP_Server-Types.html

RHEL 6: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Managing_Confined_Services/sect-Managing_Confined_Services-The_Apache_HTTP_Server-Types.html

Greg
fonte
Perfeito! Trabalhado para mim no Fedora 26, o policycoreutils-python já estava instalado por padrão.
Sir_Faenor
5

O SELinux utiliza atributos estendidos que podem ser anexados às estruturas de diretório no disco. Pense se estes são metadados. Listas de controle de acesso (ACLs) sendo outra.

Os atributos estendidos que você precisa anexar a um diretório são chamados de contextos e o SELinux age como um guarda de trânsito, garantindo que um executável que tenha determinados contextos tenha permissão para acessar o sistema de arquivos com base nesses contextos. Você pode ver o que está disponível no diretório usando o -Zinterruptor para ls.

$ sudo ls -Z /var/www
drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html

Aqui você pode ver que esses diretórios têm o contexto httpd_sys_script_exec_t:s0no cgi-bindiretório e o htmldir. tem httpd_sys_content_t:s0.

Você pode adicioná-los usando o chconcomando:

$ sudo chcon -t httpd_sys_content_t public_html

O comando que você está perguntando simplesmente carregará o módulo. mypoll.ppEu não acredito que ele concederá permissões para qualquer coisa; provavelmente há mais mensagens no audit.logque você está perdendo com o seu comando, que lhe dirá com mais detalhes o que você precisa fazer para permitir o acesso.

Eu o encorajo a dedicar algum tempo e se familiarizar com o SELinux. É confuso no começo, mas geralmente é direto, depois de passar um pouco de tempo com ele. Veja os recursos abaixo para começar.

Referências

slm
fonte
Obrigado. Eu vou passar por eles. Mas você pode me dizer por enquanto o que preciso fazer para conceder acesso de gravação a este diretório?
Neel Basu
Se for o conteúdo que você deseja que o Apache leia, você provavelmente precisará adicionar esse contexto ao diretório:chcon -R -t httpd_sys_content_t <dir>
slm