Hosts.allow - Lệnh Linux - Lệnh Unix

TÊN

hosts_access - định dạng của các tệp điều khiển truy cập máy chủ

SỰ MIÊU TẢ

Trang hướng dẫn này mô tả một ngôn ngữ kiểm soát truy cập đơn giản dựa trên các mẫu máy khách (tên máy chủ / địa chỉ, tên người dùng) và máy chủ (tên quy trình, tên máy chủ / địa chỉ). Ví dụ được đưa ra ở cuối. Người đọc thiếu kiên nhẫn được khuyến khích bỏ qua phần EXAMPLES để được giới thiệu nhanh .Phiên bản mở rộng của ngôn ngữ điều khiển truy cập được mô tả trong tài liệu hosts_options (5). Các tiện ích mở rộng được bật vào thời gian xây dựng chương trình bằng cách xây dựng với -DPROCESS_OPTIONS.

Trong văn bản sau, daemon là tên quá trình của một quy trình mạng daemon , và máy khách là tên và / hoặc địa chỉ của một máy chủ yêu cầu dịch vụ. Tên quy trình mạng daemon được chỉ định trong tệp cấu hình inetd.

CÁC LOẠI KIỂM SOÁT TRUY CẬP

Phần mềm điều khiển truy cập tư vấn hai tập tin . Tìm kiếm dừng lại ở trận đấu đầu tiên.

Access sẽ được cấp khi một cặp (daemon, client) khớp với một mục trong tệp /etc/hosts.allow .

Nếu không, quyền truy cập sẽ bị từ chối khi một cặp (daemon, client) khớp với một mục trong tệp /etc/hosts.deny .

Nếu không, quyền truy cập sẽ được cấp.

Tệp kiểm soát truy cập không tồn tại được coi như là tệp trống. Do đó, điều khiển truy cập có thể được tắt bằng cách không cung cấp các tệp điều khiển truy cập.

QUY ĐỊNH KIỂM SOÁT TRUY CẬP

Mỗi tệp điều khiển truy cập bao gồm 0 hoặc nhiều dòng văn bản. Những dòng này được xử lý theo thứ tự xuất hiện. Tìm kiếm sẽ chấm dứt khi tìm thấy kết quả phù hợp.

Một ký tự dòng mới được bỏ qua khi nó được bắt đầu bởi một ký tự dấu gạch chéo ngược. Điều này cho phép bạn chia nhỏ các đường dài để dễ chỉnh sửa hơn.

Các dòng hoặc dòng trống bắt đầu bằng ký tự `# 'bị bỏ qua. Điều này cho phép bạn chèn các chú thích và khoảng trắng để các bảng dễ đọc hơn.

Tất cả các dòng khác phải thỏa mãn định dạng sau, mọi thứ giữa [] là tùy chọn:

daemon_list: client_list [: shell_command]

daemon_list là danh sách của một hoặc nhiều tên quy trình daemon (giá trị argv [0]) hoặc ký tự đại diện (xem bên dưới).

client_list là danh sách một hoặc nhiều tên máy chủ, địa chỉ máy chủ, mẫu hoặc ký tự đại diện (xem bên dưới) sẽ được khớp với tên máy chủ hoặc địa chỉ máy khách.

Các hình thức phức tạp hơn của daemon @ hostuser @ host được giải thích trong các phần trên các mẫu thiết bị đầu cuối máy chủ và trên các tra cứu tên người dùng của khách hàng, tương ứng.

Các phần tử danh sách phải được phân cách bằng khoảng trống và / hoặc dấu phẩy.

Ngoại trừ tra cứu nhóm mạng NIS (YP), tất cả kiểm tra kiểm soát truy cập đều phân biệt chữ hoa chữ thường.

MẪU

Ngôn ngữ kiểm soát truy cập thực hiện các mẫu sau:

Một chuỗi bắt đầu bằng `. ' tính cách. Tên máy chủ được khớp nếu các thành phần cuối cùng của tên khớp với mẫu được chỉ định. Ví dụ, mẫu `.tue.nl 'khớp với tên máy chủ` wzv.win.tue.nl'.

Một chuỗi kết thúc bằng `. ' tính cách. Địa chỉ máy chủ được khớp nếu các trường số đầu tiên của nó khớp với chuỗi đã cho. Ví dụ: mẫu '131.155'. khớp với địa chỉ của (gần như) mọi máy chủ trên mạng Đại học Eindhoven (131.155.xx).

Một chuỗi bắt đầu bằng ký tự `@ 'được coi là tên nhóm mạng NIS (trước đây là YP). Tên máy chủ được khớp nếu nó là một thành viên lưu trữ của nhóm netgroup được chỉ định. Các trận đấu nhóm không được hỗ trợ cho tên quy trình daemon hoặc tên người dùng của khách hàng.

Một biểu thức của biểu mẫu `nnnn / mmmm 'được hiểu là cặp` net / mask'. Địa chỉ máy chủ IPv4 được kết hợp nếu `net 'bằng bitwise AND của địa chỉ và` mặt nạ'. Ví dụ, mẫu net / mask `131.155.72.0/255.255.254.0 'khớp với mọi địa chỉ trong phạm vi` 131.155.72.0' đến '131.155.73.255'.

Một biểu thức của biểu mẫu `[n: n: n: n: n: n: n: n] / m 'được hiểu là cặp` [net] / prefixlen'. Địa chỉ máy chủ IPv6 được kết hợp nếu các bit `prefixlen 'của` net' bằng với các bit 'prefixlen' của địa chỉ. Ví dụ, mẫu [net] / prefixlen `[3ffe: 505: 2: 1 ::] / 64 'khớp với mọi địa chỉ trong phạm vi` 3ffe: 505: 2: 1 ::' đến '3ffe: 505: 2: 1: ffff: ffff: ffff: ffff '.

Một chuỗi bắt đầu bằng ký tự `/ 'được coi là tên tệp . Tên máy chủ hoặc địa chỉ được khớp nếu nó khớp với bất kỳ tên máy chủ hoặc mẫu địa chỉ nào được liệt kê trong tệp được đặt tên. Định dạng tệp là số không hoặc nhiều dòng có 0 hoặc nhiều tên máy chủ hoặc mẫu địa chỉ được phân tách bằng khoảng trắng. Mẫu tên tệp có thể được sử dụng ở bất kỳ nơi nào có thể sử dụng tên máy chủ hoặc mẫu địa chỉ.

Ký tự đại diện `* 'và`?' có thể được sử dụng để khớp với tên máy chủ hoặc địa chỉ IP . Không thể sử dụng phương thức kết hợp này cùng với kết hợp `net / mask ', đối sánh tên máy chủ bắt đầu bằng`.' hoặc kết hợp địa chỉ IP kết thúc bằng `. '.

WILDCARDS

Ngôn ngữ kiểm soát truy cập hỗ trợ các ký tự đại diện rõ ràng:

TẤT CẢ CÁC

Ký tự đại diện chung, luôn khớp.

ĐỊA PHƯƠNG

Khớp với bất kỳ máy chủ nào có tên không chứa ký tự dấu chấm.

KHÔNG XÁC ĐỊNH

Khớp với bất kỳ người dùng nào có tên không xác định và khớp với bất kỳ máy chủ nào có tên hoặc địa chỉ không xác định. Mẫu này nên được sử dụng cẩn thận: tên máy chủ lưu trữ có thể không khả dụng do các sự cố máy chủ tên tạm thời. Địa chỉ mạng sẽ không khả dụng khi phần mềm không thể tìm ra loại mạng đang nói đến.

BIẾT

Khớp với bất kỳ người dùng nào có tên được biết và khớp với bất kỳ máy chủ nào có tên địa chỉ được biết. Mẫu này nên được sử dụng cẩn thận: tên máy chủ lưu trữ có thể không khả dụng do các sự cố máy chủ tên tạm thời. Địa chỉ mạng sẽ không khả dụng khi phần mềm không thể tìm ra loại mạng đang nói đến.

PARANOID

Khớp với bất kỳ máy chủ nào có tên không khớp với địa chỉ của nó. Khi tcpd được xây dựng với-DPARANOID (chế độ mặc định), nó sẽ giảm yêu cầu từ các máy khách như vậy ngay cả trước khi xem các bảng điều khiển truy cập. Xây dựng mà không có-DPARANOID khi bạn muốn kiểm soát nhiều hơn các yêu cầu như vậy.

NGƯỜI HOẠT ĐỘNG

NGOẠI TRỪ

Mục đích sử dụng có dạng: `list_1 EXCEPT list_2 '; cấu trúc này khớp với bất kỳ thứ gì khớp với danh sách_1 trừ khi nó khớp với danh sách_2 . Toán tử EXCEPT có thể được sử dụng trong daemon_lists và trong client_lists. Toán tử EXCEPT có thể được lồng nhau: nếu ngôn ngữ điều khiển cho phép sử dụng dấu ngoặc đơn, `một EXCEPT b EXCEPT c 'sẽ phân tích cú pháp là` (một EXCEPT (b EXCEPT c))'.

SHELL COMMANDS

Nếu quy tắc kiểm soát truy cập phù hợp đầu tiên chứa một lệnh shell, lệnh đó phải chịu% thay thế (xem phần tiếp theo). Kết quả được thực thi bởi một tiến trình con / bin / sh với đầu vào, đầu ra và lỗi chuẩn được kết nối tới / dev / null . Chỉ định một `& 'ở cuối lệnh nếu bạn không muốn đợi cho đến khi nó hoàn tất.

Lệnh Shell không nên dựa vào cài đặt PATH của inetd. Thay vào đó, họ nên sử dụng tên đường dẫn tuyệt đối, hoặc họ nên bắt đầu với một PATH rõ ràng = tuyên bố bất kỳ.

Tài liệu hosts_options (5) mô tả một ngôn ngữ thay thế sử dụng trường lệnh shell theo cách khác và không tương thích.

% EXPANSIONS

Các mở rộng sau đây có sẵn trong các lệnh shell:

% a (% A)

Địa chỉ máy chủ khách (máy chủ).

% c

Thông tin khách hàng: người dùng @ host, địa chỉ người dùng @, tên máy chủ hoặc chỉ một địa chỉ, tùy thuộc vào lượng thông tin có sẵn.

% d

Tên quy trình daemon (giá trị argv [0]).

% h (% H)

Tên máy chủ lưu trữ (máy chủ) hoặc địa chỉ, nếu tên máy chủ không khả dụng.

% n (% N)

Tên máy chủ (máy chủ) của khách hàng (hoặc "không xác định" hoặc "hoang tưởng").

% p

Id quá trình daemon.

%S

Thông tin máy chủ: daemon @ host, địa chỉ daemon @ hoặc chỉ một tên daemon, tùy thuộc vào lượng thông tin có sẵn.

% u

Tên người dùng của khách hàng (hoặc "không xác định").

%%

Mở rộng thành một ký tự `% '.

Các ký tự trong% mở rộng có thể gây nhầm lẫn shell được thay thế bằng dấu gạch dưới.

SERVER ENDPOINT PATTERNS

Để phân biệt khách hàng theo địa chỉ mạng mà họ kết nối, hãy sử dụng các mẫu của biểu mẫu:

process_name @ host_pattern: client_list ...

Các mẫu như thế này có thể được sử dụng khi máy có địa chỉ internet khác nhau với tên máy chủ Internet khác nhau. Các nhà cung cấp dịch vụ có thể sử dụng cơ sở này để cung cấp các tệp lưu trữ FTP, GOPHER hoặc WWW với các tên internet thậm chí có thể thuộc về các tổ chức khác nhau. Xem thêm tùy chọn `twist 'trong tài liệu hosts_options (5). Một số hệ thống (Solaris, FreeBSD) có thể có nhiều địa chỉ internet trên một giao diện vật lý; với các hệ thống khác, bạn có thể phải sử dụng các giao diện giả SLIP hoặc PPP giả trong không gian địa chỉ mạng chuyên dụng.

Host_pattern tuân theo các quy tắc cú pháp giống như tên máy chủ và địa chỉ trong ngữ cảnh client_list. Thông thường, thông tin điểm cuối máy chủ chỉ khả dụng với các dịch vụ định hướng kết nối.

CLIENT USERNAME LOOKUP

Khi máy khách hỗ trợ giao thức RFC 931 hoặc một trong các con cháu của nó (TAP, IDENT, RFC 1413), chương trình trình bao bọc có thể truy xuất thêm thông tin về chủ sở hữu kết nối. Thông tin tên người dùng của khách hàng, khi có sẵn, được ghi lại cùng với tên máy chủ của khách hàng và có thể được sử dụng để khớp với các mẫu như:

daemon_list: ... user_pattern @ host_pattern ...

Trình bao bọc daemon có thể được cấu hình tại thời gian biên dịch để thực hiện tra cứu tên người dùng theo quy tắc (mặc định) hoặc để luôn luôn thẩm vấn máy khách. Trong trường hợp tra cứu tên người dùng theo quy tắc, nguyên tắc trên sẽ khiến tra cứu tên người dùng chỉ khi cả daemon_list và đối sánh host_pattern .

Một mẫu người dùng có cú pháp giống như một mẫu quy trình daemon, vì vậy các ký tự đại diện tương tự áp dụng (thành viên nhóm netgroup không được hỗ trợ). Người ta không nên mang đi với tra cứu tên người dùng, mặc dù.

Thông tin tên người dùng của khách hàng không thể tin cậy khi cần nhất, tức là khi hệ thống khách hàng bị xâm nhập. Nói chung, ALL và (UN) KNOWN là các mẫu tên người dùng duy nhất có ý nghĩa.

Tra cứu tên người dùng chỉ có thể thực hiện với các dịch vụ dựa trên TCP và chỉ khi máy chủ khách chạy một daemon phù hợp; trong tất cả các trường hợp khác, kết quả là "không xác định".

Một lỗi hạt nhân UNIX nổi tiếng có thể gây mất dịch vụ khi tra cứu tên người dùng bị chặn bởi tường lửa. Tài liệu README bao bọc mô tả một thủ tục để tìm hiểu xem hạt nhân của bạn có lỗi này hay không.

Tra cứu tên người dùng có thể gây ra sự chậm trễ đáng chú ý cho người dùng không phải UNIX. Thời gian chờ mặc định cho tra cứu tên người dùng là 10 giây: quá ngắn để đối phó với các mạng chậm, nhưng đủ dài để kích thích người dùng PC.

Tra cứu tên người dùng có chọn lọc có thể làm giảm bớt vấn đề cuối cùng. Ví dụ: quy tắc như:


daemon_list: @pcnetgroup ALL @ ALL

sẽ phù hợp với các thành viên của netgroup pc mà không cần tra cứu tên người dùng, nhưng sẽ thực hiện tra cứu tên người dùng với tất cả các hệ thống khác.

PHÁT HÀNH ĐỊA ĐIỂM SPOOFING ĐỊA CHỈ

Một lỗ hổng trong trình tạo số thứ tự của nhiều triển khai TCP / IP cho phép kẻ xâm nhập dễ dàng mạo danh các máy chủ đáng tin cậy và đột nhập vào thông qua, ví dụ, dịch vụ vỏ từ xa. Dịch vụ IDENT (RFC931, v.v.) có thể được sử dụng để phát hiện các cuộc tấn công giả mạo địa chỉ máy chủ và lưu trữ khác.

Trước khi chấp nhận yêu cầu của máy khách, trình bao bọc có thể sử dụng dịch vụ IDENT để tìm ra rằng máy khách không gửi yêu cầu nào cả. Khi máy chủ khách cung cấp dịch vụ IDENT, kết quả tra cứu IDENT phủ định (máy khách khớp với `UNKNOWN @ host ') là bằng chứng mạnh mẽ về một cuộc tấn công giả mạo máy chủ.

Kết quả tra cứu IDENT dương (máy khách khớp `KNOWN @ host ') ít đáng tin cậy hơn. Có thể cho kẻ xâm nhập giả mạo cả kết nối máy khách và tra cứu IDENT, mặc dù làm như vậy khó hơn nhiều so với giả mạo chỉ là kết nối khách hàng. Nó cũng có thể là máy chủ IDENT của máy khách đang nói dối.

Lưu ý: tra cứu IDENT không hoạt động với các dịch vụ UDP.

VÍ DỤ

Ngôn ngữ là đủ linh hoạt mà các loại chính sách kiểm soát truy cập khác nhau có thể được thể hiện với tối thiểu là phiền toái. Mặc dù ngôn ngữ sử dụng hai bảng điều khiển truy cập, các chính sách phổ biến nhất có thể được thực hiện với một trong các bảng là tầm thường hoặc thậm chí trống.

Khi đọc các ví dụ dưới đây, điều quan trọng là nhận ra rằng bảng cho phép được quét trước bảng từ chối, tìm kiếm chấm dứt khi tìm thấy một kết quả phù hợp và quyền truy cập đó được cấp khi không tìm thấy kết quả nào.

Các ví dụ sử dụng tên máy chủ và tên miền. Chúng có thể được cải thiện bằng cách bao gồm địa chỉ và / hoặc thông tin mạng / netmask, để giảm tác động của các lỗi tra cứu máy chủ tên tạm thời.

ĐÃ ĐÓNG CỬA

Trong trường hợp này, quyền truy cập bị từ chối theo mặc định. Chỉ cho phép máy chủ được ủy quyền rõ ràng.

Chính sách mặc định (không có quyền truy cập) được triển khai với một tệp từ chối tầm thường:

/etc/hosts.deny: ALL: ALL

Điều này từ chối tất cả các dịch vụ cho tất cả các máy chủ, trừ khi chúng được phép truy cập bởi các mục trong tệp cho phép.

Các máy chủ được ủy quyền rõ ràng được liệt kê trong tệp cho phép. Ví dụ:

/etc/hosts.allow: ALL: LOCAL @some_netgroup
ALL: .foobar.edu EXCEPT terminalserver.foobar.edu

Quy tắc đầu tiên cho phép truy cập từ các máy chủ trong miền cục bộ (không có `. 'Trong tên máy chủ) và từ các thành viên của nhóm mạng some_netgroup . Quy tắc thứ hai cho phép truy cập từ tất cả các máy chủ trong miền foobar.edu (chú ý dấu chấm đầu), ngoại trừ terminalerver.foobar.edu .

MỞ RỘNG

Ở đây, quyền truy cập được cấp theo mặc định; chỉ các máy chủ được chỉ định rõ ràng bị từ chối dịch vụ.

Chính sách mặc định (quyền truy cập được cấp) làm cho tệp cho phép dư thừa để có thể bỏ qua nó. Các máy chủ không được ủy quyền rõ ràng được liệt kê trong tệp từ chối. Ví dụ:

/etc/hosts.deny: ALL: some.host.name, .some.domain
ALL EXCEPT in.fingerd: other.host.name, .other.domain

Quy tắc đầu tiên từ chối một số máy chủ và tên miền tất cả các dịch vụ; quy tắc thứ hai vẫn cho phép yêu cầu ngón tay từ các máy chủ và miền khác.

BƯỚC TRÒ CHƠI

Ví dụ tiếp theo cho phép các yêu cầu tftp từ các máy chủ trong miền cục bộ (chú ý dấu chấm đầu). Yêu cầu từ bất kỳ máy chủ nào khác bị từ chối. Thay vì tệp được yêu cầu, một đầu dò ngón tay được gửi tới máy chủ vi phạm. Kết quả được gửi đến người siêu người dùng.

/etc/hosts.allow:

in.tftpd: LOCAL, .my.domain /etc/hosts.deny: in.tftpd: TẤT CẢ: sinh sản (/ some / where / safe_finger -l @% h | \ / usr / ucb / mail -s% d-% h root) &

Lệnh safe_finger đi kèm với trình bao bọc tcpd và phải được cài đặt ở một nơi thích hợp. Nó giới hạn thiệt hại có thể từ dữ liệu được gửi bởi máy chủ từ xa. Nó bảo vệ tốt hơn lệnh ngón tay tiêu chuẩn.

Việc mở rộng trình tự% h (máy khách) và% d (tên dịch vụ) được mô tả trong phần trên các lệnh trình bao.

Cảnh báo: không bẫy bẫy da ngón tay của bạn, trừ khi bạn chuẩn bị cho các vòng ngón tay vô hạn.

Trên hệ thống tường lửa mạng, thủ thuật này có thể được tiến xa hơn nữa. Tường lửa mạng điển hình chỉ cung cấp một bộ dịch vụ giới hạn cho thế giới bên ngoài. Tất cả các dịch vụ khác có thể được "bị lỗi" giống như ví dụ trên tftp. Kết quả là một hệ thống cảnh báo sớm tuyệt vời.

XEM THÊM

tcpd (8) tcp / ip chương trình trình bao daemon. tcpdchk (8), tcpdmatch (8), chương trình thử nghiệm.

Quan trọng: Sử dụng lệnh man ( % man ) để xem cách một lệnh được sử dụng trên máy tính cụ thể của bạn.