Những nguy hiểm của việc tạo người dùng bình thường với UID <500 là gì?


14

Những nguy hiểm của việc tạo người dùng bình thường với UID <500 là gì? Giả sử UID không phải là bản sao của UID hiện tại, điều gì có thể sai?

Đây không phải là điều mà tôi muốn làm, mà là điều mà tôi đã thấy và muốn biết tại sao nó không nên được thực hiện. Trong ví dụ này, đó là trên RHEL5.


2
Các hệ thống có nguồn gốc từ Debian dường như bắt đầu các UID bình thường ở 1000 chứ không phải 500.
Keith Thompson

Câu trả lời:


16

Tôi không tin rằng có bất kỳ rủi ro cố hữu nào, đây là điều được thực hiện đơn giản để tạo sự tách biệt giữa những gì được coi là tài khoản hệ thống và tài khoản người dùng. Việc sử dụng các số dưới 500, theo kinh nghiệm của tôi là Redhat-ism, và thực sự không có gì hơn thế.

Trên Solaris tôi đã thấy người dùng được chỉ định số bắt đầu từ 100, chỉ đến những năm sau đó, phát hiện ra rằng khi hợp nhất 2 hệ thống của các bộ phận nhỏ lại với nhau gây ra một cơn ác mộng, vì có nhiều người dùng trên cả hai bộ phận có cùng UID / GID được chỉ định.

Đây thực sự là rủi ro / đau đầu chính khi chỉ định UID. Vì UID là thứ cuối cùng được ghi vào nút cho các tệp / thư mục do người dùng cung cấp, nên bạn không muốn phải thực hiện việc findtìm kiếm các tệp thuộc sở hữu của UID 1234 và phải đổi chúng thành 5678 .

Vì vậy, bằng cách đặt một số suy nghĩ vào việc lựa chọn UID, quản trị viên có thể tránh được sự đau đầu.

Việc sử dụng 500 trở lên chỉ là một nỗ lực của Redhat (và các Unix khác) để cung cấp cho mình đủ bộ đệm mà bất kỳ tài khoản hệ thống nào có thể cần tạo sẽ không được trộn lẫn với UID được gán cho người dùng.

/etc/login.defs

Ngẫu nhiên, số 500 được điều khiển bởi cài đặt này trong tệp cấu hình , /etc/login.defs.

#
# Min/max values for automatic uid selection in useradd
#
UID_MIN           500
UID_MAX         60000

#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN           500
GID_MAX         60000

Bạn có thể thay đổi điều này thành bất cứ điều gì bạn muốn, nếu bạn muốn ghi đè hành vi mặc định bằng useradd/ adduserlệnh.

Trang người dùng

Nếu bạn xem useraddtrang người đàn ông, bạn sẽ thấy phần này thảo luận về giá trị mặc định cho GID, nhưng nhận xét này cũng có thể áp dụng cho UID:

đoạn trích

-g, --gid GROUP
    The group name or number of the user´s initial login group. The group name 
    must exist. A group number must refer to an already existing group.

    If not specified, the behavior of useradd will depend on the USERGROUPS_ENAB 
    variable in /etc/login.defs. If this variable is set to yes 
    (or -U/--user-group is specified on the command line), a group will be 
    created for the user, with the same name as her loginname. If the variable 
    is set to no (or -N/--no-user-group is specified on the command line), 
    useradd will set the primary group of the new user to the value specified by 
    the GROUP variable in /etc/default/useradd, or 100 by default.

Tài khoản hệ thống

Một điều khác cần chú ý trong useraddtrang man là bit này về việc tạo tài khoản hệ thống.

đoạn trích

-r, --system
    Create a system account.

    System users will be created with no aging information in /etc/shadow, 
    and their numeric identifiers are choosen in the SYS_UID_MIN-SYS_UID_MAX 
    range, defined in /etc/login.defs, instead of UID_MIN-UID_MAX (and their 
    GID counterparts for the creation of groups).

    Note that useradd will not create a home directory for such an user, 
    regardless of the default setting in /etc/login.defs (CREATE_HOME). You 
    have to specify the -m options if you want a home directory for a system 
    account to be created.

Đây là phương thức ( useradd -r ...) thường được sử dụng bởi kịch bản được tích hợp vào các trình quản lý gói khác nhau, chẳng hạn như RPM, khi gói đang được cài đặt. Viết kịch bản theo cách này cho phép hệ thống tự động chọn UID / GID có sẵn tiếp theo trên một hệ thống nhất định mà không có nguy cơ bước vào UID / GID đã được gán cho người dùng hệ thống.


1
FWIW, tôi nghĩ rằng đây là một GNU / Linux-ism chung, không chỉ là Red Hat-ism. Tôi đã thấy điều này trên tất cả các hệ thống tôi sử dụng và tôi chưa bao giờ sử dụng Red Hat.
strugee

@strugee - cảm ơn tôi đã không muốn đưa ra tuyên bố quá rộng và nó sẽ quay lại cắn tôi.
slm

2

Từ quan điểm của kernel, chỉ có một người dùng đặc biệt: UID 0. Việc chia phạm vi UID vì lý do quản trị giúp cuộc sống của bạn đơn giản hơn. Phạm vi phổ biến là nhà cung cấp, hệ thống, địa phương, toàn cầu.

Người dùng của nhà cung cấp được cài đặt trong quá trình cài đặt ban đầu của hệ thống và được quản lý tĩnh bởi nhà cung cấp. Người dùng hệ thống được cài đặt trên mỗi máy tùy thuộc vào gói nào được cài đặt. hầu hết người dùng sử dụng thêm / xóa đều có giới hạn phạm vi để xử lý các mục này một cách riêng biệt. người dùng cục bộ là người dùng thường xuyên và được chỉ định cho mỗi máy. người dùng toàn cầu được chỉ định bởi một cơ sở dữ liệu trung tâm, nhưng là người dùng thường xuyên. sử dụng phạm vi UID ngăn ngừa xung đột giữa các nhóm khác nhau này. trong đó các điểm cắt này có thể khác nhau nhưng thường có thể cấu hình được.


1

Không có mối nguy hiểm cố hữu trong việc này. Nếu bạn tạo một người dùng với UID 499, họ sẽ không có thêm bất kỳ quyền riêng tư nào. Lý do mà nó được đề xuất không chỉ đơn giản là vì UID thường được dành riêng cho người dùng hệ thống. Vấn đề mà người ta có thể gặp phải khi tạo UID như vậy là khi một số dịch vụ hệ thống mong muốn UID khả dụng. Nó giống như tạo ra một dịch vụ mới chạy trên một cổng nổi tiếng - không nhất thiết phải có vấn đề với nó, nhưng nó không phải là thông lệ tốt và có thể gây ra sự cố khi bạn thiết lập sshd, ftpd, v.v.

Điều đó nói rằng, tôi đã thấy nhiều hệ thống mà người dùng được tạo với UID <500 mà không gặp sự cố. Tuy nhiên, khi cơ sở người dùng phát triển và hiện có hàng ngàn người dùng, việc phân biệt giữa tài khoản người dùng và tài khoản hệ thống có thể trở nên khó khăn. Theo quy tắc không có UID <500, nó rất dễ dàng. Vì vậy, nó là một cách tốt đẹp để tổ chức các tài khoản là tốt.


1

Không có nguy hiểm thực sự. Hạt nhân không quan tâm đến các giá trị ID người dùng ngoại trừ 0. Hầu hết các công cụ quản trị cũng không quan tâm - rất ít phần trong hệ thống tạo ra sự khác biệt giữa người dùng hệ thống và người dùng con người.

Người dùng hệ thống có xu hướng có các nhóm chuyên dụng, do đó, điều này không có khả năng tạo tài khoản thuộc nhiều nhóm hơn mức họ cần.

Một số bản phân phối dành phạm vi 114499 (Mũ đỏ và người thân) hoặc 1 phép999 (Debian và người thân) cho người dùng hệ thống, bao gồm cả người dùng được phân bổ khi cài đặt gói chứa dịch vụ hệ thống yêu cầu người dùng chuyên dụng. Quy ước của Debian là phạm vi 119999 được phân bổ tĩnh (vì vậy việc tạo người dùng trong phạm vi đó là một ý tưởng rất tệ vì nó có thể xung đột với người dùng hệ thống) trong khi phạm vi 100 được 999 được phân bổ động (do đó tạo ra người dùng con người trong phạm vi đó là vô hại, vì bất kỳ người dùng hệ thống mới nào cũng sẽ chọn ID người dùng miễn phí).

Bạn có thể gặp phải những bất tiện nhỏ, chẳng hạn như người quản lý hiển thị không cung cấp người dùng có UID dưới ngưỡng trong danh sách của họ.

Mối nguy hiểm chính đối với một máy bị cô lập là bạn có thể gây nhầm lẫn cho các quản trị viên hệ thống của mình. Đối với một máy trong mạng nơi chia sẻ ID người dùng, bạn có thể gặp xung đột với các máy khác nơi những người dùng này có cùng ID người dùng với người dùng hệ thống. Trong các mạng có ID người dùng được chia sẻ, tốt nhất bạn nên sử dụng phạm vi 1000 mật65533 hoặc thậm chí 10000 1000065533 cho người dùng.

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.