Nginx LDAP প্রমাণীকরণ সমর্থন করে?


10

Nginx ldap প্রমাণীকরণ সমর্থন করে? আমি সবেমাত্র অ্যাপাচি থেকে স্থানান্তরিত হয়েছি এবং আমার সমস্ত প্রমাণীকরণ যা ওপেনড্যাপ এবং মোড_আউথ_লাপের উপর ভিত্তি করে এনজিএনএক্সে স্থানান্তরিত করতে চাই। সম্ভব হলে আমাকে জানাতে দিন।

এই পৃষ্ঠাটি থেকে এনগিনেক্সের সমস্ত মডিউল তালিকাভুক্ত করা হয়েছে, আমি এলডিএপি সম্পর্কে কোনও উল্লেখ দেখতে পাচ্ছি না। ধন্যবাদ,

উত্তর:


6

এনগিনেক্স এলডিএপ করে না: xsendfileএলডিএপি প্রমাণীকরণ হ্যান্ডেল করতে আপনার তৈরি একটি তৃতীয় পক্ষের স্ক্রিপ্ট ব্যবহার করতে হবে

http://wiki.nginx.org/NginxXSendfile


এটি কীভাবে আমার প্রশ্নের উত্তর দেয় - আমি বিশেষভাবে সরাসরি লডাপের সাথে কথা বলতে চাই।
অ্যাডাম বেনায়ুন

3
nginx ldap করে না .. ldap auth হ্যান্ডেল করতে আপনার তৈরি একটি তৃতীয় পক্ষের স্ক্রিপ্ট সহ আপনাকে xsendfile ব্যবহার করতে হবে
মাইক


6

একটি তৃতীয় পক্ষের মডিউল রয়েছে nginx-auth-ldapযা আপনি ব্যবহার করতে পারেন। আমি এটি এখনও চেষ্টা করি নি, তবে আমি আমার উত্তরটি পরে আপডেট করতে পারি।

এনগিনেক্স এক্স-এসিল ব্যবহার করে

ডকুমেন্টেশন X-accelশুধু ব্যাখ্যা করেছেন যে একটি পৃষ্ঠায় একটি ফাইল পরিবেশন করা nginx আছে একটি শিরোলেখ ব্যবহার করতে পারেন (বরং PHPবা djangoবা rubyবা নাম-আপনার নয় হিসাবে দক্ষ হিসাবে 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_AUTH_USERএবং PHP_AUTH_PW, যার দ্বারা বন্দী করা হয়nginx যাতে তাদের পিএইচপি স্ক্রিপ্টের মধ্যে ব্যবহার করার জন্য তাই হয়, আমরা স্পষ্টভাবে প্রদান দিতে হবে।

পিএইচপি মধ্যে একটি 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);
}

এখানে আপনার কাছে স্ক্রিপ্টের মূল অংশ যা অনুরোধ ইউরি ব্যবহার করে।

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;
}

এবং শরীর ব্যতীত প্রায় একই পিএইচপি স্ক্রিপ্ট:

// 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

সংক্ষেপে: হ্যাঁ, এনজিআইএনএক্স এলডিএপ সমর্থন করে। দুটি অ্যাড-অন মডিউল উপলব্ধ: এনজিআইএনএক্সের একটি রয়েছে, এবং গিথুবে আরও একটি উপলব্ধ রয়েছে। এনজিআইএনএক্স সমাধানটি প্রথম নজরে বরং জটিল বলে মনে হয়েছিল, তাই আমি পরবর্তী পছন্দটি দিয়ে চলেছি, যাকে বলা হয় এনজিনেক্স-অউথ-এলডিএপ। আমি নীচের থ্রেডে আমার অভিজ্ঞতা সম্পর্কিত কয়েকটি ইনস্টলেশন নোট রেখেছি:

RHEL 7 এ nginx এ ldap প্রমাণীকরণ যুক্ত করুন


হাউই ফেলিক্স, সার্ভারফল্টে আপনাকে স্বাগতম। meta.stackexchange.com/questions/8231/… আপনি কি এখানে নিজের উত্তরটি নিজেরাই দাঁড়াতে পারবেন?
মেয়ে

ইহা কি ভাল ? আমি বার বার একই স্পিলটিকে পুনরায় সাজতে চাইনি, যা আমার কাছে ক্রস পোস্ট করার কাছাকাছি মনে হয়েছিল ... ;-)
ফেলিক্স

-1

দেখে মনে হচ্ছে http://forum.nginx.org/read.php?2,18552 তে আপনার প্রশ্নের উত্তর কেউ পেয়েছে


কিভাবে যে আমার প্রশ্নের উত্তর দেয়?
অ্যাডাম বেনায়ুন

এটি Xsendfile এবং একটি স্ক্রিপ্ট ব্যবহার সম্পর্কে কথা বলতে .. উপরের লিঙ্কে প্রশ্নের উত্তর পড়ুন। যদি এটি না হয় তবে আমি আপনার প্রশ্নটি ভুল পেয়েছি।
জিম্বাবাও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.