SElinux: httpd'nin belirli bir porta bağlanmasına izin ver


41

Sistemim apache2.2.15 ile CentOS 6.4 kullanıyor. SElinux zorluyor ve python / wsgi uygulamam aracılığıyla yerel bir redis örneğine bağlanmaya çalışıyorum. 13 hata alıyorum, izin reddedildi. Bunu komut aracılığıyla çözebilirim:

setsebool -P httpd_can_network_connect

Ancak, httpd'nin tüm tcp bağlantı noktalarına bağlanabilmesini istemiyorum. Httpd'nin hangi portlara / ağlara bağlanmasına izin verildiğini nasıl belirleyebilirim? Httpd'nin 127.0.0.1'deki 6379 (redis) bağlantı noktasına veya herhangi bir tcp'ye bağlanmasına izin verecek bir modül yapabilirsem, bu tercih edilir. Paranoyamın neden bu kadar güçlü olduğundan emin değilim, ama hey ...

Bilen var mı?


Bir vekil aracılığıyla çıkmaya zorlamak daha iyi olmaz mı? Bu şekilde a) neye erişilebileceğini daha iyi kontrol edebileceksiniz b) ne olup bittiğini daha iyi denetleyebileceksiniz.
Cameron Kerr

Yanıtlar:


51

SELinux politikası varsayılan olarak, servislerin yalnızca bu servislerle ilişkili tanınmış portlara erişmesine izin verir:

# semanage port -l | egrep '(^http_port_t|6379)'
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000
# curl http://localhost/redis.php
Cannot connect to redis server.

- SELinux politikasına Redis limanını (6379) ekle

# semanage port -a -t http_port_t -p tcp 6379
# semanage port -l | egrep '(^http_port_t|6379)'
http_port_t                    tcp      6379, 80, 81, 443, 488, 8008, 8009, 8443, 9000
# curl http://localhost/redis.php
Connected successfully.

Ayrıca setroubleshoot-serverRPM'yi yükleyebilir ve çalıştırabilirsiniz: sealert -a /var/log/audit/audit.log- size yararlı önerileri içeren güzel bir rapor verir (yukarıdaki komut dahil).

Bağlantıyı test etmek için PHP betiği:

# cat redis.php 
<?php

$redis=new Redis();
$connected= $redis->connect('127.0.0.1', 6379);

if(!$connected) {
        die( "Cannot connect to redis server.\n" );
}

echo "Connected successfully.\n";

?>

3
Fedora 23'te bir e-posta gönderme sorunu (25 numaralı bağlantı noktasında 127.0.0.1'e bağlanarak) bir perl komut dosyasından (Net :: SMTP kullanarak) httpd'den başladım. "Httpd'nin 25 numaralı bağlantı noktasına bağlanma izni" bu durumda aradığı şey değil. Gerçekten de SELinux'un türüne noktası 25 ekleme http_port_tnoktası 25 daha önce (bir SELinux'un türü için) kullanılır, çünkü başarısız: ValueError: Port tcp/25 already defined. Httpd'nin 25 numaralı bağlantı noktasına bağlanmasına izin vermenin doğru yolu, ilgili SELinux ilkesi booleanını açık konuma getirmektir: setsebool -P httpd_can_sendmail on(bkz. getseebool -a). (2. bölümde devam etti)
David Tonhofer

1
(part 1 den devam) Ama perl programı göndermek istiyorsanız, açıkça bu izin veren bir SELinux'un modül oluşturmak zorunda: sealert -b; sealert -a /var/log/audit/audit.log; grep perl /var/log/audit/audit.log | audit2allow -M mypol; semodule -v -i mypol.pp. O zaman çalışıyor!
David Tonhofer

@DavidTonhofer Komuttaki Küçük yazım hatası getsebool -a(biri daha az e).
davidjb

1
@DavidTonhofer, mevcut bağlantı noktası için yeni bir politika oluşturmak zorunda değilsiniz, onun yerine değiştirebilirsiniz:, semanage port -m -t http_port_t -p tcp 25bkz.semanage port --help
HTF

Zabbix için, zaten CentOS 7.5'te bir spinal boole var:setsebool -P httpd_can_connect_zabbix true
David Tonhofer

17

Kullanmanız gerekebilir

semanage port -m -t http_port_t -p tcp 6379

Semanage yoksa, policycoreutils-python paketini ekleyin.

yum install policycoreutils-python

semanagepolicycoreutils-python-utilsşimdi olabilir (en azından Fedora 23’de)
David Tonhofer

1
CentOS 7 hala içermektedir semanageiçinde policycoreutils-python.
jxmallett

Başka bir şey yerine soruya cevap verdiğiniz için teşekkür ederiz.
Florian Heigl

3

Geçici olarak selinux'u izin verilen moda geçirip httpd'nin redis'e bağlanmasına izin verebilir, ardından audit2allow kullanarak bir özel ilke modülü oluşturabilir ve oluşturabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.