kernel: Hỗ trợ không gian tên


15

Tôi đang tự hỏi chính xác thì tính năng hỗ trợ của Namespaces trong nhân Linux có nghĩa là gì. Tôi đang sử dụng kernel 3.11.1 (kernel ổn định mới nhất tại thời điểm này).

Nếu tôi quyết định vô hiệu hóa nó, tôi sẽ nhận thấy bất kỳ thay đổi nào trên hệ thống của mình chứ?

Và trong trường hợp ai đó quyết định sử dụng các không gian tên, liệu có đủ để biên dịch NAMESPACES=Ytrong kernel hay anh ta cũng cần các công cụ không gian người dùng?


5
Không gian tên được giải thích khá tốt ở đây: lwn.net/Articles/531114 (không phải là câu trả lời, vì tôi không thực sự trả lời câu hỏi của bạn. Tôi đang chỉ cho bạn một đống văn bản)
derobert

Câu trả lời:


21

Tóm lại, không gian tên cung cấp một cách để xây dựng một hệ thống Linux ảo bên trong một hệ thống Linux lớn hơn. Điều này khác với việc chạy một máy ảo chạy như một quy trình không có đặc quyền: máy ảo xuất hiện dưới dạng một quy trình trong máy chủ, trong khi các quy trình chạy bên trong một không gian tên vẫn đang chạy trên hệ thống máy chủ.

Một hệ thống ảo chạy bên trong một hệ thống lớn hơn được gọi là một thùng chứa . Ý tưởng của một container là các tiến trình chạy bên trong container tin rằng chúng là các tiến trình duy nhất trong hệ thống. Cụ thể, người dùng root bên trong vùng chứa không có quyền root bên ngoài vùng chứa (lưu ý rằng điều này chỉ đúng trong các phiên bản đủ gần đây của kernel).

Không gian ảo hóa một tính năng tại một thời điểm. Một số ví dụ về các loại không gian tên là:

  • Không gian tên người dùng - điều này cho phép các quy trình hoạt động như thể họ đang chạy như những người dùng khác nhau bên trong và bên ngoài không gian tên. Cụ thể, các quy trình chạy dưới dạng UID 0 bên trong không gian tên chỉ có các đặc quyền siêu người dùng đối với các quy trình đang chạy trong cùng một không gian tên.
    Kể từ Linux kernel 3.8, người dùng không có đặc quyền có thể tạo không gian tên người dùng. Điều này cho phép người dùng thông thường sử dụng các tính năng được dành riêng cho root (chẳng hạn như thay đổi bảng định tuyến hoặc khả năng cài đặt).
  • Không gian tên PID - các quy trình bên trong một không gian tên PID không thể giết hoặc theo dõi các quy trình bên ngoài không gian tên đó.
  • Mount không gian tên - điều này cho phép các quá trình có chế độ xem riêng của hệ thống tập tin. Khung nhìn này có thể là một khung nhìn một phần, cho phép ẩn một số phần của hệ thống tập tin và các phần được ghép lại để các cây thư mục xuất hiện ở những nơi khác nhau. Các không gian tên Mount khái quát hóa chroot tính năng Unix truyền thống , cho phép các quy trình được giới hạn trong một cây con cụ thể.
  • Không gian tên mạng - cho phép tách tài nguyên mạng (thiết bị mạng) và do đó tăng cường cách ly các quy trình.

Không gian tên dựa vào kernel để cung cấp sự cách ly giữa các không gian tên. Điều này khá phức tạp để có được quyền, vì vậy vẫn có thể có các lỗi bảo mật nằm xung quanh. Nguy cơ lỗi bảo mật sẽ là lý do chính khiến không kích hoạt tính năng này. Một lý do khác để không kích hoạt nó là khi bạn tạo một kernel nhỏ cho thiết bị nhúng. Trong hạt nhân đa năng mà bạn cài đặt trên máy chủ hoặc máy trạm thông thường, không gian tên sẽ được bật, giống như bất kỳ tính năng nhân trưởng thành nào khác.

Vẫn còn ít ứng dụng sử dụng không gian tên. Ở đây có một ít:

  • LXC được thiết lập tốt. Nó dựa vào các nhóm để cung cấp container.
  • virt-sandbox là một dự án sandboxing gần đây hơn.
  • Các phiên bản gần đây của Chromium cũng sử dụng không gian tên cho hộp cát nếu có.
  • Khung uWSGI cho các ứng dụng phân cụm sử dụng các không gian tên để cải thiện hộp cát.

Xem loạt bài viết về LWN của Michael Kerrisk để biết thêm thông tin.


6

Không gian tên hạt nhân Linux là một khái niệm được sử dụng để cô lập một nhóm các quy trình từ những người khác liên quan đến việc truy cập vào tài nguyên hệ thống. Ví dụ, hai không gian tên PID khác nhau có thể chứa các quy trình với các PID giống nhau nhưng hình ảnh quá trình hoàn toàn khác nhau. Chúng thường được sử dụng trong ảo hóa cấp hệ điều hành, trong đó một hạt nhân duy nhất đang chạy đồng thời nhiều hệ điều hành khác nhau - tất cả đều phải dựa trên Linux (vì rõ ràng chúng chia sẻ hạt nhân), nhưng có thể là các bản phân phối và phiên bản khác nhau. Xem ví dụ LXC .

Bạn có thể nhận thấy việc vô hiệu hóa nó chẳng hạn trên các hệ thống dựa trên systemd, vì systemd có thể sử dụng các không gian tên cho tính năng chứa của nó . Do đó rất nhiều phụ thuộc vào phân phối bạn đang sử dụng và những gì bạn định làm với hệ thống.

Như với hầu hết mọi tính năng của kernel, bạn chắc chắn cần một số loại chương trình không gian người dùng - ngay cả khi bạn đã nói chuyện với kernel thông qua các tệp đặc biệt (tôi không chắc là bạn có thể), thường thì nên dựa vào các công cụ chuyên dụng, vì chúng cung cấp API thân thiện.


1

Để đưa ra một ví dụ về việc sử dụng không gian tên, trong các hệ thống đã bật SELinux (MLS hoặc Strict). Không gian tên thường được sử dụng để tạo cá nhân /tmpvà hoặc /homethư mục cho mỗi người dùng. Những thư mục này chỉ hiển thị cho: người dùng, người dùng có cùng nhãn, hạt nhân và người dùng có quyền truy cập đặc quyền. Thư mục không gian tên ed /tmpđược dán nhãn bởi SELinux-MLS để khớp với nhãn SELinux-MLS của người dùng. Trong kịch bản này, /tmpthư mục mà người dùng nhìn thấy có thể thực sự được gắn ở đâu đó ngoài /tmp( /var/user-tmp). Tuy nhiên, người dùng chỉ nhìn thấy /tmpvới các tệp được tạo do hoạt động của người dùng. người dùng sẽ không bao giờ thấy bất kỳ tệp nào trong /tmpđó là sản phẩm của những người dùng khác.

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.