सेलाइनक्स: httpd को एक विशिष्ट पोर्ट से कनेक्ट करने की अनुमति देता है


41

मेरा सिस्टम Apache2.2.15 के साथ CentOS 6.4 चल रहा है। सेलाइनक्स लागू हो रहा है और मैं अपने अजगर / wsgi ऐप के माध्यम से रेडिस के एक स्थानीय उदाहरण से जुड़ने की कोशिश कर रहा हूं। मुझे त्रुटि 13 मिली, अनुमति से इनकार कर दिया। मैं इसे कमांड के माध्यम से ठीक कर सकता था:

setsebool -P httpd_can_network_connect

हालाँकि, मैं बिल्कुल नहीं चाहता कि httpd सभी tcp पोर्ट से जुड़ सके। मैं कैसे निर्दिष्ट कर सकता हूं कि कौन से पोर्ट / नेटवर्क httpd को कनेक्ट करने की अनुमति है? अगर मैं http को 6379 (रेडिस) पोर्ट या 127.0.0.1 पर किसी भी tcp से कनेक्ट करने की अनुमति देने के लिए एक मॉड्यूल बना सकता हूं, तो यह बेहतर होगा। यकीन नहीं होता कि मेरा व्यामोह इस पर इतना प्रबल क्यों है, लेकिन हे ...

किसी को पता है?


क्या छद्म के माध्यम से इसे बाहर जाने के लिए मजबूर करना बेहतर नहीं होगा? इस तरह से आप ए) बी पर क्या पहुँचा जा सकता है पर बेहतर नियंत्रण कर सकते हैं) क्या हुआ और कब हुआ, इस पर बेहतर ऑडिटिंग है।
कैमरन केर

जवाबों:


51

डिफ़ॉल्ट रूप से, SELinux नीति केवल उन सेवाओं से जुड़े मान्यता प्राप्त बंदरगाहों तक सेवाओं की पहुँच प्रदान करेगी:

# 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 पॉलिसी में Redis port (6379) जोड़ें

# 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.

आप setroubleshoot-serverRPM भी स्थापित कर सकते हैं और चला सकते हैं: sealert -a /var/log/audit/audit.log- यह आपको उपयोगी सुझावों (ऊपर कमांड सहित) के साथ एक अच्छी रिपोर्ट देगा।

कनेक्शन का परीक्षण करने के लिए PHP स्क्रिप्ट:

# 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
मुझे फेडल 23 पर समस्या थी। ई-मेल भेजने के लिए (पोर्ट 25 पर 127.0.0.1 से कनेक्ट करके) एक पर्ल स्क्रिप्ट से (नेट :: एसएमटीपी का उपयोग करके) httpd से शुरू हुआ। "Httpd को पोर्ट 25 से कनेक्ट करने की अनुमति" वह नहीं है जो उस मामले में दिख रही है। वास्तव में पोर्ट 25 को SELinux प्रकार में जोड़ना http_port_tविफल रहता है क्योंकि पोर्ट 25 पहले से ही (दूसरे SELinux प्रकार के लिए) प्रयोग किया जाता है ValueError: Port tcp/25 already defined:। Httpd को पोर्ट 25 से कनेक्ट करने की अनुमति देने का सही तरीका है कि संबंधित SELinux नीति बूलियन को इस पर सेट करें: setsebool -P httpd_can_sendmail on(देखें getseebool -a)। (भाग 2 में जारी)
डेविड टोनहोफर

1
(भाग 1 से जारी) लेकिन यदि आप एक पर्ल स्क्रिप्ट से भेजना चाहते हैं, तो आप स्पष्ट रूप से एक SELinux मॉड्यूल है कि अनुमति देता है बनाने के लिए: sealert -b; sealert -a /var/log/audit/audit.log; grep perl /var/log/audit/audit.log | audit2allow -M mypol; semodule -v -i mypol.pp। फिर यह काम करता है!
डेविड टोनहोफर

getsebool -aकमांड में @DavidTonhofer माइनर टाइपो (एक कम e)।
दाविदजब

1
@DavidTonhofer आपको मौजूदा पोर्ट के लिए एक नई पॉलिसी बनाने की ज़रूरत नहीं है, आप इसके बजाय इसे संशोधित कर सकते हैं: semanage port -m -t http_port_t -p tcp 25देखेंsemanage port --help
HTF

ज़ेबिक्स के लिए, सेंटोस 7.5 पर पहले से ही एक विशिष्ट बूलियन है:setsebool -P httpd_can_connect_zabbix true
डेविड टोनहोफर

17

आपको उपयोग करने की आवश्यकता हो सकती है

semanage port -m -t http_port_t -p tcp 6379

यदि वीर्यपात गायब है, तो पैकेज पॉलीसेकेर्यूटिल्स-पायथन जोड़ें

yum install policycoreutils-python

semanagepolicycoreutils-python-utilsअब हो सकता है (कम से कम फेडोरा 23 पर)
डेविड टोनहोफर

1
CentOS 7 में अभी भी शामिल semanageहै policycoreutils-python
jxmallett

किसी और चीज़ के बजाय सवाल का जवाब देने के लिए धन्यवाद।
फ्लोरियन हीगल

3

आप अनुमोदक मोड में अस्थायी डाल SELinux सकता है और httpd करते हैं, redis से कनेक्ट तो पैदा करते हैं और उपयोग कर एक कस्टम नीति मॉड्यूल का निर्माण audit2allow

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.