Trên Linux, mỗi nhóm cũng được đại diện bởi một tài khoản hệ thống, được lưu trữ trong file /etc/group. Mỗi nhóm được định danh bởi một GID (Group ID), và các tài khoản người dùng có thể được liên kết với một hoặc nhiều nhóm khác nhau. Thông tin về nhóm bao gồm tên nhóm và danh sách các tài khoản người dùng liên kết với nhóm được lưu trữ trong file /etc/group.
Một số câu lệnh quan trọng để quản lý nhóm trên Linux:
- groupadd: sử dụng để tạo mới một nhóm trên hệ thống.
- groupdel: sử dụng để xóa một nhóm khỏi hệ thống.
- groupmod: sử dụng để thay đổi thông tin của một nhóm trên hệ thống, ví dụ như tên nhóm hoặc GID.
- usermod: sử dụng để thay đổi thông tin của một tài khoản người dùng, bao gồm việc thêm hoặc xóa một tài khoản người dùng khỏi một nhóm.
Các quản trị viên hệ thống cần phải hiểu rõ về quản lý người dùng và nhóm để có thể kiểm soát quyền truy cập vào các tài nguyên trên hệ thống. Bằng cách sử dụng các câu lệnh quản lý người dùng và nhóm trên Linux, người quản trị có thể thực hiện các nhiệm vụ như tạo mới tài khoản người dùng, xóa tài khoản người dùng, thêm hoặc xóa tài khoản người dùng khỏi một nhóm, đặt lại hoặc thay đổi mật khẩu của một tài khoản người dùng, thay đổi chủ sở hữu hoặc nhóm sở hữu của một file hoặc thư mục.
Ngoài ra, còn có một số công cụ quản lý người dùng và nhóm đồng thời được cung cấp trên Linux như là webmin, user manager, system-config-users và nhiều hơn nữa. Tuy nhiên, người quản trị hệ thống cần phải nắm vững các câu lệnh quản lý người dùng và nhóm cơ bản để có thể hoàn thành các nhiệm vụ quản lý người dùng và nhóm trên hệ thống Linux.
Mỗi bản phân phối Linux đều có một công cụ đồ họa để quản lý các nhóm. Các nhóm có thể được quản lý bằng các công cụ đồ họa, các công cụ dòng lệnh và bằng vi hoặc vigr tùy thuộc vào kinh nghiệm của người dùng. Chỉ người dùng có kinh nghiệm mới nên sử dụng vi hoặc vigr để quản lý các nhóm, vì nó sẽ thực hiện khóa hoặc thay đổi file đúng cách.
groupadd
Cú pháp
groupadd <groupName>
Ví dụ
root@wp-hoanghd:~# groupadd php
root@wp-hoanghd:~# groupadd java
root@wp-hoanghd:~# groupadd android
root@wp-hoanghd:~# groupadd spring
Group File
File /etc/group
là một file văn bản trên hệ thống Linux chứa thông tin về tất cả các nhóm được đăng ký trên hệ thống. Mỗi dòng trong file bao gồm tên nhóm, mật khẩu (đã mã hóa), ID nhóm (GID) và danh sách các thành viên trong nhóm. Thông tin này được sử dụng để quản lý quyền truy cập tập thể trên hệ thống, và nó có thể được sửa đổi bởi người dùng hoặc quản trị viên hệ thống sử dụng các công cụ như vi
hoặc vigr
. Tuy nhiên, khi sử dụng các công cụ này, người dùng nên cẩn thận và chỉ nên sử dụng khi có đủ kinh nghiệm, vì các thay đổi không đúng cách có thể gây ra sự cố trên hệ thống.
root@wp-hoanghd:~# tail -n 4 /etc/group
php:x:1004:
java:x:1005:
android:x:1006:
spring:x:1007:
Lệnh tail -n 4 /etc/group
sẽ hiển thị 4 dòng cuối cùng của file /etc/group
.
Trong đoạn văn bản này, mỗi dòng biểu thị thông tin về một nhóm trên hệ thống Linux. Cụ thể, các thông tin được phân tách thành các trường bằng dấu hai chấm (:) và được xếp theo thứ tự: tên nhóm, mật khẩu mã hóa, ID nhóm và danh sách các thành viên của nhóm.
Ví dụ:
- Dòng đầu tiên biểu thị nhóm có tên là “php”, không có mật khẩu mã hóa, ID nhóm là 1004 và không có thành viên nào trong nhóm này.
- Dòng thứ hai biểu thị nhóm có tên là “java”, không có mật khẩu mã hóa, ID nhóm là 1005 và không có thành viên nào trong nhóm này.
- Dòng thứ ba biểu thị nhóm có tên là “android”, không có mật khẩu mã hóa, ID nhóm là 1006 và không có thành viên nào trong nhóm này.
- Dòng cuối cùng biểu thị nhóm có tên là “spring”, không có mật khẩu mã hóa, ID nhóm là 1007 và không có thành viên nào trong nhóm này.
Groups
root@wp-hoanghd:~# groups
root
Đây là kết quả trả về của lệnh groups
được thực thi với quyền root trên Linux. Nó cho biết tên của tất cả các nhóm mà tài khoản đang đăng nhập thuộc về. Trong trường hợp này, tài khoản đang đăng nhập là root
và nó thuộc về nhóm root
.
usermod
Cú pháp:
usermod -a -G <group> <userName>
Tạo các username.
root@wp-hoanghd:~# useradd hoanghd1
root@wp-hoanghd:~# useradd hoanghd2
root@wp-hoanghd:~# useradd hoanghd3
Thêm các username vào các group tương ứng.
root@wp-hoanghd:~# usermod -a -G php hoanghd1
root@wp-hoanghd:~# usermod -a -G php hoanghd2
root@wp-hoanghd:~# usermod -a -G java hoanghd3
Ta có kết quả
root@wp-hoanghd:~# tail -n 2 /etc/group
php:x:1004:hoanghd1,hoanghd2
java:x:1005:hoanghd3
Trong file /etc/group, đoạn văn bản trên là kết quả của lệnh tail -n 2, cho thấy thông tin về các nhóm. Mỗi dòng đại diện cho một nhóm, bao gồm 4 trường được phân tách bằng dấu hai chấm (:), bao gồm:
- Tên nhóm: là tên nhóm.
- Mật khẩu: được mã hóa và chỉ có thể truy cập bởi các thành viên trong nhóm hoặc quản trị viên.
- ID nhóm (GID): là số duy nhất được sử dụng để định danh cho nhóm trong hệ thống.
- Thành viên: là danh sách các người dùng được phân cách bằng dấu phẩy (,) và là thành viên của nhóm đó.
Ví dụ, dòng cuối cùng cho thấy rằng nhóm ‘java’ có GID là 1005 và chỉ có người dùng ‘hoanghd3’ là thành viên của nhóm đó. Tương tự, nhóm ‘php’ có GID là 1004 và có hai người dùng ‘hoanghd1’ và ‘hoanghd2’ là thành viên của nhóm đó.
gruopdel
Cú pháp:
groupdel <group>
Ví dụ kiểm tra các group.
root@wp-hoanghd:~# tail /etc/group
hoanghd:x:1001:
demo:x:1002:
xyz:x:1003:
php:x:1004:hoanghd1,hoanghd2
java:x:1005:hoanghd3
android:x:1006:
spring:x:1007:
hoanghd1:x:1008:
hoanghd2:x:1009:
hoanghd3:x:1010:
Mình sẽ xoá group có tên android.
root@wp-hoanghd:~# groupdel android
Nếu xoá lại kết quả sẽ hiện thông báo group android không tồn tại,
root@wp-hoanghd:~# groupdel android
groupdel: group 'android' does not exist
gpasswd
Lệnh gpasswd được sử dụng để chuyển quyền điều khiển thành viên của một nhóm cho người dùng khác. Cú pháp.
gpsswd -A <user> <group>
Ví dụ
root@wp-hoanghd:~# gpasswd -A hoanghd java
Kết quả dưới mô tả việc sử dụng câu lệnh gpasswd
để thay đổi quyền sở hữu nhóm cho người dùng. Đầu tiên, người dùng root đã sử dụng câu lệnh gpasswd -A hoanghd java
để chỉ định người dùng hoanghd làm chủ nhóm của nhóm java. Sau đó, người dùng hoanghd đã đăng nhập và sử dụng câu lệnh gpasswd -a hoanghd java
để thêm chính mình vào nhóm java. Kết quả kiểm tra lại với câu lệnh id hoanghd
và cat /etc/group | grep hoanghd
cho thấy rằng người dùng hoanghd đã được thêm vào nhóm java.
root@wp-hoanghd:~# gpasswd -A hoanghd java
root@wp-hoanghd:~# su - hoanghd
No directory, logging in with HOME=/
$ id hoanghd
uid=1001(hoanghd) gid=1001(hoanghd) groups=1001(hoanghd)
$ gpasswd -a hoanghd java
Adding user hoanghd to group java
$ id hoanghd
uid=1001(hoanghd) gid=1001(hoanghd) groups=1001(hoanghd),1005(java)
$ cat /etc/group | grep hoanghd
hoanghd:x:1001:
Người quản trị nhóm không cần phải là thành viên của nhóm. Họ có thể thêm hoặc xóa một thành viên mà không cần phải là một thành viên của nhóm đó.
Tập tin /etc/gshadow chứa thông tin về người quản trị nhóm như được hiển thị trong bản snapshot dưới đây.
root@wp-hoanghd:~# tail -n 1 /etc/gshadow
java:!:hoanghd:hoanghd3,hoanghd
Để xóa tất cả các quản trị viên khỏi một nhóm bằng cách đặt danh sách quản trị viên trống.
gpasswd -A "" <group>
Ví dụ
gpasswd -A "" java
Kết quả trong file gshadow cho thấy quản trị viên đã biến mất.
root@wp-hoanghd:~# tail -n 1 /etc/gshadow
java:!::hoanghd3,hoanghd
Lệnh sudo usermod -g cicd hoanghd
được sử dụng để thay đổi nhóm chính của người dùng có tên là hoanghd
thành nhóm cicd
trên hệ thống. Nhóm chính là nhóm mặc định mà một người dùng thuộc về khi tạo tài khoản người dùng mới. Khi thực hiện lệnh này, nhóm chính của người dùng hoanghd
sẽ được thay đổi từ nhóm hiện tại sang nhóm cicd
. Điều này có nghĩa là hoanghd
sẽ có quyền truy cập vào các tài nguyên được chia sẻ trong nhóm cicd
. Lệnh này phải được thực thi với quyền đặc quyền của người quản trị hệ thống, được cung cấp bởi tùy chọn sudo
. Lưu ý rằng khi thay đổi nhóm chính của người dùng, người dùng sẽ không được tự động thêm vào các nhóm khác mà họ đang là thành viên.Lệnh gpasswd
được sử dụng để quản lý mật khẩu cho các nhóm người dùng trên hệ thống. Khi sử dụng tùy chọn -d
, lệnh gpasswd
sẽ xóa một người dùng khỏi một nhóm người dùng. Điều này có nghĩa là người dùng sẽ không còn là thành viên của nhóm đó nữa và sẽ không có quyền truy cập vào các tài nguyên được chia sẻ trong nhóm đó. Lưu ý rằng việc xóa người dùng khỏi một nhóm người dùng chỉ ảnh hưởng đến quyền truy cập vào các tài nguyên được chia sẻ trong nhóm đó, không ảnh hưởng đến quyền hạn của người dùng trong các nhóm khác.
Lệnh sudo gpasswd -d hoanghd java
được sử dụng để xóa người dùng có tên là hoanghd
khỏi nhóm java
trên hệ thống.
sudo gpasswd -d hoanghd java
Điều này có nghĩa là người dùng hoanghd
sẽ không còn là thành viên của nhóm java
nữa và không có quyền truy cập vào các tài nguyên được chia sẻ trong nhóm java
đó. Lệnh này phải được thực thi với quyền đặc quyền của người quản trị hệ thống, được cung cấp bởi tùy chọn sudo
. Lưu ý rằng việc xóa người dùng khỏi một nhóm chỉ ảnh hưởng đến quyền truy cập vào các tài nguyên được chia sẻ trong nhóm đó, không ảnh hưởng đến quyền hạn của người dùng trong các nhóm khác.
sudo usermod -g cicd hoanghd
Lệnh usermod -a -G cicd hoanghd
được sử dụng để thêm người dùng hoanghd
vào nhóm cicd
.
usermod -a -G cicd hoanghd
usermod
: lệnh này được sử dụng để thay đổi các thuộc tính của người dùng trong hệ thống.-a
: tùy chọn này được sử dụng để bổ sung thêm nhóm mới cho người dùng, thay vì thay thế tất cả các nhóm khác mà người dùng đang tham gia.-G cicd
: tùy chọn này xác định tên của nhóm mới được bổ sung, trong trường hợp này làcicd
.hoanghd
: tên người dùng cần được thêm vào nhómcicd
.
Vì vậy, khi thực hiện lệnh này, người dùng hoanghd
sẽ được thêm vào nhóm cicd
, nhưng vẫn giữ nguyên các nhóm mà người dùng này đã tham gia trước đó.
Đây là danh sách các tùy chọn được sử dụng trong lệnh usermod
để thay đổi thông tin của một tài khoản người dùng trên hệ thống Linux:
-c, --comment COMMENT
: Đặt giá trị mới cho trường GECOS của tài khoản người dùng. Trường GECOS chứa thông tin về người dùng, chẳng hạn như họ tên, số điện thoại, địa chỉ và nhiều thông tin khác.-d, --home HOME_DIR
: Đặt thư mục home mới cho tài khoản người dùng.-e, --expiredate EXPIRE_DATE
: Đặt ngày hết hạn của tài khoản người dùng.-f, --inactive INACTIVE
: Đặt trạng thái của mật khẩu thành không hoạt động sau khi hết hạn.-g, --gid GROUP
: Chuyển đổi tài khoản người dùng sang nhóm chính mới.-G, --groups GROUPS
: Đặt danh sách các nhóm phụ mới cho tài khoản người dùng.-a, --append
: Thêm tài khoản người dùng vào các nhóm phụ mới được chỉ định bởi tùy chọn-G
mà không xóa khỏi các nhóm khác.-h, --help
: Hiển thị trợ giúp và thoát.-l, --login NEW_LOGIN
: Đặt tên đăng nhập mới cho tài khoản người dùng.-L, --lock
: Khóa tài khoản người dùng.-m, --move-home
: Di chuyển nội dung thư mục home sang vị trí mới (chỉ sử dụng với-d
).-o, --non-unique
: Cho phép sử dụng UID trùng lặp.-p, --password PASSWORD
: Sử dụng mật khẩu được mã hóa cho mật khẩu mới.-R, --root CHROOT_DIR
: Thay đổi thư mục gốc.-s, --shell SHELL
: Đặt shell đăng nhập mới cho tài khoản người dùng.-u, --uid UID
: Đặt UID mới cho tài khoản người dùng.-U, --unlock
: Mở khóa tài khoản người dùng.-v, --add-subuids FIRST-LAST
: Thêm phạm vi UID phụ.-V, --del-subuids FIRST-LAST
: Xóa phạm vi UID phụ.-w, --add-subgids FIRST-LAST
: Thêm phạm vi GID phụ.-W, --del-subgids FIRST-LAST
: Xóa phạm vi GID phụ.-Z, --selinux-user SEUSER
: Đặt ánh xạ người dùng SELinux mới cho tài khoản người dùng.
getent group
Lệnh getent
được sử dụng để truy xuất thông tin từ cơ sở dữ liệu Name Service Switch (NSS) trên hệ thống. Cơ sở dữ liệu này quản lý các cơ sở dữ liệu khác nhau trên hệ thống. Khi sử dụng lệnh getent group
, nó sẽ trả về thông tin về các nhóm người dùng trên hệ thống, bao gồm tên nhóm, ID nhóm và danh sách các thành viên trong nhóm đó.
root@cicd:~/hoanghd# getent group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:
floppy:x:25:
tape:x:26:
sudo:x:27:
audio:x:29:
dip:x:30:
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:
sasl:x:45:
plugdev:x:46:
staff:x:50:
games:x:60:
users:x:100:ubuntu,hoanghd
nogroup:x:65534:
systemd-journal:x:101:
systemd-network:x:102:
systemd-resolve:x:103:
input:x:104:
crontab:x:105:
syslog:x:106:
messagebus:x:107:
lxd:x:108:
mlocate:x:109:
uuidd:x:110:
ssh:x:111:
landscape:x:112:
admin:x:113:ubuntu,hoanghd
netdev:x:114:
ubuntu:x:1000:
hoanghd:x:1001:
docker:x:999: