क्या Nginx LDAP प्रमाणीकरण का समर्थन करता है?


10

क्या nginx ldap प्रमाणीकरण का समर्थन करता है? मैं बस अपाचे से विस्थापित हो गया हूं और अपने सभी प्रमाणीकरणों को स्थानांतरित करना चाहूंगा जो ओपनडैप और mod_auth_ldap पर nginx पर आधारित हैं। अगर संभव हो तो मुझे बताएं।

इस पृष्ठ से सभी मॉड्यूलों को सूचीबद्ध करने के लिए, मेरे पास LDAP के बारे में कोई उल्लेख नहीं है। धन्यवाद,

जवाबों:


6

nginx LDAP नहीं करता: आपको xsendfileLDAP प्रमाणीकरण को संभालने के लिए आपके द्वारा बनाई गई 3 पार्टी स्क्रिप्ट के साथ उपयोग करना होगा

http://wiki.nginx.org/NginxXSendfile


यह मेरे सवाल का जवाब कैसे देता है - मैं विशेष रूप से सीधे ldap से बात करना चाहता हूं।
एडम बेनायून

3
nginx ldap नहीं करता है .. आपको एक 3 पार्टी स्क्रिप्ट के साथ xsendfile का उपयोग करना है जिसे आप ldap को हैंडल करने के लिए बनाते हैं
माइक


6

एक 3 पार्टी मॉड्यूल है nginx-auth-ldapजिसका आप उपयोग कर सकते हैं। मैंने अभी तक इसकी कोशिश नहीं की है, लेकिन मैं बाद में अपना जवाब अपडेट कर सकता हूं।

nginx X- त्वरण का उपयोग करना

के लिए दस्तावेज़ X-accelसिर्फ बताते हैं कि एक पृष्ठ पर एक फ़ाइल की सेवा nginx के लिए एक शीर्ष लेख का उपयोग कर सकते हैं (बजाय PHPया djangoया rubyया नाम-your-नहीं के रूप में कुशल के रूप में nginx-ढेर-यहाँ )।

उदाहरण वर्कफ़्लो:

  • उपयोगकर्ता का दौरा /download.php?path=/data/file1.txt,
  • download.phpरिटर्न WWW-Authenticate+ 401 Unauthorized,
  • उपयोगकर्ता का ब्राउज़र प्रमाणीकरण फ़ॉर्म दिखाता है और पुनः प्रयास करता है ,
  • उपयोगकर्ता का दौरा /download.php?path=/data/file1.txtलेकिन अब nginxसाख है,
  • nginxपास कर सकते हैं $remote_userऔर $http_authorizationकरने के लिए fastcgiस्क्रिप्ट,
  • download.phpप्रमाणीकरण करता है और तय करता है कि 403 Forbiddenहेडर X-Accel-Redirectहेडर को वापस करना है या नहीं ।

nginx internalस्थान सेट करना

जब आप X-Accelस्थैतिक संपत्ति की सेवा करने के लिए उपयोग कर सकते हैं , तो यहां उपयोग मामला है कि हम अनुरोधों को प्रमाणित करना चाहते हैं, यही कारण है कि हम उपयोग करते हैं internal

location /protected/data/ {
    internal;
    alias /path/to/data/files/;
}

डाउनलोड स्क्रिप्ट सेट करना

ये रहा:

location /download.php$ {
    fastcgi_pass  unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_param SCRIPT_FILENAME /scripts/download.php;
    fastcgi_param PHP_AUTH_USER $remote_user;
    fastcgi_param PHP_AUTH_PW $http_authorization;
    include fastcgi_params;
}

कृपया ध्यान दें : PHP स्क्रिप्ट का उपयोग करता है PHP_AUTH_USERऔर PHP_AUTH_PW, जिस पर कब्जा कर लिया जाता हैnginx , इसलिए उन्हें PHP स्क्रिप्ट में उपयोग करने के लिए, हमें उन्हें स्पष्ट रूप से प्रदान करने की आवश्यकता है।

PHP में एक ldap प्रमाणीकरण खाना बनाना

अपने प्रयोग के मामले के लिए, मैं स्थापित php-fpmऔर php-ldapअपने सिस्टम पर।

यहाँ एक सभ्य प्रमाणित कार्य है:

function authenticate() {
    // I'm watching you.
    error_log("authreq: " . $_SERVER['REMOTE_ADDR']);
    // mark that we're seeing the login box.
    $_SESSION['AUTH'] = 1;
    // browser shows login box
    Header("WWW-Authenticate: Basic realm=LDAP credentials.");
    Header("HTTP/1.0 401 Unauthorized");
    die('Unauthorized.');
}

यहाँ निषिद्ध पहुँच के लिए एक सभ्य कोड पथ है:

function forbidden() {
    error_log("forbidden: " . $_SERVER['REMOTE_ADDR'] . ', user: ' . $_SERVER['PHP_AUTH_USER']);
    // avoid brute force attacks
    sleep(rand(0, 3));
    // re-display login form
    session_destroy();
    // don't give too much info (e.g. user does not exist / password is wrong)
    Header("HTTP/1.0 403 Forbidden");
    // yes I did put the same message.
    die('Unauthorized.');
}

और LDAP प्रमाणीकरण के मांस के लिए:

function ldap_auth() {
    $ldap_server = 'ldap://ldap.example.com/';
    $ldap_domain = 'dc=example,dc=com';
    $ldap_userbase = 'ou=Users,' . $ldap_domain;
    $ldap_user = 'uid=' . $_SERVER['PHP_AUTH_USER'] . ',' . $ldap_userbase;
    $ldap_pass = $_SERVER['PHP_AUTH_PW'];

    // connect to ldap server
    $ldapconn = ldap_connect($ldap_server)
        or die("Could not connect to LDAP server.");
    ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3) ;
    if ($ldapconn) {
        // try to bind/authenticate against ldap
        $ldapbind = @ldap_bind($ldapconn, $ldap_user, $ldap_pass) || forbidden();
        // "LDAP bind successful...";
        error_log("success: " . $_SERVER['REMOTE_ADDR'] . ', user: ' . $_SERVER['PHP_AUTH_USER']);
    }
    ldap_close($ldapconn);
}

यहां आपके पास स्क्रिप्ट का मुख्य भाग है जो अनुरोध uri का उपयोग करता है।

if (@$_SESSION['AUTH'] != 1) {
    authenticate();
}

if (empty($_SERVER['PHP_AUTH_USER'])) {
    authenticate();
}

// check credentials on each access
ldap_auth();

// Get requested file name
// you can use the query string or a parameter
// or the full request uri if you like.
$path = $_GET["path"];

error_log("serving: " . $_SERVER['REMOTE_ADDR'] . ', user: ' . $_SERVER['PHP_AUTH_USER'] . ', path: ' . $path);

header("Content-Type: ", true);
header("X-Accel-Redirect: /protected" . $path);

अर्द्ध पारदर्शी फ़ाइल ब्राउज़िंग

मैंने इसे एक जिस्ट के रूप में भी प्रकाशित किया :

location /protected/data/ {
    internal;
    autoindex on;
    alias /path/to/data/files/;
}

location /data/ {
    fastcgi_pass  unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_param SCRIPT_FILENAME /scripts/auth.php;
    fastcgi_param PHP_AUTH_USER $remote_user;
    fastcgi_param PHP_AUTH_PW $http_authorization;
    include fastcgi_params;
}

और शरीर को छोड़कर बहुत ही समान PHP स्क्रिप्ट:

// Get requested file name
$path = $_SERVER["REQUEST_URI"];
error_log("serving: " . $_SERVER['REMOTE_ADDR'] . ', user: ' . $_SERVER['PHP_AUTH_USER'] . ', path: ' . $path);
header("Content-Type: ", true);
header("X-Accel-Redirect: /protected" . $path);

2

संक्षेप में: हाँ, NGINX LDAP का समर्थन करता है। दो ऐड-ऑन मॉड्यूल उपलब्ध हैं: एनजीआईएनएक्स में एक है, और जीथब पर एक और उपलब्ध है। एनजीआईएनएक्स समाधान पहली नज़र में जटिल लग रहा था, इसलिए मैं बाद वाले विकल्प के साथ गया, जिसे नग्नेक्स-कोर-लेडैप कहा जाता है। मैंने निम्नलिखित धागे में अपने अनुभव के बारे में कुछ संस्थापन नोट्स लगाए:

RHEL 7 पर nginx में ldap प्रमाणीकरण जोड़ें


हाउडी फेलिक्स, सर्वरफॉल्ट में आपका स्वागत है। meta.stackexchange.com/questions/8231/… क्या आप यहां अपना जवाब अपने दम पर दे सकते हैं?
लड़कियों को

क्या यह बेहतर है ? मैं बार-बार एक ही स्पील को फिर से हासिल नहीं करना चाहता था, जो मुझे क्रॉस-पोस्टिंग के करीब लगता था; ;-)
फेलिक्स

-1

ऐसा लगता है कि किसी को आपके प्रश्न का उत्तर http://forum.nginx.org/read.php?2,18552 पर मिला


कैसे मेरे सवाल का जवाब देता है?
एडम बेनाउन

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