107.2 Bài 2
Chứng chỉ: |
LPIC-1 |
---|---|
Phiên bản: |
5.0 |
Chủ đề: |
107 Các Tác vụ Quản trị |
Mục tiêu: |
107.1 Quản lý Tài khoản Nhóm và Người dùng cũng như các Tệp hệ thống liên quan |
Bài: |
2 trên 2 |
Giới thiệu
Các công cụ dòng lệnh được thảo luận trong bài học trước và các ứng dụng đồ họa được cung cấp bởi mỗi bản phân phối để thực hiện các tác vụ giống nhau sẽ cập nhật một loạt các tệp lưu trữ thông tin về người dùng và nhóm.
Các tệp này nằm trong thư mục /etc/
và chúng là:
/etc/passwd
-
Một tệp gồm bảy trường được phân cách bằng dấu hai chấm chứa thông tin cơ bản về người dùng.
/etc/group
-
Một tệp gồm bốn trường được phân cách bằng dấu hai chấm chứa thông tin cơ bản về các nhóm.
/etc/shadow
-
Một tệp gồm chín trường được phân cách bằng dấu hai chấm chứa mật khẩu người dùng được mã hóa.
/etc/gshadow
-
Một tệp gồm bốn trường được phân cách bằng dấu hai chấm chứa mật khẩu nhóm được mã hóa.
Mặc dù bốn tệp này đều ở dạng văn bản thuần túy nhưng chúng không nên được chỉnh sửa trực tiếp mà phải thông qua các công cụ được cung cấp bởi bản phân phối mà người dùng đang sử dụng.
/etc/passwd
Đây là một tệp có thể được đọc trên phạm vi toàn cục có chứa danh sách người dùng, mỗi người dùng sẽ nằm trên một dòng riêng biệt. Mỗi dòng sẽ bao gồm bảy trường được phân cách bằng dấu hai chấm:
- Tên người dùng
-
Tên được sử dụng khi người dùng đăng nhập vào hệ thống.
- Mật khẩu
-
Mật khẩu được mã hóa (hoặc
x
nếu sử dụng mật khẩu ẩn). - ID người dùng (UID)
-
Số ID được gán cho người dùng trong hệ thống.
- ID nhóm (GID)
-
Số ID nhóm chính của người dùng trong hệ thống.
- GECOS
-
Trường chú thích tùy chọn được sử dụng để thêm thông tin bổ sung về người dùng (chẳng hạn như tên đầy đủ). Trường này có thể chứa nhiều mục được phân tách bằng dấu phẩy.
- Thư mục chính
-
Đường dẫn tuyệt đối của thư mục chính của người dùng.
- Vỏ
-
Đường dẫn tuyệt đối của chương trình được tự động khởi chạy khi người dùng đăng nhập vào hệ thống (thường là vỏ tương tác, chẳng hạn như
/bin/bash
).
/etc/group
Đây là một tệp có thể được đọc trên phạm vi toàn cục có chứa danh sách các nhóm, mỗi nhóm sẽ nằm trên một dòng riêng biệt. Mỗi dòng sẽ bao gồm bốn trường được phân cách bằng dấu hai chấm:
- Tên nhóm
-
Tên của nhóm.
- Mật khẩu nhóm
-
Mật khẩu được mã hóa của nhóm (hoặc
x
nếu sử dụng mật khẩu ẩn). - ID nhóm (GID)
-
Số ID được gán cho nhóm trong hệ thống.
- Danh sách thành viên
-
Danh sách người dùng thuộc nhóm được phân cách bằng dấu phẩy (ngoại trừ những người có nhóm này là nhóm chính).
/etc/shadow
Đây là tệp chỉ có thể được đọc bởi siêu người dùng và những người dùng có quyền gốc bao gồm cả mật khẩu người dùng được mã hóa, mỗi mật khẩu nằm trên một dòng riêng biệt. Mỗi dòng sẽ bao gồm chín trường được phân cách bằng dấu hai chấm:
- Tên người dùng
-
Tên được sử dụng khi người dùng đăng nhập vào hệ thống.
- Mật khẩu được mã hóa
-
Mật khẩu được mã hóa của người dùng (nếu giá trị bắt đầu bằng
!
, tài khoản sẽ bị khóa). - Ngày thay đổi mật khẩu lần cuối
-
Ngày thay đổi mật khẩu cuối cùng: là số ngày kể từ ngày 01/01/1970 (giá trị 0 có nghĩa là người dùng phải thay đổi mật khẩu khi đăng nhập lần tiếp theo).
- Tuổi mật khẩu tối thiểu
-
Số ngày tối thiểu phải trôi qua sau một lần thay đổi mật khẩu trước khi người dùng được phép tiếp tục thay đổi mật khẩu.
- Tuổi mật khẩu tối đa
-
Số ngày tối đa phải trôi qua trước khi mật khẩu cần được thay đổi.
- Thời gian cảnh báo mật khẩu
-
Số ngày trước khi mật khẩu hết hạn mà trong thời gian đó người dùng được cảnh báo phải thay đổi mật khẩu.
- Thời gian không hoạt động của mật khẩu
-
Số ngày sau khi mật khẩu hết hạn mà người dùng phải cập nhật mật khẩu. Sau khoảng thời gian này, nếu người dùng không thay đổi mật khẩu, tài khoản sẽ bị vô hiệu hóa.
- Ngày hết hạn tài khoản
-
Ngày tài khoản người dùng sẽ bị vô hiệu hóa (được biểu thị bằng số ngày kể từ ngày 01/01/1970; trường trống có nghĩa là tài khoản người dùng sẽ không bao giờ hết hạn).
- Trường đặt riêng
-
Một trường được dành riêng để sử dụng trong tương lai.
/etc/gshadow
Đây là tệp chỉ có thể được đọc bởi siêu người dùng và những người dùng có quyền gốc bao gồm cả mật khẩu người dùng được mã hóa, mỗi mật khẩu nằm trên một dòng riêng biệt. Mỗi dòng sẽ bao gồm chín trường được phân cách bằng dấu hai chấm:
- Tên nhóm
-
Tên của nhóm.
- Mật khẩu được mã hóa
-
Mật khẩu được mã hóa cho nhóm (được sử dụng khi người dùng không phải là thành viên của nhóm và muốn tham gia nhóm bằng lệnh
newgrp
— nếu mật khẩu bắt đầu bằng!
thì không ai được phép truy cập nhóm bằngnewgrp
). - Quản trị viên nhóm
-
Danh sách quản trị viên của nhóm được phân cách bằng dấu phẩy (họ có thể thay đổi mật khẩu của nhóm và có thể thêm hoặc xóa thành viên nhóm bằng lệnh
gpasswd
). - Thành viên nhóm
-
Danh sách các thành viên của nhóm được phân cách bằng dấu phẩy.
Lọc Cơ sở dữ liệu Mật khẩu và Nhóm
Chúng ta có thể sẽ thường xuyên phải xem lại thông tin về người dùng và nhóm được lưu trữ trong bốn tệp này và tìm kiếm các thông tin cụ thể. Để thực hiện tác vụ này, ta có thể sử dụng lệnh grep
hoặc lệnh ghép giữa cat
và grep
.
# grep emma /etc/passwd emma:x:1020:1020:User Emma:/home/emma:/bin/bash # cat /etc/group | grep db-admin db-admin:x:1050:grace,frank
Một cách khác để truy cập các cơ sở dữ liệu này là sử dụng lệnh getent
. Nhìn chung, lệnh này sẽ hiển thị các mục từ cơ sở dữ liệu được thư viện Chuyển đổi Dịch vụ Tên (NSS) hỗ trợ và yêu cầu tên cơ sở dữ liệu cũng như một từ khóa tra cứu. Nếu không có đối số từ khoá nào được cung cấp, tất cả các mục trong cơ sở dữ liệu đã chỉ định sẽ được hiển thị (trừ khi cơ sở dữ liệu không hỗ trợ liệt kê). Mặt khác, nếu một hoặc nhiều đối số từ khoá được cung cấp, cơ sở dữ liệu sẽ được lọc tương ứng với những từ khoá đó.
# getent passwd emma emma:x:1020:1020:User Emma:/home/emma:/bin/bash # getent group db-admin db-admin:x:1050:grace,frank
Lệnh getent
không yêu cầu quyền gốc. Người dùng chỉ cần có khả năng đọc cơ sở dữ liệu mà họ muốn truy xuất thông tin.
Note
|
Hãy nhớ rằng |
Bài tập Hướng dẫn
-
Hãy quan sát kết quả đầu ra sau và trả lời các câu hỏi:
# cat /etc/passwd | grep '\(root\|mail\|catherine\|kevin\)' root:x:0:0:root:/root:/bin/bash mail:x:8:8:mail:/var/spool/mail:/sbin/nologin catherine:x:1030:1025:User Chaterine:/home/catherine:/bin/bash kevin:x:1040:1015:User Kevin:/home/kevin:/bin/bash # cat /etc/group | grep '\(root\|mail\|db-admin\|app-developer\)' root:x:0: mail:x:8: db-admin:x:1015:emma,grace app-developer:x:1016:catherine,dave,christian # cat /etc/shadow | grep '\(root\|mail\|catherine\|kevin\)' root:$6$1u36Ipok$ljt8ooPMLewAhkQPf.lYgGopAB.jClTO6ljsdczxvkLPkpi/amgp.zyfAN680zrLLp2avvpdKA0llpssdfcPppOp:18015:0:99999:7::: mail:*:18015:0:99999:7::: catherine:$6$ABCD25jlld14hpPthEFGnnssEWw1234yioMpliABCdef1f3478kAfhhAfgbAMjY1/BAeeAsl/FeEdddKd12345g6kPACcik:18015:20:90:5::: kevin:$6$DEFGabc123WrLp223fsvp0ddx3dbA7pPPc4LMaa123u6Lp02Lpvm123456pyphhh5ps012vbArL245.PR1345kkA3Gas12P:18015:0:60:7:2:: # cat /etc/gshadow | grep '\(root\|mail\|db-admin\|app-developer\)' root:*:: mail:*:: db-admin:!:emma:emma,grace app-developer:!::catherine,dave,christian
-
ID người dùng (UID) và ID nhóm (GID) của
root
vàcatherine
là gì? -
Tên nhóm chính của
kevin
là gì? Có thành viên nào khác trong nhóm này không? -
Vỏ nào được đặt cho
mail
? Nó có nghĩa là gì? -
Thành viên của nhóm
app-developer
là những ai? Thành viên nào trong số này là quản trị viên nhóm và thành viên nào là thành viên thông thường? -
Thời gian tồn tại tối thiểu của mật khẩu đối với
catherine
là bao lâu? Và thời gian tồn tại tối đa của mật khẩu là bao lâu? -
Khoảng thời gian không hoạt động của mật khẩu đối với
kevin
là bao lâu?
-
-
Theo quy ước, ID nào được gán cho tài khoản hệ thống và ID nào được gán cho người dùng thông thường?
-
Giả sử hệ thống của bạn sử dụng mật khẩu ẩn, làm cách nào để biết tài khoản người dùng mà trước đây có thể truy cập vào hệ thống bây giờ có bị khóa hay không?
Bài tập Mở rộng
-
Hãy tạo tài khoản người dùng có tên
christian
bằng cách sử dụng lệnhuseradd -m
và xác định ID người dùng (UID), ID nhóm (GID) và vỏ của tài khoản đó. -
Hãy xác định tên nhóm chính của
christian
. Bạn có thể suy luận ra điều gì từ đây? -
Bằng cách sử dụng lệnh
getent
, hãy xem thông tin lão hoá mật khẩu của tài khoản người dùngchristian
. -
Hãy thêm nhóm
editor
vào các nhóm phụ củachristian
. Giả sử rằng nhóm này đã chứaemma
,dave
vàfrank
là thành viên thông thường. Làm cách nào để có thể xác minh rằng nhóm này không có quản trị viên? -
Hãy chạy lệnh
ls -l /etc/passwd /etc/group /etc/shadow /etc/gshadow
và mô tả đầu ra của nó về các quyền đối với tệp. Tệp nào trong số bốn tệp này bị ẩn vì lý do bảo mật (giả sử hệ thống của bạn sử dụng mật khẩu ẩn)?
Tóm tắt
Trong bài học này, chúng ta đã học về:
-
Vị trí của các tệp lưu trữ thông tin về người dùng và nhóm.
-
Quản lý thông tin người dùng và nhóm được lưu trữ trong cơ sở dữ liệu mật khẩu và nhóm.
-
Lấy thông tin từ Cơ sở dữ liệu Mật khẩu và Nhóm.
Các tệp và lệnh sau đã được thảo luận trong bài học này:
/etc/passwd
-
Tệp chứa thông tin cơ bản về người dùng.
/etc/nhóm
-
Tệp chứa thông tin cơ bản về các nhóm.
/etc/shadow
-
Tệp chứa mật khẩu người dùng được mã hóa.
/etc/gshadow
-
Tệp chứa mật khẩu nhóm được mã hóa.
getent
-
Lọc Cơ sở dữ liệu Mật khẩu và Nhóm.
Đáp án Bài tập Hướng dẫn
-
Hãy quan sát kết quả đầu ra sau và trả lời các câu hỏi:
# cat /etc/passwd | grep '\(root\|mail\|catherine\|kevin\)' root:x:0:0:root:/root:/bin/bash mail:x:8:8:mail:/var/spool/mail:/sbin/nologin catherine:x:1030:1025:User Chaterine:/home/catherine:/bin/bash kevin:x:1040:1015:User Kevin:/home/kevin:/bin/bash # cat /etc/group | grep '\(root\|mail\|db-admin\|app-developer\)' root:x:0: mail:x:8: db-admin:x:1015:emma,grace app-developer:x:1016:catherine,dave,christian # cat /etc/shadow | grep '\(root\|mail\|catherine\|kevin\)' root:$6$1u36Ipok$ljt8ooPMLewAhkQPf.lYgGopAB.jClTO6ljsdczxvkLPkpi/amgp.zyfAN680zrLLp2avvpdKA0llpssdfcPppOp:18015:0:99999:7::: mail:*:18015:0:99999:7::: catherine:$6$ABCD25jlld14hpPthEFGnnssEWw1234yioMpliABCdef1f3478kAfhhAfgbAMjY1/BAeeAsl/FeEdddKd12345g6kPACcik:18015:20:90:5::: kevin:$6$DEFGabc123WrLp223fsvp0ddx3dbA7pPPc4LMaa123u6Lp02Lpvm123456pyphhh5ps012vbArL245.PR1345kkA3Gas12P:18015:0:60:7:2:: # cat /etc/gshadow | grep '\(root\|mail\|db-admin\|app-developer\)' root:*:: mail:*:: db-admin:!:emma:emma,grace app-developer:!::catherine,dave,christian
-
ID người dùng (UID) và ID nhóm (GID) của
root
vàcatherine
là gì?UID và GID của
root
là 0 và 0, trong khi UID và GID củacatherine
là 1030 và 1025. -
Tên nhóm chính của
kevin
là gì? Có thành viên nào khác trong nhóm này không?Tên nhóm là
db-admin
. Ngoài raemma
vàgrace
cũng nằm trong nhóm này. -
Vỏ nào được đặt cho
mail
? Nó có nghĩa là gì?mail
là tài khoản người dùng hệ thống và vỏ của nó là/sbin/nologin
. Trên thực tế, các tài khoản người dùng hệ thống nhưmail
,ftp
,news
vàdaemon
được sử dụng để thực hiện các tác vụ quản trị và do đó việc đăng nhập thông thường nên bị chặn đối với các tài khoản này. Đây là lý do tại sao vỏ thường được đặt thành/sbin/nologin
hoặc/bin/false
. -
Thành viên của nhóm
app-developer
là những ai? Thành viên nào trong số này là quản trị viên nhóm và thành viên nào là thành viên thông thường?Các thành viên là
catherine
,dave
vàchristian
và họ đều là những thành viên thông thường. -
Thời gian tồn tại tối thiểu của mật khẩu đối với
catherine
là bao lâu? Và thời gian tồn tại tối đa của mật khẩu là bao lâu?Thời gian tồn tại của mật khẩu tối thiểu là 20 ngày, còn thời gian tồn tại tối đa là 90 ngày.
-
Khoảng thời gian không hoạt động của mật khẩu đối với
kevin
là bao lâu?Thời gian mật khẩu không hoạt động là 2 ngày. Trong thời gian này,
kevin
nên cập nhật mật khẩu; nếu không, tài khoản sẽ bị vô hiệu hóa.
-
-
Theo quy ước, ID nào được gán cho tài khoản hệ thống và ID nào được gán cho người dùng thông thường?
Tài khoản hệ thống thường có UID nhỏ hơn 100 hoặc từ 500 đến 1000, trong khi người dùng thông thường sẽ có UID bắt đầu từ 1000 (mặc dù một số hệ thống cũ có thể bắt đầu đánh số từ 500). Người dùng
root
có UID 0. Hãy nhớ rằng các giá trịUID_MIN
vàUID_MAX
trong/etc/login.defs
sẽ xác định phạm vi UID được sử dụng để tạo người dùng thông thường. Theo quan điểm của LPI Linux Essentials và LPIC-1, tài khoản hệ thống sẽ có UID nhỏ hơn 1000 và người dùng thông thường sẽ có UID lớn hơn 1000. -
Giả sử hệ thống của bạn sử dụng mật khẩu ẩn, làm cách nào để biết tài khoản người dùng mà trước đây có thể truy cập vào hệ thống bây giờ có bị khóa hay không?
Khi mật khẩu ẩn được sử dụng, trường thứ hai trong
/etc/passwd
sẽ chứa ký tựx
cho mỗi tài khoản người dùng vì mật khẩu người dùng được mã hóa sẽ được lưu trữ trong/etc/shadow
. Đặc biệt, mật khẩu được mã hóa của tài khoản người dùng sẽ được lưu trữ trong trường thứ hai của tệp này và nếu nó bắt đầu bằng dấu chấm than thì tài khoản sẽ bị khóa.
Đáp án Bài tập Mở rộng
-
Hãy tạo tài khoản người dùng có tên
christian
bằng cách sử dụng lệnhuseradd -m
và xác định ID người dùng (UID), ID nhóm (GID) và vỏ của tài khoản đó.# useradd -m christian # cat /etc/passwd | grep christian christian:x:1050:1060::/home/christian:/bin/bash
UID và GID của
christian
lần lượt là 1050 và 1060 (trường thứ ba và thứ tư trong/etc/passwd
)./bin/bash
là tệp vỏ cho tài khoản người dùng này (trường thứ bảy trong/etc/passwd
). -
Hãy xác định tên nhóm chính của
christian
. Bạn có thể suy luận ra điều gì từ đây?# cat /etc/group | grep 1060 christian:x:1060:
Tên nhóm chính của
christian
làchristian
(trường đầu tiên trong/etc/group
). Do đó,USERGROUPS_ENAB
trong/etc/login.defs
sẽ được đặt thành "Yes" đểuseradd
tạo theo mặc định một nhóm có cùng tên với tài khoản người dùng. -
Bằng cách sử dụng lệnh
getent
, hãy xem thông tin lão hoá mật khẩu của tài khoản người dùngchristian
.# getent shadow christian christian:!:18015:0:99999:7:::
Tài khoản người dùng
christian
không được đặt mật khẩu và hiện đã bị khóa (trường thứ hai trong/etc/shadow
chứa dấu chấm than). Tài khoản người dùng này không có tuổi mật khẩu tối thiểu và tối đa (trường thứ tư và thứ năm trong/etc/shadow
được đặt thành 0 và 99999 ngày), trong khi thời gian cảnh báo mật khẩu được đặt thành 7 ngày (trường thứ sáu trong/etc/shadow
). Cuối cùng, không có khoảng thời gian không hoạt động (trường thứ bảy trong/etc/shadow
) và tài khoản sẽ không bao giờ hết hạn (trường thứ tám trong/etc/shadow
). -
Hãy thêm nhóm
editor
vào các nhóm phụ củachristian
. Giả sử rằng nhóm này đã chứaemma
,dave
vàfrank
là thành viên thông thường. Làm cách nào để có thể xác minh rằng nhóm này không có quản trị viên?# cat /etc/group | grep editor editor:x:1100:emma,dave,frank # usermod -a -G editor christian # cat /etc/group | grep editor editor:x:1100:emma,dave,frank,christian # cat /etc/gshadow | grep editor editor:!::emma,dave,frank,christian
Trường thứ ba và thứ tư trong
/etc/ghadow
có chứa quản trị viên và thành viên thông thường của nhóm được chỉ định. Vì trường thứ ba củaeditor
trống nên không có quản trị viên nào cho nhóm này (emma
,dave
,frank
vàchristian
đều là những thành viên thông thường). -
Hãy chạy lệnh
ls -l /etc/passwd /etc/group /etc/shadow /etc/gshadow
và mô tả đầu ra của nó về các quyền đối với tệp. Tệp nào trong số bốn tệp này bị ẩn vì lý do bảo mật (giả sử hệ thống của bạn sử dụng mật khẩu ẩn)?# ls -l /etc/passwd /etc/group /etc/shadow /etc/gshadow -rw-r--r-- 1 root root 853 mag 1 08:00 /etc/group -rw-r----- 1 root shadow 1203 mag 1 08:00 /etc/gshadow -rw-r--r-- 1 root root 1354 mag 1 08:00 /etc/passwd -rw-r----- 1 root shadow 1563 mag 1 08:00 /etc/shadow
Các tệp
/etc/passwd
và/etc/group
có thể được đọc trên phạm vi toàn cục và bị ẩn vì lý do bảo mật. Khi mật khẩu ẩn được sử dụng, bạn có thể thấyx
trong trường thứ hai của các tệp này vì mật khẩu được mã hóa cho người dùng và nhóm được lưu trữ trong/etc/shadow
và/etc/gshadow
và chỉ có thể đọc được bởi siêu người dùng và các thành viên thuộc nhómshadow
.