Trong / etc / group ý nghĩa của trường thứ hai là gì?


18

Một /etc/grouptệp mẫu chứa các mục sau:

root:*:0:
adm:!:4:logcheck
antoine:x:1000:

Các trang man tôi đã đọc (Debian & OSX) cho biết trường thứ hai là lưu trữ mật khẩu nhóm. Vì chúng hiếm khi được sử dụng, dấu hoa thị *hoặc a xthường được đặt trong đó thay vì để trống.

Các shadowtrang người đàn ông cũng nói rằng lĩnh vực thứ hai này nên lưu trữ các kết quả của các cryptchức năng. Và nếu một kết quả không hợp lệ được lưu trữ (chẳng hạn như *hoặc !), điều đó có nghĩa là mật khẩu không thể được sử dụng làm phương thức xác thực.

Điều đó có đúng với grouptập tin không? Tại sao tôi kết thúc với 3 ký tự khác nhau trong grouptệp của mình đều có cùng một nghĩa? Tôi có thể thay đổi tất cả thành an toàn *không?


Bạn sẽ làm gì bằng cách thay đổi tất cả thành *?
jordanm

Tôi chỉ thấy việc !được sử dụng cho một nhóm trên một máy chủ trong số hơn 10 tôi hiện đang quản lý. Để đơn giản cho một số tập lệnh kiểm tra, luôn luôn có cùng một char sẽ làm sáng tỏ mọi thứ. Vâng, nếu nó thực sự có nghĩa là như vậy, tất nhiên.
Tonin

Câu trả lời:


28

Bạn đang nghĩ rằng !, *hoặc xcó một ý nghĩa đặc biệt ở đây, và do đó lo lắng rằng có thể có một số khác biệt giữa chúng.

Thực tế là những nhân vật này được chọn đơn giản vì họ nổi bật, ít nhất là trước mắt phương Tây. Những ký tự này bao hàm một giá trị bị thiếu, hoặc một trường hợp ngoại lệ hoặc cảnh báo. Bạn có thể đặt boogaboogaở đây và có tác dụng chính xác như vậy.

Điều này là do cách xử lý mật khẩu trên các hệ thống loại Unix. Khi hệ thống nhận được một mục nhập mật khẩu, nó băm nó và so sánh nó với hàm băm được lưu trữ. Do đó, tất cả những gì quan trọng ở đây là bạn sử dụng một số ký tự hoặc chuỗi ký tự không thể là hàm băm mật khẩu hợp lệ. (Nó cũng không bao gồm dấu hai chấm, vì lý do rõ ràng.)

Mặc dù không có sự khác biệt giữa các nhân vật này từ quan điểm của hệ điều hành cốt lõi, có một số quy ước:

  • Khi pwconv(8)chương trình Linux nhìn thấy x, nó có nghĩa là "Tôi đã chuyển hàm băm mật khẩu công khai này sang tệp mật khẩu bóng."

    Đó không phải là một trường hợp quan trọng trong thực tế bởi vì những ngày chuyển đổi thành (hoặc, thiên đàng giúp bạn, từ ) mật khẩu bóng tối đang ở phía sau chúng ta.

  • Nếu bạn sử dụng usermod -Lhoặc passwd -lkhóa người dùng, !có ý nghĩa đặc biệt /etc/shadowvì đó là quy ước "phá vỡ hàm băm này để nó không khớp nữa".

    Thêm bất kỳ ký tự nào khác vào hàm băm được lưu trữ cũng sẽ phá vỡ nó. Vi phạm Công ước này chỉ đơn thuần ngăn chặn usermod -Uhoặc passwd -utừ mở khóa đăng nhập của người dùng. Cũng giống như vậy, vì bạn đã khóa nó bằng tay bằng cách thêm một ký tự không có thật, bạn có thể mở khóa bằng tay bằng cách xóa nó.

    Tuy nhiên, tất cả chỉ là những chuyện vặt vãnh đối với câu hỏi này. Không có groupmod -Lhoặc gpasswd -l, do đó không có !quy ước trong /etc/group.

    Nhiều đố: nếu bạn đang đi đến tài khoản người dùng khóa bằng tay, bạn nên tránh xa các [A-Za-z0-9/\]thiết lập, bởi vì đó là ký tự pháp lý cho việc băm. Đó là một lý do usermodsử dụng !ở đây thay vì x.

Tôi không thấy có gì sai khi bình thường hóa tất cả các /etc/grouptrường mật khẩu của bạn , nếu điều đó làm bạn cảm thấy tốt hơn. Bằng cách làm như vậy, bạn đã nói rằng bạn rất vui khi hack các tệp này bằng tay, vì vậy có lẽ bạn không phải là loại sử dụng các công cụ quan tâm đến sự khác biệt. Bất kể, thay đổi sẽ không có ảnh hưởng đến hoạt động hệ thống hàng ngày.


Cảm ơn câu trả lời rất đầy đủ của bạn. Hiện đang viết tập lệnh để kiểm tra người dùng và nhóm trên máy chủ của tôi, tôi cũng muốn biết liệu có thể tìm thấy chuỗi char hoặc char nào khác trong trường đó không. Từ câu trả lời của bạn, và các chi tiết không quá tầm thường, tôi có một cái nhìn tốt hơn nhiều về điều này. Cảm ơn một lần nữa!
Tonin

1
Đối với kịch bản, có lẽ bạn nên gọi getpwent(3)và bạn bè. Perl có các hàm bao cho những thứ này trong thư viện tiêu chuẩn của nó, cũng như bất kỳ ngôn ngữ kịch bản tập trung Unix sysadmin nào khác. Nếu bạn đang sử dụng một ngôn ngữ mà không có trình bao bọc như vậy, đây sẽ là một lý do tốt để giao dịch. :)
Warren Young

Nếu bạn vẫn đang đọc những thứ gần sáu năm tuổi ... Cảm ơn bạn đã trả lời, tôi thấy một số lý do lịch sử mà mọi người sử dụng những thứ như x*để đánh dấu trường mật khẩu "không sử dụng". Mặc dù chỉ tò mò ... trang man nói rằng trường rất có thể bị bỏ trống (cái trong trường cơ sở dữ liệu có thể được gọi là NULL - đặc biệt là trong Oracle định nghĩa NULL và chuỗi rỗng giống nhau). Vì vậy, trở lại / etc / group: tại sao sử dụng xhoặc !hoặc *, thay vì chỉ rời khỏi lĩnh vực này có sản phẩm nào? Hai dấu hai chấm liên tiếp nổi bật không kém bất kỳ nhân vật nào trong số này. Không quan trọng - chỉ tò mò
mathguy

1
@mathguy: Trường mật khẩu trống có nghĩa là "không có mật khẩu", không giống với trường mật khẩu chứa ký tự không bao giờ khớp với mật khẩu thật. Vì hầu hết các hệ thống Unix không sử dụng mật khẩu nhóm, đó là một sự khác biệt không có sự khác biệt ở đó, nhưng bạn sẽ không muốn phát triển một thói quen sẽ khiến bạn gặp rắc rối, như với hầu hết các hệ thống Linux ' /etc/shadow. Ngoài ra, tôi bác bỏ quan điểm rằng một dấu hai chấm cũng rõ ràng như vậy. Nhanh lên, có bao nhiêu trường trống ở đây : ::::::? Bây giờ có bao nhiêu : :x:*:!:x:*:? Cùng một số dấu hai chấm, nhưng câu trả lời khác nhau, tôi tin tưởng.
Warren Young
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.