Linux xác định người dùng như thế nào?


9

Ý tôi là, nếu hai người dùng có cùng tên, làm sao hệ thống biết rằng họ thực sự là những người dùng khác nhau khi thực thi quyền truy cập tệp?

Nỗi nghi ngờ này xuất hiện trong đầu tôi khi tôi đang cân nhắc đổi tên nhà /home/old-archtrước khi cài đặt lại hệ thống (tôi có /homephân vùng riêng và tôi không định dạng nó), để sau đó tôi có thể có một cái mới, nguyên sơ /home/arch. Tôi tự hỏi liệu hệ thống mới sẽ cung cấp cho tôi các quyền cũ trên các tệp của tôi hay liệu nó sẽ nhận ra tôi là một người khác arch.


12
Câu trả lời đơn giản là "không", vì bạn không cần phải có nhiều người dùng có cùng tên người dùng.
Ignacio Vazquez-Abrams

6
UID, khác với nhưng thường được liên kết với tên người dùng, là cách thức loại điều này được theo dõi. Xem đầu ra của ls -n.
DopeGhoti

5
"Gửi" là một hoạt động quá mơ hồ để trả lời câu hỏi. Quyền chỉ áp dụng cho một hệ thống duy nhất (có kích thước tùy ý).
Ignacio Vazquez-Abrams

1
@ IgnacioVazquez-Abrams Câu hỏi này thực sự xuất hiện trong đầu tôi khi tôi đang cân nhắc đổi tên nhà /home/old-archtrước khi cài đặt lại hệ thống (tôi có /homephân vùng riêng và tôi không định dạng nó), để sau đó tôi có thể có một bản mới, nguyên sơ /home/arch. Tôi tự hỏi liệu tôi sẽ giữ lại các quyền tương tự trên các tệp của mình hay hệ thống sẽ nhận ra tôi là người khác arch.
Arch Stanton

1
Tôi nghĩ trường hợp bạn đề cập trong bình luận của bạn rất thú vị, về hai người dùng có cùng tên người dùng, nhưng trên các hệ thống khác nhau được cài đặt trên cùng một máy, truy cập cùng một tệp trên một phân vùng dùng chung. Có lẽ bạn có thể thêm nó vào câu hỏi?
Time4Tea

Câu trả lời:


10

Trong Unix, người dùng được xác định bằng ID của họ (uid), phải là duy nhất (trong phạm vi của hệ thống cục bộ). Vì vậy, ngay cả khi có thể tạo 2 người dùng khác nhau có cùng tên (người dùng trên hệ thống của tôi từ chối làm điều này, hãy xem câu hỏi này để biết thêm thông tin Có thể tách tài khoản unix chia sẻ tên người dùng nhưng có mật khẩu riêng không? ), Họ sẽ cần lấy uids khác nhau. Mặc dù bạn có thể thao tác các tệp chứa thông tin người dùng để phù hợp với tiêu chí của mình, mọi chương trình đều dựa trên giả định rằng các uids là duy nhất trên hệ thống, do đó những người dùng như vậy sẽ giống hệt nhau.

EDIT: Câu trả lời khác thể hiện trường hợp bạn có 2 tên người dùng khác nhau cho cùng một uid - theo như hệ thống có liên quan, điều này giống như có hai tên khác nhau cho cùng một người dùng, vì vậy nên tránh các cấu trúc như thế này , trừ khi bạn đặc biệt muốn tạo bí danh cho người dùng trên hệ thống (xem câu hỏi bí danh người dùng unix trên serverfault để biết thêm thông tin về các kỹ thuật).

Hệ thống sử dụng các uids này để thực thi quyền truy cập tệp. Uid và gid (id nhóm) của người dùng tệp thuộc về được ghi vào siêu dữ liệu của tệp. Nếu bạn mang đĩa đến một máy tính khác có người dùng khác chia sẻ ngẫu nhiên cùng một uid, tệp sẽ đột nhiên thuộc về người dùng này trên hệ thống đó. Biết rằng uids thường không quá số nguyên 16 bit trên hệ thống unix, điều này cho thấy rằng các uids không có nghĩa là duy nhất trên toàn cầu, chỉ duy nhất trong phạm vi của hệ thống cục bộ.


22

Nếu bạn buộc phải tồn tại nhiều người dùng có cùng tên người dùng, thì sẽ có nhiều mục nhập /etc/{shadow,passwd}có cùng tên:

$ cat /etc/passwd
...
a:x:1001:1002::/home/a:/bin/bash
a:x:1002:1003::/home/b:/bin/bash

# cat /etc/shadow
a:...:17702:0:99999:7:::
a:...:17702:0:99999:7:::

Nếu bạn cố gắng đăng nhập với tư cách người dùng đó, bạn sẽ đăng nhập như trận đấu đầu tiên.

$ ssh a@<host>
Password:
$ id
uid=1001(a) gid=1002(a) groups=1002(a)
$ pwd
/home/a

Sẽ không có cách nào để đăng nhập với tư cách là người dùng thứ hai có cùng tên.

Lưu ý rằng Linux theo dõi người dùng bằng uid của họ chứ không phải theo tên người dùng của họ.

Tuy nhiên, có thể có hai tên người dùng khác nhau là cùng một ID người dùng. Hãy xem xét một phiên bản khác của /etc/passwd:

$ cat /etc/passwd
...
a:x:1001:1002::/home/a:/bin/bash
b:x:1001:1002::/home/b:/bin/bash

Lưu ý rằng đối với cả tên người dùng ab, cột thứ ba là 1001 - đó là uid / ID người dùng. Bây giờ, nếu người dùng ahoặc người dùng bđăng nhập (ngay cả với các mật khẩu khác nhau), cả hai sẽ là "người dùng 1001" và hiển thị dưới dạng người dùng atheo quan điểm của HĐH. Ở đây cũng vậy, mục phù hợp đầu tiên là mục được trả về (trong hầu hết các trường hợp):

$ ssh a@host
Password: <a's password>
$ id
uid=1001(a) gid=1002(a) groups=1002(a)

$ ssh b@host
Password: <b's password>
$ id
uid=1001(a) gid=1002(a) groups=1002(a)

Cả hai ablà uid 1001và sẽ được tiếp cận với các nguồn lực sẵn có để UID 1001.


Tại sao nó không kiểm tra tên người dùng trùng lặp khi tạo một tên người dùng mới?
phuclv

9
Lưu ý rằng tôi nghĩ ngay cả đường cơ sở nhất useraddcũng sẽ phù hợp nếu bạn cố gắng thêm người dùng hiện có, do đó, bằng cách 'ép buộc' ở đây, Andy có nghĩa là 'chỉnh sửa thủ công /etc/passwd/etc/shadowrất nhiều Đừng thử điều này tại nhà.
Shadur

"Sẽ không có cách nào để đăng nhập với tư cách là người dùng thứ hai có cùng tên." Bạn vẫn không thể gọi setuidvới UID thứ hai chứ? Hay thậm chí sudo -u '#<uid>' bash?
jazzpi

1
@jazzpi Điều đó có thể phụ thuộc vào định nghĩa "đăng nhập" của một người. Tuy nhiên, tôi chắc chắn có thể thấy các trình quản lý đăng nhập đồ họa cho phép tình huống này ...
CVn

3

Tôi đã xem xét để đổi tên nhà của tôi /home/old-archtrước khi cài đặt lại hệ thống. Tôi tự hỏi liệu hệ thống mới sẽ cung cấp cho tôi các quyền cũ trên các tệp của tôi hay liệu nó sẽ nhận ra tôi là một vòm khác.

Nếu bạn có một hệ thống người dùng đơn và thực hiện cài đặt lại với cùng hoặc phân phối tương tự, rất có thể tài khoản người dùng của bạn sẽ có cùng id người dùng và do đó là cùng một người dùng theo quan điểm của kernel. Ví dụ: người dùng được tạo trong quá trình cài đặt là UID 1000 trên các hệ thống Debian theo như tôi có thể nhớ. Các hệ thống khác có thể sử dụng một số số khác, nhưng rất có thể đó là một số nguyên nhỏ tương tự trên mỗi lần cài đặt.

Điều tương tự cũng áp dụng cho những người dùng khác (nếu bạn có) vì UID thường được phân bổ liên tục. Người dùng thứ ba được tạo có khả năng có cùng UID với người dùng thứ ba được tạo trên hệ thống khác. Bạn cần thực hiện các bước trước để đảm bảo rằng UID không được sử dụng lại trên cả hai hệ thống.

Vì những lý do tương tự, bất cứ điều gì sử dụng NFS sẽ cần phải có cơ sở dữ liệu người dùng chung.

Nhưng trong trường hợp này, vì đó là hệ thống cá nhân của bạn, bạn có thể chỉ cần đăng nhập bằng root và chạy chown newuser. -R /home/olduserngay cả khi UID khác.

(Các hệ thống Windows thì khác, chúng tạo ra chuỗi ID dài mà ngẫu nhiên hơn. Ở đó, nếu bạn di chuyển đĩa sang máy khác, các tệp sẽ được xem bởi người dùng không xác định và bạn sẽ không có quyền truy cập mà không sử dụng quyền hạn của quản trị viên.

Ngoài ra, tôi đã nói "có khả năng" rất nhiều ở trên. Không có gì để nói nếu một số phân phối hành xử khác nhau. Linux hiện đại cũng hỗ trợ UID 32 bit, do đó, trong khi đó không dài bằng Windows SID, vẫn còn một khoảng trống để sử dụng nếu muốn có UID ngẫu nhiên. Thông thường, mặc dù không có nhiều sử dụng cho điều đó. Quản trị viên hệ thống được cho là biết những đĩa nào họ gắn vào hệ thống và điều chỉnh quyền sở hữu tệp cho phù hợp hoặc làm cho điểm gắn kết không thể truy cập được đối với người dùng khác.)


1

Unix là một hệ thống rất cũ, thời đại mà dung lượng lưu trữ rất nhỏ và mọi thứ - cũng như các tệp như người dùng - được xác định bằng các con số . Tên đến sau , sau khi lưu trữ đã tăng lên một chút.

Một ưu điểm của hệ thống này là các tên chỉ được gắn nhãn vào tay cầm thực: ID số. Vì vậy, bạn có thể có một vài tên cho một người dùng (trực tiếp chỉnh sửa / etc / passwd), cũng như một số tên cho một tệp (hữu ích để lưu trữ tệp chỉ một lần, nhưng nhìn thấy nó ở một số vị trí).

Giới hạn là hệ thống cho người dùng và phân vùng cho tệp.

Tôi nói rằng chỉ để làm rõ, để giải thích tại sao mọi thứ là những gì họ đang có .

Tôi phải thú nhận rằng tôi chưa bao giờ thử theo cách ngược lại - cùng tên với các ID khác nhau - tôi đã luôn nghĩ rằng điều đó là không thể. Là nó? Không phải là một lỗi?


1
Vì vậy, bạn đang nói rằng các hệ thống tệp khác như NTFS hoặc CIFS sử dụng tên người dùng chứ không phải SIDS chữ và số để lưu trữ quyền hạn và quyền của tệp?
doneal24

Không chắc chắn, nhưng tôi tin đó là trường hợp, vì SIDS chữ và số không tồn tại khi Windows được tạo - Tôi vẫn nhớ ngày tôi mua Windows 286 , đó là sự kế thừa đồ họa đầu tiên của MS-DOS
ypouplard

1
@ DougO'Neal: NT SID có hai định dạng: biểu diễn văn bản và dạng nhị phân 12 byte. AFAIK, NTFS sử dụng cái sau trong nội bộ, vì vậy nó vẫn sử dụng số để xác định người dùng - chỉ là những con số rất lớn. :)
cHao

3
@ypouplard Khi Windows được tạo, nó là hệ điều hành một người dùng. Không có bất kỳ nhu cầu nào để thiết lập quyền hạn của tập tin khi người ngồi trên bàn phím cai trị tất cả.
doneal24
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.