GID / UID cấp dưới với LXC và userns cho người dùng không có đặc quyền?


7

Khi sử dụng userns (thông qua LXC trong trường hợp của tôi), bạn chỉ định một loạt các GID và UID cấp dưới cho một người dùng không có đặc quyền. Xem tài nguyên: subuid(5), subgid(5), newuidmap(1), newgidmap(1), user_namespaces(7).

Phạm vi đó sau đó có thể được sử dụng và sẽ thông qua được ánh xạ vào tài khoản hệ thống.

Giả sử chúng ta có tài khoản hệ thống (máy chủ) johncó UID (và GID) là 1000. Phạm vi GID và UID được chỉ định là 100000..165536.

Vì vậy, một mục tồn tại trong /etc/subgid/etc/subuidtương ứng:

john:100000:65536

Các tệp bên trong vùng chứa không có đặc quyền thuộc sở hữu của "bên trong" johngiờ sẽ thuộc sở hữu của 101000 trên máy chủ và những tệp thuộc sở hữu của "bên trong" rootsẽ được sở hữu bởi 100000.

Thông thường các phạm vi này không được gán cho bất kỳ tên nào trên máy chủ.

Câu hỏi:

  1. Bạn có thể tạo người dùng cho các UID / GID tương ứng trên máy chủ để có đầu ra có ý nghĩa hơn cho lsbạn bè không?
  2. Có cách nào để làm cho các tệp / thư mục đó có thể truy cập được đối với người dùng máy chủ "sở hữu" các userns, tức là johntrong trường hợp của chúng tôi không? Và nếu vậy, có phải là phương pháp hợp lý duy nhất để tạo một nhóm được chia sẻ giữa những người dùng hợp lệ đó trong phạm vi cấp dưới và "chủ sở hữu" và đặt quyền cho phù hợp? Vâng, hoặc ACL, rõ ràng.

Câu trả lời:


2
  1. Có thể tạo người dùng cho các UID / GID tương ứng trên máy chủ để có đầu ra có ý nghĩa hơn cho ls và bạn bè không?

Vâng, nó ổn Tuy nhiên, bạn phải đảm bảo rằng người dùng đó không có quyền đối với bất kỳ thứ gì trong hệ thống máy chủ:

  • Vô hiệu hóa quyền truy cập hoặc mật khẩu,
  • Không có vỏ đăng nhập có thể sử dụng,
  • Không có thư mục nhà có thể ghi.

Hãy chắc chắn không tạo bất kỳ bản sao trong tên người dùng của bạn.

Dưới đây là tập lệnh mẫu, lấy khách /etc/passwd/etc/grouptệp để tạo người dùng tương ứng trong hệ thống máy chủ. Tất cả các tên đều có tiền tố với tên container và tất cả ID được tăng lên bằng cách sử dụng giá trị đã cho để khớp với UID của container:

#! /bin/sh

# Path to guest's `/etc' directory.
guest_etc=/var/lib/lxc/mycontainer/rootfs/etc
# Guest's name, used as login prefix and inside GECOS field.
guest_name=mycontainer
# Increment to be applied to UIDs and GIDs (= range start).
uid_incr=100000
gid_incr=$uid_incr

guest_passwd=${guest_etc}/passwd
guest_group=${guest_etc}/group

exec <$guest_group
while IFS=":" read name pass gid null; do
    gid_new=$( expr $gid + $gid_incr )
    if ! getent group $gid_new >/dev/null; then
        addgroup --system --gid $gid_new "${guest_name}_${name}"
    fi  
done

exec <$guest_passwd
while IFS=":" read login pass uid gid gecos null; do
    uid_new=$( expr $uid + $uid_incr )
    gid_new=$( expr $gid + $gid_incr )
    if ! getent passwd $uid_new >/dev/null; then
        adduser --system --home /nonexistent --no-create-home \
            --shell /bin/nologin --uid $uid_new --gid $gid_new \
            --gecos "\"$guest_name container user (${gecos})\"" \
            "${guest_name}_${login}"
    fi  
done

Các cảnh báo liên quan đến thư mục nhà không thể truy cập là bình thường và dự kiến: đây là mục đích thực tế của /nonexistentviệc không tồn tại.

  1. Có cách nào để làm cho các tệp / thư mục đó có thể truy cập được đối với người dùng máy chủ "sở hữu" các userns, tức là john trong trường hợp của chúng tôi không? Và nếu vậy, có phải là phương pháp hợp lý duy nhất để tạo một nhóm được chia sẻ giữa những người dùng hợp lệ đó trong phạm vi cấp dưới và "chủ sở hữu" và đặt quyền cho phù hợp? Vâng, hoặc ACL, rõ ràng.

Điều này thực sự đáng giá một câu hỏi IMO riêng biệt.

Vì nội dung của container được sở hữu bởi các UID khác với UID của chủ sở hữu container, nên anh ta không thể truy cập được. Tôi có thể tưởng tượng một ngoại lệ cho quy tắc này cho người đăng ký, nhưng hiện tại tôi không biết gì về điều này (tôi đã tạo một câu hỏi liên quan cách đây vài lần, nhưng chưa có câu trả lời nào).

Các tệp /etc/subuid/etc/subgidhiện chỉ được sử dụng bởi newuidmap(1) để cho phép hoặc từ chối chuyển đổi từ một UID / GID sang một quy trình nhất định. Nó không cung cấp cho chủ sở hữu phạm vi bất kỳ quyền nào khác.

Do đó, giải pháp cho vấn đề như vậy nên được thiết kế trên cơ sở từng trường hợp. Tuy nhiên, hãy cẩn thận với ý tưởng ACL của bạn: giả sử bạn đặt một số ACL trên các tệp của bộ chứa để cho phép UID 1000 của máy chủ của bạn đọc chúng, điều này có nghĩa là người dùng của bộ chứa với UID 1000 của bộ chứa cũng sẽ có cùng mức độ đặc quyền ...

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.