Đây là một cách tiếp cận hướng dẫn cho trường hợp SELinux:
Tìm hiểu xem SELinux có hoạt động không:
$ sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
Nếu vậy, một số kiểm tra so sánh có thể giúp đỡ. Chẳng hạn, một máy chủ có DocumentRoot mặc định tại /var/www/html
, nhưng chúng tôi muốn nó ở một nơi khác như thế /path/to/document/root
.
Nếu SELinux không chủ động gây rối với tài nguyên, ls -dZ
trên thư mục sẽ hiển thị một cái gì đó như:
$ ls -dZ /path/to/document/root
? /path/to/document/root/
Mặt khác, nếu bối cảnh SELinux được áp dụng, ls -dZ
trông giống như:
$ ls -dZ /path/to/document/root
drwxrws--x+ cfgadm cfgadmin system_u:object_r:file_t:s0 /path/to/document/root
Nếu chúng ta so sánh với DocumentRoot đang hoạt động, nó sẽ trông giống như:
$ ls -dZ /var/www/html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
Các đối số _r
và _t
liên quan đến -r
( --role
và -t
( --type
) đến chcon
. Đây là trang người đàn ông:
NAME
chcon - change file security context
SYNOPSIS
chcon [OPTION]... CONTEXT FILE...
chcon [OPTION]... [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE...
chcon [OPTION]... --reference=RFILE FILE...
DESCRIPTION
Change the security context of each FILE to CONTEXT. With --reference,
change the security context of each FILE to that of RFILE.
--reference=RFILE
use RFILE's security context rather than specifying a CONTEXT value
-R, --recursive
operate on files and directories recursively
Đầu tiên, những điều sau đây có vẻ hiệu quả, nhưng có thể không.
$ sudo chcon -R -t httpd_sys_content_t /path/to/document/root
Nếu máy chủ web vẫn không thể xem DocumentRoot, hãy lưu ý rằng bối cảnh hoàn toàn quan trọng đối với root:
$ sudo chcon -R -t httpd_sys_content_t /path/to/document
$ sudo chcon -R -t httpd_sys_content_t /path/to
$ sudo chcon -R -t httpd_sys_content_t /path
Tại thời điểm này, máy chủ web có thể xem thư mục.
Vâng, tôi đã học được cách khó khăn tối nay.
LƯU Ý: Việc sử dụng chcon về mặt khái niệm có một nhược điểm trên mỗi tài liệu RedHat ( 5.6.1. Thay đổi tạm thời: chcon ) nêu rõ:
The chcon command changes the SELinux context for files. However, changes
made with the chcon command do not survive a file system relabel, or the
execution of the restorecon command.
Sử dụng semanage và restorecon để thực hiện các thay đổi lâu dài hơn. Một ví dụ ngắn gọn:
$ sudo semanage fcontext --add -t httpd_sys_content_t -s system_u \
"/path/to/document/root(/.*)?"
$ sudo restorecon -FR /path/to/document/root
Liên quan đến restorecon , lưu ý rằng -F là bắt buộc để ảnh hưởng đến toàn bộ bối cảnh (tức là người dùng và loại). Ngoài ra, -R có nghĩa là thay đổi đệ quy. Các đối số -v hoặc -p có thể hiển thị tiến trình theo kiểu dài dòng hoặc ngắn gọn. Sử dụng -FRnv để xem điều gì sẽ xảy ra mà không thực sự thay đổi.
Khi semanage được sử dụng theo cách này, có thể xem các thay đổi bảo mật cục bộ bằng một lệnh như:
$ sudo semanage export
Đầu ra của xuất khẩu semanage có thể được lưu và sử dụng bằng cách nhập semanage để giúp áp dụng một tập hợp các thay đổi cho các hệ thống khác nhau dễ dàng hơn.
LƯU Ý: Câu trả lời này cung cấp ngữ cảnh loại cơ bản nhất cho trang web. Bảo mật có thể chi tiết hơn nhiều. Ví dụ: xem danh sách các loại có thể áp dụng cho các trang máy chủ web với lệnh như:
$ seinfo -t | grep http
LƯU Ý: Các tiện ích như semanage và seinfo có thể không được cài đặt theo mặc định. Ít nhất là trên một số bản phân phối, các gói bắt buộc có thể được đặt tên giống như thế này:
policycoreutils-python
setools-console
DocumentRoot
, điều đó có thể cung cấp cho bạn cái nhìn sâu sắc về những gì máy chủ web đang nhìn thấy. Bạn cũng có thể muốn kiểm tra các thư mục khác dọc theo đường dẫn, mặc dù nếu nó thực sự/var/www/
không phải là vấn đề