Cách định cấu hình thư mục riêng với Apache

Tác giả sysadmin, T.M.Hai 31, 2022, 03:08:23 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Cách định cấu hình thư mục riêng với Apache


Theo mặc định, Apache sẽ phân phát nội dung cho bất kỳ ai yêu cầu nội dung đó, điều này về cơ bản sẽ công khai nội dung đó. Chúng tôi có thể thêm một số cấu hình đơn giản bổ sung để tạo một thư mục riêng chỉ có thể được truy cập dựa trên địa chỉ IP nguồn hoặc bằng tổ hợp tên người dùng và mật khẩu hoặc thậm chí dựa trên tư cách thành viên nhóm người dùng.

Điều này được xử lý theo mặc định thông qua mod_authz_core được cài đặt mặc định với Apache, mô-đun này được sử dụng để định cấu hình ủy quyền để chúng tôi chỉ có thể cho phép người dùng đã xác thực được phép truy cập vào một số phần nhất định của trang web.

Lưu ý: Trong ví dụ này, chúng tôi đang làm việc với Apache 2.4 trong CentOS 7, một số bước có thể khác nhau tùy thuộc vào phiên bản Apache của bạn và bản phân phối Linux cụ thể.

1. Tạo tài khoản người dùng

Trong ví dụ của chúng tôi, chúng tôi sẽ tạo một người dùng và mật khẩu có thể truy cập thư mục /secret/ của trang web của chúng tôi. Trước tiên, hãy tạo người dùng sẽ có quyền truy cập, điều này có thể được thực hiện bằng lệnh htpasswd như hình bên dưới.

Mã nguồn [Chọn]
[root@centos7 ~]# htpasswd -c /etc/httpd/htpasswd test
New password:
Re-type new password:
Adding password for user test

Ở đây chúng tôi đang sử dụng -c để tạo tệp /etc/httpd/htpasswd, đây là tệp sẽ chứa tên người dùng và mật khẩu của chúng tôi cho người dùng có tên 'test'. Chỉ nên sử dụng cờ -c trong lần đầu tiên bạn tạo tệp, nếu không, nếu bạn sử dụng lại cờ này, nó sẽ ghi đè lên tất cả nội dung trước đó bằng một tệp mới.

Sau khi nhập 2 lần mật khẩu cho tài khoản thì file sẽ được tạo, chúng ta có thể xem nội dung như hình bên dưới.

Mã nguồn [Chọn]
[root@centos7 ~]# cat /etc/httpd/htpasswd
test:$apr1$a55SSGwb$ZB2Of7y3wMzDO1NeLtfEX1

Ở đây chúng ta có thể thấy rằng người dùng 'thử nghiệm' tồn tại cùng với mật khẩu được mã hóa. Theo mặc định, tất cả người dùng sẽ có thể đọc được tệp này, vì vậy bạn có thể muốn thay đổi điều đó - tuy nhiên, Apache sẽ cần có khả năng đọc được tệp đó.

2. Cấu hình Apache

Dưới đây là một số cấu hình ví dụ mà bạn có thể đặt vào /etc/httpd/conf/httpd.conf

Mã nguồn [Chọn]
<Directory /var/www/html/secret>
  AuthType Basic
  AuthName "Private Content!"
  AuthUserFile /etc/httpd/htpasswd
  Require valid-user
</Directory>

Sau khi lưu các thay đổi vào tệp, bạn có thể kiểm tra xem cú pháp có đúng không với 'apachectl configtest'. Khi những sửa đổi này đã được áp dụng, Apache phải được tải lại để thực sự áp dụng chúng như hình bên dưới. Chúng tôi cũng có hướng dẫn nếu bạn cần thêm thông tin về cách quản lý dịch vụ với systemctl.

Mã nguồn [Chọn]
systemctl reload httpd
Hãy giải thích chức năng của từng dòng cấu hình ở đây.

  • Directory: Điều này được sử dụng để chỉ định thư mục áp dụng cấu hình sau, ở đây chúng tôi đang nói rằng /var/www/html/secret là thư mục trên máy chủ web phải ở chế độ riêng tư.
  • AuthType: Cái này chọn loại xác thực sẽ sử dụng trên thư mục được chỉ định.
  • AuthName: Về cơ bản, đây là văn bản sẽ hiển thị khi đăng nhập.
  • AuthUserFile: Điều này xác định vị trí của tệp chứa tên người dùng và mật khẩu mà chúng tôi đã tạo trước đó bằng lệnh 'htpasswd'.
  • Require: Ở đây chúng tôi đang yêu cầu một người dùng hợp lệ để xác thực, đây là bất kỳ người dùng nào tồn tại trong tệp /etc/httpd/htpasswd mà chúng tôi đã tạo. Thay vì yêu cầu bất kỳ người dùng hợp lệ nào, thay vào đó, chúng tôi có thể chỉ định những người dùng cụ thể bằng "Yêu cầu người dùng thử nghiệm", điều này sẽ chỉ cho phép người dùng thử nghiệm truy cập bất kể người dùng nào khác đã được tạo. Thay vào đó, chúng tôi chỉ có thể cho phép truy cập từ một địa chỉ IP cụ thể bằng cách sử dụng "Yêu cầu ip 1.2.3.4".

Việc cho phép truy cập dựa trên tên người dùng không có khả năng mở rộng cao, thay vào đó có thể chỉ định và cho phép các nhóm. Điều này có thể được thực hiện bằng cách thêm cấu hình sau vào tệp /etc/httpd/conf/httpd.conf.

Mã nguồn [Chọn]
  AuthGroupFile /etc/httpd/htgroup
  Require group groupname

  • AuthGroupFile: Điều này xác định vị trí của tệp chứa tên nhóm và người dùng là thành viên của nhóm. Tệp có thể được chỉnh sửa bằng trình soạn thảo văn bản và phải được định dạng là 'tên nhóm: user1 user2', vì vậy, nhóm được chỉ định trước, sau đó là tất cả người dùng được xác định trong /etc/httpd/htpasswd, những người thuộc về nhóm cụ thể đó.
  • Require: Trong trường hợp này, yêu cầu chỉ định tên nhóm 'tên nhóm', điều này thay thế dòng Yêu cầu người dùng hoặc Yêu cầu người dùng hợp lệ trước đó.

Ở đây, chúng tôi đang sử dụng một tệp cục bộ đơn giản chứa tên người dùng và mật khẩu của các tài khoản có quyền truy cập, điều này rất cơ bản, thay vào đó, chúng tôi có thể xác thực đối với một dịch vụ bên ngoài như IPA hoặc Active Directory qua LDAP/Kerberos với mod_authnz_ldap hoặc mod_auth_kerb, cả hai đều có thể được cài đặt với 'yum'.

3. Thử nghiệm

Bạn có thể kiểm tra cấu hình bằng cách duyệt đến địa chỉ IP của máy chủ web (hoặc tên miền nếu được định cấu hình) và chỉ định thư mục mà bạn đã định cấu hình để xác thực tên người dùng và mật khẩu. Trong trường hợp của tôi, máy ảo CentOS 7 của tôi là 192.168.1.10. Khi duyệt đến thư mục/bí mật, tôi được nhắc với thông báo hiển thị bên dưới.


Điều này đảm bảo rằng cần có tên người dùng và mật khẩu để xem   Đăng nhập để xem liên kết, nếu nhập sai tên người dùng và mật khẩu, quyền truy cập sẽ bị từ chối.

Cũng cần lưu ý rằng trong ví dụ này, tôi đang truy cập trang bằng HTTP văn bản rõ ràng, vì vậy khi nhập tên người dùng và mật khẩu, chúng sẽ chuyển đến máy chủ ở dạng rõ ràng và có thể đọc được qua dây. Điều này có thể được bảo mật hơn nữa bằng cách định cấu hình TLS với Apache sẽ mã hóa tên người dùng và mật khẩu khi truyền, cũng như các yêu cầu khác giữa bạn và máy chủ web.

4. Hạn chế tên máy chủ

Chúng tôi cũng có thể chấp nhận hoặc từ chối quyền truy cập dựa trên tên máy chủ của khách hàng đang xem trang bằng chỉ thị "Yêu cầu", như minh họa bên dưới.

Mã nguồn [Chọn]
Require host host1.example.com
Trong trường hợp này, chỉ máy   Đăng nhập để xem liên kết mới được chấp nhận. Điều này cũng có thể được áp dụng cho một địa chỉ hoặc dải IP với "Yêu cầu ip xxxx".

5. Thêm thông tin

Nếu bạn gặp khó khăn hoặc gặp khó khăn trong việc ghi nhớ bất kỳ điều nào trong số này, hãy nhớ gói httpd-manual có thể được cài đặt và xem tại   Đăng nhập để xem liên kết.

Từ trang chính, chỉ cần chọn Xác thực và Ủy quyền hoặc Kiểm soát Truy cập để được trợ giúp về chủ đề này.

Với một số cấu hình Apache cơ bản, chúng tôi đã có thể thực thi quyền truy cập tên người dùng và mật khẩu vào nội dung trang web cụ thể. Điều này có thể được mở rộng với xác thực dựa trên Kerberos hoặc LDAP thay vì loại Cơ bản được sử dụng ở đây chỉ định một tệp cục bộ chứa nhiều tên người dùng và mật khẩu, một giải pháp an toàn và có thể mở rộng hơn. Bạn cũng nên định cấu hình Apache bằng TLS để mã hóa tên người dùng và mật khẩu chuyển đến máy chủ web để tăng cường bảo mật hơn nữa.