Apache ủy quyền cho người dùng được phép?


7

Tôi đã đọc câu trả lời cho câu hỏi này:

/programming/4102763/apache-basic-authentication-except-for-those-allowed

Nó giúp tôi hiểu cách không xác thực một số người dùng (theo IP):

<Directory /var/www/files/>
    Require valid-user
    Allow from 192.168.1.2
    Satisfy Any
    AuthUserFile /etc/apache2/basic.pwd 
    AuthName "Please enter username and password" 
    AuthType Basic  
</Directory>

Hãy tưởng tượng tôi có DB này (Khác với DB được sử dụng để xác thực):

User        IP 
Mark        192.168.1.2
Mike        192.168.1.3
Karl        192.168.1.4

1- Tôi có thể cho phép tất cả các địa chỉ IP được lưu trữ trong DB bằng cách sử dụng cấu hình trong Apache không? Tôi không muốn một giải pháp tĩnh (DB đang thay đổi linh hoạt)?

2- Một vấn đề khác là mất quyền ủy quyền của IP được phép, Apache có thể sử dụng DB này để ủy quyền không, nếu người dùng được phép lấy các trang mà không cần xác thực? Chi tiết: Chúng tôi biết khi Apache xác thực người dùng, họ biết tên người dùng từ thông tin xác thực, nhưng với Allowing, tên người dùng sẽ bị mất, tôi muốn Apache trích xuất tên người dùng của IP mà nó cho phép từ cùng một bảng mà nó trích xuất địa chỉ IP?

CẬP NHẬT:

Lưu ý: Tôi nghĩ câu trả lời của Tony có thể hữu ích nhưng tôi cũng muốn các câu trả lời khác (điều này không bắt buộc tôi phải xây dựng một mô-đun).

Mục tiêu của tôi cho câu hỏi này là "đăng nhập một lần":

  • Tôi sử dụng freeradius để xác thực người dùng nội bộ (bên trong Mạng) vì vậy tôi không muốn Apache xác thực lại họ.

  • Tôi muốn Apache xác thực người dùng bên ngoài bằng LDAP.

  • Giải pháp của tôi là sử dụng AllowChỉ thị để cho phép người dùng nội bộ không có Xác thực nhưng tôi cần Cho phép họ sử dụng DB (Vấn đề đầu tiên)? và cố gắng định cấu hình Apache để ủy quyền cho người dùng nội bộ (mà tôi không xác thực) (vấn đề thứ hai)?

Lưu ý: Việc ủy ​​quyền cho người dùng bên ngoài rất dễ dàng khi sử dụng LDAP (vì Apache Biết tên của người dùng mà họ đang xử lý từ thông tin xác thực).

Là giải pháp được đề xuất của tôi có đủ điều kiện để làm những gì tôi muốn làm không, nếu không, những gì bạn đề xuất là một giải pháp?

Câu trả lời:


5

Bạn đã thử mod-auth bên ngoài chưa , nó cho phép bạn thực hiện cơ chế xác thực tùy chỉnh cho Apache.

Nó cho phép bạn truy cập vào các biến môi trường như IP, USER, PASS, v.v. Bạn có thể viết một tập lệnh bằng ngôn ngữ mà bạn quen thuộc và lấy dữ liệu xác thực từ cơ sở dữ liệu của bạn.

Wiki có một số ví dụ.

Nếu bạn xây dựng một tập lệnh xác thực tùy chỉnh, hãy đảm bảo rằng nó được mã hóa tốt (bảo mật thông minh).

Mô-đun có sẵn trên CentOS (mod_authnz_external) và trên Ubuntu (libapache2-mod-authnz-bên ngoài)

Đây là một ví dụ cấu hình Apache cơ bản:

LoadModule authnz_external_module modules.d/mod_authnz_external.so
DefineExternalAuth my_auth  environment /tmp/auth.sh

<Location />
   AuthType Basic
   AuthName "My super special access"
   AuthBasicProvider external
   Require valid-user
   AuthExternal my_auth
</Location>

Đây là tập lệnh rất đơn giản ghi nhật ký IP NGƯỜI DÙNG và PASSWORD và chỉ chấp nhận xác thực nếu người dùng được cung cấp là 'Tony'.

Trong ví dụ cụ thể này, tập lệnh được lưu trong /tmp/auth.sh với tập bit thực thi. Bạn có thể làm bất cứ điều gì bạn muốn (lọc theo IP, tên người dùng, v.v.).

#!/bin/bash

echo $(date) ${IP} >> /tmp/log.txt
echo $(date) ${USER} >> /tmp/log.txt
echo $(date) ${PASS} >> /tmp/log.txt

#Very basic filtering.
if [[ "${USER}" != "Tony" ]]
then
        exit 1;
fi

Cảm ơn điều này có thể hữu ích, bạn có thể cung cấp cho tôi thêm một số thông tin (hoặc liên kết).
Nidal

đặc biệt là với centos.
Nidal

1
Kiểm tra điều này. Tôi nghĩ rằng nó có tất cả thông tin bạn cần: code.google.com/p/mod-auth-external/wiki/ConfigApache24
Tony

Cảm ơn một lần nữa vì Bản cập nhật tuyệt vời đó, nhưng làm cách nào tôi có thể sử dụng tập lệnh này đểfilter by IP, username, etc.
Nidal

1
Đây chỉ là một ví dụ. Bạn có thể sẽ viết kịch bản bằng ngôn ngữ kịch bản mà bạn cảm thấy thoải mái ... Bạn sẽ muốn kiểm tra dựa trên cơ sở dữ liệu hoặc ít nhất là một tệp. $ (Ngày) ở đây chỉ là để thêm dấu thời gian vào tệp nhật ký. Tôi sẽ cung cấp một bản cập nhật với một ví dụ về lọc.
Tony
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.