bwrap - hướng dẫn tham khảo, tùy chọn, ví dụ về lệnh


TÊN

bwrap - tiện ích thiết lập vùng chứa

TÓM TẮT

bwrap [OPTION...] [COMMAND]

SỰ MIÊU TẢ

bwrap là trình trợ giúp đặc quyền để thiết lập vùng chứa. Bạn không thể sử dụng nó trực tiếp từ dòng lệnh, mặc dù điều đó là có thể.

Nó hoạt động bằng cách tạo một không gian tên hệ thống tệp mới, hoàn toàn trống, trong đó gốc nằm trên một tmpfs ẩn khỏi máy chủ và sẽ tự động được dọn sạch khi quá trình cuối cùng thoát. Sau đó, bạn có thể sử dụng các tùy chọn dòng lệnh để xây dựng hệ thống tệp gốc và xử lý môi trường để lệnh chạy trong không gian tên.

Theo mặc định, bwrap tạo không gian tên gắn kết mới cho hộp cát. Theo tùy chọn, nó cũng thiết lập các không gian tên người dùng, ipc, pid, mạng và uts mới (nhưng lưu ý rằng không gian tên người dùng là bắt buộc nếu bwrap chưa được cài đặt gốc setuid). Ứng dụng trong hộp cát có thể được tạo để chạy với một UID và GID khác.

Nếu cần (ví dụ: khi sử dụng không gian tên PID) bwrap đang chạy quy trình pid 1 tối thiểu trong hộp cát chịu trách nhiệm tiêu diệt zombie. Nó cũng phát hiện khi quá trình ứng dụng ban đầu (pid 2) chết và báo cáo trạng thái thoát của nó trở lại trình sinh sản ban đầu. Quá trình pid 1 thoát để dọn dẹp hộp cát khi không còn quá trình nào khác trong hộp cát.

TÙY CHỌN

Khi các tùy chọn được sử dụng nhiều lần, tùy chọn cuối cùng sẽ thắng, trừ khi có quy định khác.

Tùy chọn chung:

--help

In trợ giúp và thoát

--version

Phiên bản in

--args FD

Phân tích các đối số được phân tách bằng nul từ bộ mô tả tệp đã cho. Tùy chọn này có thể được sử dụng nhiều lần để phân tích các tùy chọn từ nhiều nguồn.

Các tùy chọn liên quan đến không gian tên kernel:

--unshare-user

Tạo một không gian tên người dùng mới

--unshare-user-try

Tạo một không gian tên người dùng mới nếu có thể bỏ qua nó

--unshare-ipc

Tạo một không gian tên ipc mới

--unshare-pid

Tạo một không gian tên pid mới

--unshare-net

Tạo một không gian tên mạng mới

--unshare-uts

Tạo một không gian tên uts mới

--unshare-cgroup

Tạo một không gian tên cgroup mới

--unshare-cgroup-try

Tạo một không gian tên cgroup mới nếu có thể bỏ qua nó

--unshare-all

Hủy chia sẻ tất cả các không gian tên có thể. Hiện tại tương đương với: --unshare-user-try --unshare-ipc --unshare-pid --unshare-net --unshare-uts --unshare-cgroup-try

--share-net

Giữ lại vùng tên mạng, ghi đè --unshare-all hoặc --unshare-net trước đó

--userns FD

Sử dụng một không gian tên người dùng hiện có thay vì tạo một cái mới. Không gian tên phải đáp ứng các yêu cầu về quyền đối với setns(), điều này thường có nghĩa là nó phải là hậu duệ của không gian tên người dùng hiện đang hoạt động, được sở hữu bởi cùng một người dùng.

Điều này không tương thích với --unshare-user và không hoạt động trong phiên bản thiết lập của bubblewrap.

--userns2 FD

Sau khi thiết lập không gian tên mới, hãy chuyển sang không gian tên đã chỉ định. Để điều này hoạt động, không gian tên được chỉ định phải là hậu duệ của không gian tên người dùng được sử dụng để thiết lập, do đó, điều này chỉ hữu ích khi kết hợp với --userns.

Điều này rất hữu ích vì đôi khi bản thân bubblewrap tạo các không gian tên người dùng lồng nhau (để giải quyết một số vấn đề về nhân) và --userns2 có thể được sử dụng để nhập các không gian này.

--disable-userns

Ngăn quá trình trong hộp cát tạo thêm không gian tên người dùng, để nó không thể sắp xếp lại không gian tên hệ thống tệp hoặc thực hiện sửa đổi không gian tên phức tạp hơn. Điều này hiện được thực hiện bằng cách đặt user.max_user_namespaces sysctl thành 1, sau đó nhập một vùng tên người dùng lồng nhau không thể tăng giới hạn đó trong vùng tên bên ngoài. Tùy chọn này yêu cầu --người dùng không chia sẻ và không hoạt động trong phiên bản gói bong bóng đã thiết lập.

--assert-userns-disabled

Xác nhận rằng quy trình trong hộp cát đã bị ngăn tạo thêm không gian tên người dùng nhưng không thực hiện bất kỳ hành động cụ thể nào để ngăn chặn điều đó. Ví dụ: điều này có thể được kết hợp với --userns để kiểm tra xem không gian tên người dùng nhất định đã được thiết lập để ngăn việc tạo thêm các không gian tên người dùng khác.

--pidns FD

Sử dụng không gian tên pid hiện có thay vì tạo một không gian tên. Điều này thường được sử dụng với --userns, vì không gian tên pid phải được sở hữu bởi cùng một không gian tên người dùng mà bwrap sử dụng.

Lưu ý rằng điều này có thể được kết hợp với --unshare-pid và trong trường hợp đó, điều đó có nghĩa là hộp cát sẽ nằm trong không gian tên pid của chính nó, là phần tử con của phần tử được truyền vào một.

--uid UID

Sử dụng id người dùng tùy chỉnh trong hộp cát (yêu cầu --unshare-user)

--gid GID

Sử dụng id nhóm tùy chỉnh trong hộp cát (yêu cầu --người dùng không chia sẻ)

--hostname HOSTNAME

Sử dụng tên máy chủ tùy chỉnh trong hộp cát (yêu cầu --unshare-uts)

Tùy chọn về thiết lập môi trường:

--chdir DIR

Thay đổi thư mục thành DIR

--setenv VAR VALUE

Đặt biến môi trường

--unsetenv VAR

Bỏ đặt biến môi trường

--clearenv

Bỏ đặt tất cả các biến môi trường, ngoại trừ PWD và bất kỳ biến nào sau đó được đặt bởi --setenv

Các tùy chọn để giám sát hộp cát từ bên ngoài:

--lock-file DEST

Khóa DEST trong khi sandbox đang chạy. Tùy chọn này có thể được sử dụng nhiều lần để khóa trên nhiều tệp.

--sync-fd FD

Giữ bộ mô tả tệp này mở trong khi sandbox đang chạy

Các tùy chọn liên quan đến hệ thống tập tin:

Đây là tất cả các hoạt động sửa đổi trực tiếp hệ thống tệp hoặc gắn kết nội dung trong hệ thống tệp. Chúng được áp dụng theo thứ tự chúng được đưa ra làm đối số.

Bất kỳ thư mục mẹ bị thiếu nào được yêu cầu để tạo đích đã chỉ định sẽ được tạo tự động khi cần. Quyền của họ thường được đặt thành 0755 (rwxr-xr-x). Tuy nhiên, nếu tùy chọn --perms có hiệu lực và tùy chọn này đặt quyền cho nhóm hoặc nhóm khác thành 0, thì các thư mục mẹ mới tạo cũng sẽ có quyền tương ứng được đặt thành 0. --size sửa đổi kích thước của mount đã tạo khi trước hành động --tmpfs; Có thể kết hợp --perms và --size.

--perms OCTAL

Tùy chọn này không tự làm gì cả và phải được theo sau bởi một trong các tùy chọn mà nó ảnh hưởng. Nó đặt quyền cho thao tác tiếp theo thành OCTAL. Các hoạt động tiếp theo không bị ảnh hưởng: ví dụ:

 --perms 0700 --tmpfs /a --tmpfs /b

Note that --perms and --size can be combined:

 --perms 0700 --size 10485760 --tmpfs /s 

will apply permissions as well as a maximum size to the created tmpfs.

--size BYTES

Tùy chọn này không tự làm gì cả và phải được theo sau bởi --tmpfs. Nó đặt kích thước tính bằng byte cho các tmpfs tiếp theo. Ví dụ,

--size 10485760 --tmpfs /tmp 

sẽ tạo một tmpfs tại /tmp có kích thước 10MiB. Các hoạt động tiếp theo không bị ảnh hưởng: ví dụ:

--size 10485760 --tmpfs /a --tmpfs /b 

sẽ gắn /a với kích thước 10MiB, sau đó trở về kích thước mặc định cho /b.

Lưu ý rằng --perms và --size có thể được kết hợp:

--size 10485760 --perms 0700 --tmpfs /s 

sẽ áp dụng quyền cũng như kích thước tối đa cho tmpfs đã tạo.

--bind SRC DEST

Liên kết gắn đường dẫn máy chủ SRC trên DEST

--bind-try SRC DEST

Bằng --bind nhưng bỏ qua SRC không tồn tại

--dev-bind SRC DEST

Liên kết gắn đường dẫn máy chủ SRC trên DEST, cho phép truy cập thiết bị

--dev-bind-try SRC DEST

Bằng --dev-bind nhưng bỏ qua SRC không tồn tại

--ro-bind SRC DEST

Liên kết gắn đường dẫn máy chủ SRC chỉ đọc trên DEST

--ro-bind-try SRC DEST

Bằng --ro-bind nhưng bỏ qua SRC không tồn tại

--remount-ro DEST

Kể lại đường dẫn DEST dưới dạng chỉ đọc. Nó chỉ hoạt động trên điểm gắn kết được chỉ định mà không thay đổi bất kỳ điểm gắn kết nào khác theo đường dẫn đã chỉ định

--proc DEST

Gắn procfs trên DEST

--dev DEST

Gắn devtmpfs mới trên DEST

--tmpfs DEST

Gắn tmpfs mới trên DEST. Nếu tùy chọn trước đó là --perms, thì tùy chọn này sẽ đặt chế độ của tệp tmpfs. Mặt khác, tmpfs có chế độ 0755. Nếu tùy chọn trước đó là --size, thì tùy chọn này sẽ đặt kích thước theo byte của tmpfs. Mặt khác, tmpfs có kích thước mặc định.

--mqueue DEST

Gắn mqueue mới trên DEST

--dir DEST

Tạo một thư mục tại DEST. Nếu thư mục đã tồn tại, các quyền của thư mục đó sẽ không bị sửa đổi, bỏ qua --perms (sử dụng --chmod nếu cần thay đổi quyền của một thư mục hiện có). Nếu thư mục mới được tạo và tùy chọn trước đó là --perms, thì tùy chọn này sẽ đặt chế độ của thư mục. Mặt khác, các thư mục mới tạo có chế độ 0755.

--file FD DEST

Sao chép từ bộ mô tả tệp FD sang DEST. Nếu tùy chọn trước đó là --perms, thì tùy chọn này sẽ đặt chế độ của tệp mới. Mặt khác, tệp có chế độ 0666 (lưu ý rằng chế độ này không giống với --dữ liệu liên kết).

--bind-data FD DEST

Sao chép từ bộ mô tả tệp FD sang tệp được liên kết gắn kết trên DEST. Nếu tùy chọn trước đó là --perms, thì tùy chọn này sẽ đặt chế độ của tệp mới. Mặt khác, tệp có chế độ 0600 (lưu ý rằng chế độ này không giống với --tệp).

--ro-bind-data FD DEST

Sao chép từ bộ mô tả tệp FD sang tệp được gắn kết chỉ đọc trên DEST. Nếu tùy chọn trước đó là --perms, thì tùy chọn này sẽ đặt chế độ của tệp mới. Mặt khác, tệp có chế độ 0600 (lưu ý rằng chế độ này không giống với --tệp).

--symlink SRC DEST

Tạo một liên kết tượng trưng tại DEST với SRC mục tiêu

--chmod OCTAL PATH

Đặt quyền của PATH, phải tồn tại, thành OCTAL.

Tùy chọn khóa:

--seccomp FD

Tải và sử dụng quy tắc seccomp từ FD. Các quy tắc cần ở dạng chương trình cBPF đã biên dịch, như được tạo bởi seccomp_export_bpf. Nếu tùy chọn này được cung cấp nhiều lần, thì chỉ tùy chọn cuối cùng được sử dụng. Sử dụng --add-seccomp-fd nếu cần nhiều chương trình seccomp.

--add-seccomp-fd FD

Tải và sử dụng quy tắc seccomp từ FD. Các quy tắc cần ở dạng chương trình cBPF đã biên dịch, như được tạo bởi seccomp_export_bpf. Tùy chọn này có thể được lặp lại, trong trường hợp đó, tất cả các chương trình seccomp sẽ được tải theo thứ tự nhất định (lưu ý rằng kernel sẽ đánh giá chúng theo thứ tự ngược lại, vì vậy chương trình cuối cùng trên dòng lệnh bwrap được đánh giá trước). Tất cả chúng, ngoại trừ có thể là cái cuối cùng, phải cho phép sử dụng PR_SET_SECCOMP prctl. Không thể kết hợp tùy chọn này với --seccomp.

--exec-label LABEL

Nhãn Exec từ hộp cát. Trên hệ thống SELinux, bạn có thể chỉ định bối cảnh SELinux cho (các) quy trình hộp cát.

--file-label LABEL

Nhãn tệp cho nội dung hộp cát tạm thời. Trên hệ thống SELinux, bạn có thể chỉ định ngữ cảnh SELinux cho nội dung hộp cát.

--block-fd FD

Chặn hộp cát khi đọc từ FD cho đến khi có sẵn một số dữ liệu.

--userns-block-fd FD

Không khởi tạo vùng tên người dùng mà đợi trên FD cho đến khi nó sẵn sàng. Điều này cho phép các quy trình bên ngoài (như newuidmap/newgidmap) thiết lập không gian tên người dùng trước khi nó được quy trình hộp cát sử dụng.

--info-fd FD

Viết thông tin ở định dạng JSON về hộp cát vào FD.

--json-status-fd FD

Nhiều tài liệu JSON được ghi vào FD, mỗi tài liệu một dòng (định dạng "Dòng JSON"[1]). Mỗi dòng là một đối tượng JSON. Sau khi bwrap bắt đầu quá trình con bên trong hộp cát, nó sẽ ghi một đối tượng có thành viên pid con vào --json-status-fd (điều này trùng lặp với cũ hơn--info-fd). Giá trị tương ứng là ID tiến trình của tiến trình con trong không gian tên pid mà bwrap được chạy từ đó. Nếu có sẵn, ID không gian tên cũng được bao gồm trong đối tượng với pid con; một lần nữa, điều này sao chép --info-fd cũ hơn. Khi quá trình con bên trong hộp cát thoát ra, bwrap ghi một đối tượng có thành viên mã thoát rồi đóng --json-status-fd. Giá trị tương ứng với mã thoát là trạng thái thoát của con, trong mã hóa shell thông thường (n nếu nó thoát bình thường với trạng thái n hoặc 128+n nếu nó bị giết bởi tín hiệu n). Các thành viên khác có thể được thêm vào các đối tượng đó trong các phiên bản tương lai của bwrap và các đối tượng JSON khác có thể được thêm vào trước hoặc sau các đối tượng hiện tại, vì vậy người đọc phải bỏ qua các thành viên và đối tượng mà họ không hiểu.

--new-session

Tạo phiên cuối mới cho hộp cát (gọi setsid()). Thao tác này sẽ ngắt kết nối hộp cát khỏi thiết bị đầu cuối điều khiển, điều đó có nghĩa là hộp cát không thể đưa đầu vào vào thiết bị đầu cuối chẳng hạn.

Lưu ý: Trong hộp cát chung, nếu bạn không sử dụng --new-session, bạn nên sử dụng seccomp để không cho phép ioctl TIOCSTI, nếu không, ứng dụng có thể cung cấp đầu vào bàn phím cho thiết bị đầu cuối.

--die-with-parent

Đảm bảo quá trình con (LỆNH) chết khi cha mẹ bwraps chết. Giết (SIGKILL) tất cả các quy trình hộp cát bwrap theo thứ tự từ cấp độ cha đến cấp độ con, bao gồm cả quy trình LỆNH khi bwrap hoặc bwraps cấp trên chết. Xem prctl, PR_SET_PDEATHSIG.

--as-pid-1

Không tạo quy trình có PID=1 trong hộp cát để lấy các quy trình con.

--cap-add CAP

Thêm khả năng được chỉ định khi chạy với tư cách người dùng đặc quyền. Nó chấp nhận giá trị đặc biệt TẤT CẢ để thêm tất cả các giới hạn được phép.

--cap-drop CAP

Bỏ khả năng được chỉ định khi chạy với tư cách người dùng đặc quyền. Nó chấp nhận giá trị đặc biệt TẤT CẢ để loại bỏ tất cả các chữ hoa. Theo mặc định, không có giới hạn nào còn lại trong quy trình hộp cát. Các tùy chọn --cap-add và --cap-drop được xử lý theo thứ tự chúng được chỉ định trên dòng lệnh. Hãy cẩn thận với thứ tự chúng được chỉ định.

MÔI TRƯỜNG

HOME

Được sử dụng làm cwd trong hộp cát nếu --chdir chưa được chỉ định rõ ràng và cwd hiện tại không có trong hộp cát. Có thể sử dụng tùy chọn --setenv để ghi đè giá trị được sử dụng ở đây.

TRẠNG THÁI THOÁT

Lệnh bwrap trả về trạng thái thoát của quy trình đăng ký ban đầu (pid 2 trong sandbox).

GHI CHÚ

1. Định dạng "dòng JSON": https://jsonlines.org/