![Máy tính xách tay Linux hiển thị dấu nhắc bash](https://www.howtogeek.com/wp-content/uploads/2022/03/shutterstock_321627716.png?width=1198&trim=1,1&bg-color=000&pad=1,1)
Trên Linux, các tệp có ba bộ quyền. Một bộ dành cho nhóm của tệp. Trước khi bạn phân bổ tệp cho một nhóm, bạn có thể muốn kiểm tra xem các thành viên của nhóm là ai.
Quyền đối với tệp và thư mục
Các tệp và thư mục trên Linux có một bộ quyền cho chủ sở hữu, một bộ khác cho nhóm mà tệp được phân bổ và quyền cho tất cả những người không thuộc một trong hai danh mục trước.
Mỗi bộ quyền xác định liệu các thành viên của danh mục đó có thể đọc, ghi hoặc thực thi tệp hay không. Trong trường hợp của một thư mục, hành động thực thi tương đương với việc có thể cd
vào thư mục.
Nhóm mặc định cho một tệp hoặc thư mục là nhóm mặc định của chủ sở hữu. Đó thường là người đã tạo ra nó. Các quyền của nhóm được sử dụng để cho phép một tập hợp người dùng có quyền truy cập có kiểm soát vào các tệp và thư mục của các thành viên khác trong nhóm đó.
Ví dụ: bạn có thể có một nhóm các nhà phát triển, nhóm tài liệu, nhóm nghiên cứu, v.v. Các thành viên của mỗi nhóm có thể được thêm vào một nhóm được đặt tên phù hợp để hỗ trợ cộng tác. Người dùng có thể tham gia nhiều nhóm cùng một lúc.
Đó là một kế hoạch đơn giản nhưng mạnh mẽ. Nhưng nếu tệp của bạn nhạy cảm, bạn có thể cảm thấy vui hơn khi kiểm tra xem các thành viên của nhóm là ai trước khi chia sẻ công việc của mình với họ. Có nhiều cách khác nhau để làm điều này. Nhưng hãy lưu ý. Hai phương pháp được đề xuất thường xuyên nhất là có vấn đề.
Tệp /etc/groups
Tệp “/etc/group” chứa dấu hai chấm “:
” danh sách nhóm và thành viên nhóm được phân định. Mỗi dòng có bốn trường.
- Tên: Tên duy nhất của nhóm.
- Mật khẩu: Không được sử dụng. Điều này sẽ luôn giữ “x.”
- Id nhóm: Định danh nhóm duy nhất.
- người dùng: Danh sách các thành viên của nhóm được phân tách bằng dấu phẩy. Danh sách này thường trống đối với tài khoản hệ thống và daemon.
Để kết xuất nội dung của tệp vào cửa sổ đầu cuối, bạn có thể sử dụng cat
nhưng sẽ thuận tiện hơn khi có thể cuộn qua nội dung của tệp bằng less
.
less /etc/group
Hầu hết các mục ở đầu danh sách không có thành viên, mặc dù nhóm “adm” có hai và nhóm “cdrom” có một.
Nếu chúng tôi muốn khám phá các nhóm mà một người dùng cụ thể tham gia, chúng tôi có thể sử dụng grep
để tìm kiếm các mục có tên tài khoản người dùng của họ. Đây không phải là nhiệm vụ của chúng tôi trong tầm tay. Chúng tôi muốn xem tất cả những ai là thành viên của một nhóm chứ không phải các nhóm mà một người thuộc về. Nhưng nó là hướng dẫn cho chúng tôi để có một cái nhìn.
grep "dave" /etc/group
Các mục có chứa chuỗi “dave” được liệt kê cho chúng tôi. Và ẩn chứa trong số đó là một dấu hiệu cho thấy mọi thứ có thể không đơn giản như chúng ta nghĩ.
Khi một người dùng được thêm vào Linux, hành động mặc định là đặt họ vào một nhóm có cùng tên với tài khoản người dùng của họ. Đây là của họ sơ đẳng nhóm. Bất kỳ nhóm nào khác mà chúng được thêm vào đều được gọi là sơ trung các nhóm.
Vấn đề là người dùng không được liệt kê là thành viên của nhóm chính của họ. Đó là lý do tại sao nhóm “dave” không hiển thị bất kỳ thành viên nào, mặc dù người dùng “dave” là thành viên của nhóm đó.
Tất nhiên, quản trị viên hệ thống có thể thay đổi nhóm chính của bất kỳ người dùng nào thành nhóm chính của bất kỳ nhóm nào khác. Điều đó có nghĩa là người dùng có thể là thành viên của bất kỳ nhóm nào nhưng họ sẽ không được liệt kê như vậy trong tệp “/etc/group”. Đó là một vấn đề.
Vấn đề thứ hai là tệp “/etc/group” không phải là một nguồn duy nhất của sự thật. Các bản cài đặt Linux hiện đại có thể lưu trữ thông tin nhóm và người dùng ở nhiều nơi hơn “/etc/passwd” và “/etc/group”, đặc biệt là trong các tình huống công ty nơi các dịch vụ như Giao thức truy cập thư mục hạng nhẹ được triển khai. Bằng cách chỉ nhìn vào một nơi, bạn có thể không nhìn thấy bức tranh toàn cảnh.
Trong kịch bản thử nghiệm của chúng tôi, chúng tôi đã tạo bốn nhóm cho bộ phận phát triển. Họ đang:
- xông hơi: Nhóm nghiên cứu.
- nhóm phát triển: Nhóm phát triển.
- pvqteam: Nhóm xác minh và chất lượng sản phẩm.
- tài liệu: Nhóm tài liệu.
Chúng tôi đã thêm người vào các nhóm này. Một số người ở trong nhiều đội. Nếu chúng ta mở tệp “/etc/group” trong less
và cuộn xuống cuối tệp, chúng ta sẽ thấy các nhóm mới và thành viên nhóm. Ít nhất, nhiều thành viên như tập tin “/etc/group” biết về.
Nếu chúng tôi muốn trích xuất một nhóm, chúng tôi có thể tìm kiếm bằng cách sử dụng grep
. dấu mũ “^
” đại diện cho sự bắt đầu của một dòng.
grep "^devteam" /etc/group
Thao tác này sẽ trích xuất mục nhập “devteam” từ tệp và liệt kê tất cả các thành viên trong nhóm. Hay không?
Lệnh getent
Các getent
lệnh kiểm tra nhiều cơ sở dữ liệu để biết thông tin nhóm người dùng, không chỉ “/etc/group”. chúng tôi sẽ sử dụng getent
để hiển thị cho chúng tôi các nhóm người dùng.
getent group
sử dụng getent
với group
tùy chọn tạo ra—trên máy thử nghiệm này—kết quả giống như khi sử dụng tệp “/etc/group”. Đó là bởi vì chúng tôi không sử dụng LDAP hoặc bất kỳ dịch vụ đặt tên tập trung nào khác. Vì vậy, không có nguồn nào khác cho getent
để tham khảo.
Do đó, không có gì ngạc nhiên khi các kết quả được kiểm tra bằng các kết quả từ tệp “/etc/group”. Có lẽ những gì chúng ta đang thấy thực sự là thực tế của tình hình. Có thể mọi thứ đều đơn giản và—trên máy tính này—những gì bạn thấy là những gì bạn nhận được? Hãy dành sự phán xét về điều đó.
Các getent
lệnh có thể xem xét một nhóm duy nhất cho chúng tôi. Chúng ta sẽ xem xét nhóm “devteam”.
getent group devteam
Chúng tôi nhận được kết quả chính xác như trước đây. Có một cách để đào sâu hơn mặc dù.
Lệnh nắp
Các lid
lệnh là một phần của libuser
bộ sưu tập các công cụ. Nó đã được cài đặt trên máy tính thử nghiệm Fedora 36 của chúng tôi nhưng phải được cài đặt trên Ubuntu 22.04 và Manjaro 21.
Ngoài ra, lệnh được gọi lid
trên Fedora và Manjaro, nhưng trên Ubuntu, bạn cần sử dụng libuser-lid
.
Để cài đặt lệnh trên Ubuntu, gõ:
sudo apt install libuser
Trên Manjaro, libuser
được cài đặt từ AUR, vì vậy bạn sẽ cần sử dụng trình trợ giúp AUR yêu thích của mình. Chúng tôi đã sử dụng yay
.
yay libuser
Bạn có thể dùng libuser-lid
để hiển thị thông tin nhóm về nhóm hoặc người dùng. Để hiển thị các nhóm mà một cá nhân tham gia, hãy chuyển tên tài khoản người dùng của họ trên dòng lệnh. Trên Fedora và Manjaro nhớ sử dụng lid
thay vì libuser-lid
.
sudo libuser-lib dave
Để xem các thành viên của một nhóm, hãy sử dụng -g
(nhóm) tùy chọn cùng với tên của nhóm.
sudo libuser-lid -g devteam
Thật lạ lùng, một người dùng có tên là “Francis” đã xuất hiện với tư cách là một thành viên của danh sách. Đây là lần đầu tiên chúng tôi nhìn thấy anh ấy. Anh ta không được liệt kê trong “/etc/group” và getent
cũng không phát hiện ra anh ta.
Hãy xem xét một vài người dùng với groups
yêu cầu.
groups abigail
groups hayden
groups francis
- Người dùng “abigail” thuộc nhóm có tên “abigail” và hai nhóm khác là “restteam” và “devteam”.
- Người dùng “hayden” thuộc nhóm có tên “hayden” và hai nhóm khác là “pvqteam” và “docteam”.
- Người dùng “francis” thuộc một nhóm duy nhất, nhóm “devteam”. Điều đáng chú ý là chúng không trong một nhóm tên là “Phanxicô”.
Chúng tôi biết rằng mọi người dùng phải là thành viên của một nhóm chính và theo mặc định, nhóm chính có GID và tên khớp với UID và tên tài khoản của người dùng. Có vẻ như có điều gì đó khác biệt về người dùng “francis”.
Hãy sử dụng id
lệnh và xem những gì UID và GID cho chúng ta biết.
id abigail
id francis
Người dùng “abigail” có UID là 1002 và GID là 1002. Họ thuộc ba nhóm, một trong số đó được gọi là “abigail”. Nó có GID là 1002. Đây là mặc định nhóm sơ cấp.
Người dùng “francis” có GID là 1019, khớp với GID của nhóm “devteam”. Người dùng này đã được chỉ định một nhóm chính mới hoặc nhóm “devteam” đã được đặt làm nhóm chính của họ khi người dùng này được thêm vào hệ thống.
Cho dù đó là ai, chỉ libuser-lid
đã phát hiện ra chúng và báo cáo sự hiện diện của chúng trong nhóm “devteam”.
The Devil’s trong các chi tiết
Vì vậy, điều quan trọng là phải xem các chi tiết chính hãng.
Nhóm là một cách tuyệt vời để thiết lập cộng tác, miễn là bạn biết mình đang mở cuộc trò chuyện với ai.