Quản lý người dùng và nhóm trên Linux Image Quản lý người dùng và nhóm trên Linux

Hệ điều hành Linux là hệ điều hành đa người dùng nên việc quản lý nguời dùng và nhóm rất quan trong. Bài viết này sẽ giới thiệu các bạn cách quản lý người dùng và nhóm trên Linux.

1. Cách xác định người dùng hiện tại

Hệ điều hành Linux là một hệ điều hành đa người dùng, nhiều người dùng có thể đăng nhập cùng một lúc.

Để xác định người dùng hiện tại, sử dụng lệnh

whoami

Để liệt kê những người dùng đang đăng nhập hiện tại trên hệ thống. Sử dụng tùy chọn -a sẽ cung cấp thông tin chi tiết hơn về nguời dùng.

who -a

Xem nguời dùng hiện tại

2. Giới thiệu về người dùng và nhóm trên Linux

User dùng để định danh cho một người dùng trong hệ thống. Và Group là tên định danh cho một nhóm người dùng có cùng một đặc điểm nào đó.

Một group có thể có nhiều user và một user có thể là thành viên trong nhiều group.

Tất cả người dùng Linux được gán một ID người dùng (uid), đây là một số nguyên, người dùng bình thường bắt đầu với uid từ 1000 trở lên.

Hệ điều hành Linux sử dụng nhóm để tổ chức người dùng. Nhóm là tập hợp các tài khoản với các quyền được chia sẻ nhất định. Kiểm soát thành viên nhóm thông qua tệp /etc/group , trong đó hiển thị danh sách các nhóm và thành viên của họ.

Người dùng cũng có một hoặc nhiều ID nhóm (gid), bao gồm một ID mặc định giống với ID người dùng. Những con số này được liên kết với tên thông qua các tập tin /etc/passwd và /etc/group . Các nhóm được sử dụng để thiết lập một nhóm người dùng có lợi ích chung cho các mục đích quyền truy cập, đặc quyền và cân nhắc bảo mật.

Ví dụ về tệp /etc/group và /etc/passwd

Ví dụ về tệp /etc/group và tệp /etc/passwd

3. Cách tạo và xóa người dùng

Để tạo một user chúng ta sử dụng lệnh useradd

Ví dụ: Tạo user với tên username và đặt mật khẩu cho user này dùng lệnh passwd

useradd username

passwd username

Để xóa user chúng ta sử dụng lệnh userdel

Ví dụ: Xoá user có tên username

userdel username

4. Cách tạo và xóa nhóm.

Thông thường khi ta tạo một user thì hệ thống sẽ tự tạo ra một group cùng tên đó và gán user vô group luôn. Nếu muốn tạo một group mới thì chúng ta sử dụng lệnh groupadd

Ví dụ: Tạo group với tên newgroup

groupadd newgroup

Ví dụ: Thêm user vào group

Để tạo mới một user mới tên username và thêm nó vào group thì chúng ta sử dụng lệnh useradd

useradd -a -G newgroup username

Trường hợp muốn thêm một user tên username1 đã có sẵn trong hệ thống vào group thì chúng ta sử dụng lệnh usermod

usermod -a -G newgroup username1

Ví dụ: Xóa một group chúng ta sử dụng lệnh groupdel

groupdel newgroup

Các file lưu trữ thông tin về user và group trên Linux thông thường được lưu ở các vị trí sau:

  • /etc/passwd

  • /etc/shadow

  • /etc/group

5. Tài khoản root trên Linux

Tài khoản root trên Linux rất mạnh và có toàn quyền truy cập vào hệ thống. Các hệ điều hành khác thường gọi đây là tài khoản quản trị viên. Trong hệ điều hành Linux, thì tài khoản root được gọi là tài khoản super user. Phải cực kỳ thận trọng trước khi cấp quyền truy cập root đầy đủ cho người dùng. Các cuộc tấn công thường bao gồm các thủ thuật được sử dụng để nâng lên tài khoản root.

Tuy nhiên, chúng ta có thể sử dụng tính năng sudo để gán các đặc quyền hạn chế hơn cho tài khoản người dùng:

  • Chỉ trên cơ sở tạm thời

  • Chỉ cho một tập hợp con cụ thể của lệnh.

Tài khoản root

6. Khác nhau giữa lệnh “su” và “sudo”

Khi sử dụng gán đặc quyền nâng cao, chúng ta có thể sử dụng lệnh su để khởi chạy shell mới chạy với tư cách người dùng khác (chúng ta nhập mật khẩu của người dùng mà bạn đang muốn trở thành). Thông thường, người dùng khác này là root và shell mới cho phép sử dụng các đặc quyền nâng cao cho đến khi thoát. Luôn là một mối nguy hiểm cho cả bảo mật và ổn định để sử dụng su để trở thành root. Lỗi có thể bao gồm xóa các tệp quan trọng khỏi hệ thống và vi phạm bảo mật.

Cấp đặc quyền bằng sudo ít nguy hiểm hơn và được ưu tiên. Lệnh sudo được bật trên cơ sở mỗi người dùng.

Bản phân phối (như Ubuntu) cho phép mặc định ít nhất một người dùng chính hoặc cung cấp tùy chọn này dưới dạng tùy chọn cài đặt.

7. Cách cấu hình script tự động chạy khi người dùng đăng nhập

Hệ điều hành Linux, chương trình shell sử dụng một hoặc nhiều tệp khởi động để cấu hình môi trường người dùng. Các tệp trong thư mục /etc cài đặt chung cho tất cả người dùng, các tệp khởi tạo trong thư mục chính của người dùng có thể bao gồm và / hoặc ghi đè vào cài đặt chung.

Các tệp khởi động có thể làm bất cứ điều gì chúng ta muốn như:

  • Tùy chỉnh lời nhắc
  • Xác định các phím tắt và bí danh dòng lệnh
  • Đặt trình soạn thảo văn bản mặc định
  • Đặt đường dẫn cho nơi tìm chương trình thực thi

User startup file

Khi bạn đăng nhập lần đầu vào Linux, /etc/profile được đọc và đánh giá, sau đó các tệp sau được tìm kiếm theo thứ tự được liệt kê:

  • ~/.bash_profile
  • ~/.bash_login
  • ~/.profile

Trong đó kí hiệu ~/. biểu thị thư mục home của người dùng. Khi đăng nhập Linux shell đánh giá bất kỳ tệp khởi động nào mà xuất hiện đầu tiên và bỏ qua phần còn lại. Có nghĩa là nếu nó tìm thấy ~/.bash_profile, nó sẽ bỏ qua ~/.bash_login và ~/.profile . Các bản phân phối khác nhau sử dụng các tệp khởi động khác nhau.

Chúng ta chỉ sử dụng ~/.bashrc, vì nó được gọi mỗi khi shell khởi chạy hoặc chương trình khác được khởi chạy từ terminal window, các tệp khác chỉ được đọc và thực thi khi người dùng đăng nhập lần đầu hệ thống.

Các bản phân phối gần đây thường không có .bash_profile hoặc .bash_login (Ubuntu).

Startup file

Chúng ta có thể tạo các lệnh tùy chỉnh hoặc sửa đổi lệnh đã có bằng cách tạo bí danh. Các bí danh được đặt trong tệp ~/.bashrc để chúng có sẵn cho bất kỳ shell lệnh nào được tạo. unalias loại bỏ một bí danh.

Nhập alias để liệt kê các bí danh được xác định.

Alias

Lưu ý : Không nên có bất kỳ khoảng trắng nào ở hai bên của dấu bằng và định nghĩa alias cần được đặt trong dấu ngoặc đơn hoặc dấu ngoặc kép nếu nó chứa bất kỳ khoảng trắng nào.

8. Lệnh chage và lệnh getent

8.1. Lệnh chage

Lệnh chage thay đổi thông tin hết hạn mật khẩu người dùng. Cách dùng lệnh change như sau:

chage [tuỳ chọn] [login]

Để xem danh sách các tùy chọn có thể được sử dụng bằng lệnh chage, hãy sử dụng tùy chọn trợ giúp: chage -h

Ví dụ 1: Sử dụng tùy chọn -l xem thông tin aging của user root

[root@test1 ~]# chage -l root
Last password change					: Jul 12, 2018
Password expires					: never
Password inactive					: never
Account expires						: never
Minimum number of days between password change		: 0
Maximum number of days between password change		: 99999
Number of days of warning before password expires	: 7

Ví dụ 2: Sử dụng tùy chọn -d để đặt ngày thay đổi mật khẩu cuối cùng thành ngày được chỉ định trong lệnh.

[root@test1 ~]# chage -l dang
Last password change					: Jul 15, 2018
Password expires					: never
Password inactive					: never
Account expires						: never
Minimum number of days between password change		: 0
Maximum number of days between password change		: 99999
Number of days of warning before password expires	: 7
[root@test1 ~]# chage -d 2019-03-01 dang
[root@test1 ~]# chage -l dang
Last password change					: Mar 01, 2019
Password expires					: never
Password inactive					: never
Account expires						: never
Minimum number of days between password change		: 0
Maximum number of days between password change		: 99999
Number of days of warning before password expires	: 7

Qua ví dụ trên bạn có thể thấy giá trị của trường 'Last password change' đã được thay đổi thành công từ Jul 15, 2018 thành Mar 01, 2019.

Ví dụ 3: Sử dụng tùy chọn -E để chỉ định ngày khi tài khoản hết hạn.

[root@test1 ~]# chage -l dang
Last password change					: Mar 01, 2019
Password expires					: never
Password inactive					: never
Account expires						: never
Minimum number of days between password change		: 0
Maximum number of days between password change		: 99999
Number of days of warning before password expires	: 7
[root@test1 ~]# chage -E 2020-03-01 dang
[root@test1 ~]# chage -l dang
Last password change					: Mar 01, 2019
Password expires					: never
Password inactive					: never
Account expires						: Mar 01, 2020
Minimum number of days between password change		: 0
Maximum number of days between password change		: 99999
Number of days of warning before password expires	: 7

Ví dụ 4: Sử dụng tùy chọn -m hoặc -M để chỉ định số ngày tối đa và tối thiểu giữa các lần thay đổi mật khẩu.

[root@test1 ~]# chage -M 5 dang
[root@test1 ~]# chage -l dang
Last password change					: Mar 01, 2019
Password expires					: Mar 06, 2019
Password inactive					: never
Account expires						: Mar 01, 2020
Minimum number of days between password change		: 0
Maximum number of days between password change		: 5
Number of days of warning before password expires	: 7

Ví dụ 5: Sử dụng tùy chọn -W để đưa ra cảnh báo trước khi mật khẩu hết hạn

[root@test1 ~]# chage -l dang
Last password change					: Mar 01, 2019
Password expires					: Mar 06, 2019
Password inactive					: never
Account expires						: Mar 01, 2020
Minimum number of days between password change		: 0
Maximum number of days between password change		: 5
Number of days of warning before password expires	: 7
[root@test1 ~]# chage -W 3 dang
[root@test1 ~]# chage -l dang
Last password change					: Mar 01, 2019
Password expires					: Mar 06, 2019
Password inactive					: never
Account expires						: Mar 01, 2020
Minimum number of days between password change		: 0
Maximum number of days between password change		: 5
Number of days of warning before password expires	: 3

8.2. Lệnh getent

Lệnh getent nhận các mục từ cơ sở dữ liệu administrative. Các cơ sở dữ liệu mà nó tìm kiếm là: ahosts, ahostsv4, ahostsv6, bí danh(aliases), ethers(địa chỉ Ethernet), group, gshadow, hosts, netgroup, networks, passwd, protocols, rpc, services và shadow. Cách dùng lệnh getent như sau:

getent [database] [key ...]

Ví dụ 1: Tìm dịch vụ nào đang sử dụng cổng cụ thể

[root@test1 ~]# getent services 22
ssh                   22/tcp
[root@test1 ~]# getent services 21
ftp                   21/tcp
[root@test1 ~]# getent services 25
smtp                  25/tcp mail
[root@test1 ~]# getent services 23
telnet                23/tcp

Ví dụ 2: Nhận thông tin cho người dùng đăng nhập hiện tại

[root@test1 ~]# getent passwd `whoami`
root:x:0:0:root:/root:/bin/bash

Ví dụ 3: Thực hiện tra cứu DNS ngược

[root@test1 ~]# getent hosts amazon.com
176.32.98.166   amazon.com
176.32.103.205  amazon.com
205.251.242.103 amazon.com

9. File /etc/passwd

File passwd nằm ở thư mục /etc chứa danh sách tài khoản trên hệ thống, cung cấp thông tin về mỗi tài khoản như: User ID, Group ID, Home Directory, Shell…

Định dạng của file /etc/passwd mỗi dòng trong file là thông tin 1 user. Có tất cả 7 trường trên mỗi dòng, các trường được phân tách bởi dấu 2 chấm ( : ). Dưới đây là 1 ví dụ về thông tin của một user.

Xem dòng đầu tiên của file: /etc/passwd

[root@test1 ~]# cat /etc/passwd | head -1
root:x:0:0:root:/root:/bin/bash
---- - - - ---- ----- ---------
  1  2 3 4   5    6       7

Ý nghĩa của 7 trường như sau:

  • Trường 1 Username: Tên người dùng, được sử dụng khi user đăng nhập, không nên chứa các ký tự in hoa trong username. Nó cộ độ dài từ 1 đến 32 kí tự.
  • Trường 2 Password: Nếu sử dụng shadow password thì nên sử dụng dấu x hoặc ký tự *
  • Trường 3 User ID (UID): Đây là 1 chuỗi số duy nhất được gán cho user, hệ thống sử dụng UID hơn là username để nhận dạng user.
  • Trường 4 Group ID (GID): Là 1 chuỗi số duy nhất được gán cho Group đầu tiên mà user này tham gia.
  • Trường 5 User ID Info: Dùng mô tả người dùng ví dụ như: địa chỉ, sdt,...
  • Trường 6 Home directory: Đường dẫn tuyệt đối đến thư mục mà người dùng sẽ ở khi họ đăng nhập. Nếu thư mục này không tồn tại thì thư mục người dùng sẽ trở thành /
  • Trường 7 Shell: Đường dẫn tuyệt đối của lệnh hoặc shell (/ bin / bash).

10. File /etc/shadow

Gắn với file /etc/passwd là file /etc/shadow. Nó là phương thức khác của Linux để lưu thông tin mật khẩu đăng nhập người dùng trên hệ thống. Thông tin được lưu tại đây sẽ an toàn hơn so với cách lưu trong tập tin /etc/passwd do tập tin này chỉ có tài khoản root hoặc có quyền sudo mới có thể truy cập.

Để xem dòng đầu tiên của file: /etc/shadown

[root@test1 ~]# cat /etc/shadow | head -1
root:$6$DmmrISbQu6/3B$wTsrr7dZIvgW7.ehrx643tVoOXTl0qBNNYOHHj9m3KkyRxKNxYuhUuvPlM9a5NU9VEYDyigV1Y5d7s2hqkh0y/:17724:0:99999:7: : :
---- ------------------------------------------------------------------------------------------------------- ----- - ----- - - -
  1                                                         2                                                  3   4   5   6 7 8

Đối với file /etc/shadow gồm có 8 trường:

  • Trường 1: Chính là username root
  • Trường thứ 2: Chính là password đã được mã hóa. Đây là một thuật toán băm.
  • Trường thứ 3: Là khoảng thời gian (tính bằng ngày) tính từ 1/1/1970 cho tới lần đổi mật khẩu gần nhất.
  • Trường thứ 4: Thời gian tối đa còn cho phép người dùng đổi mật khẩu, nếu là 0 tức là người dùng có thể đổi mật khẩu bất cứ khi nào, nếu là số khác 0, ví dụ 5, tức là người dùng còn 5 ngày nữa có thể đổi mật khẩu.
  • Trường thứ 5: Thời gian hiệu lực tối đa của mật khẩu, nếu là 99999 có nghĩa là vô hạn.
  • Trường thứ 6: Khoảng thời gian trước khi mật khẩu hết hạn, hệ thống sẽ cảnh báo cho người dùng, ở đây là 7, tức là trước khi hết hạn 7 ngày, hệ thống sẽ cảnh báo.
  • Trường thứ 7: Khoảng thời gian tài khoản hết hạn đăng nhập.
  • Trường thứ 8: Thời gian mà tài khoản đã hết hạn đăng nhập tính từ ngày 1/1/1970 (đơn vị tính là ngày).

11. File /etc/group

File /etc/group chứa các thuộc tính nhóm cơ bản. Đây là file ASCII chứa các bản ghi các nhóm trên hệ thống. Mỗi bản ghi xuất hiện trên một dòng duy nhất:

Để xem dòng đầu tiên của file /etc/group

[root@test1 ~]# cat /etc/group | head -1
root:x:0:
---- - - -
  1  2 3 4

File /etc/group có 4 trường:

  • Trường 1 groupname: Chứa tên được gán cho nhóm.
  • Trường 2 group-password: x trong trường này cho biết mật khẩu shadow được sử dụng.
  • Trường 3 GID: Chứa số GID của nhóm.
  • Trường 4 group-password: Danh sách người dùng là thành viên của nhóm.

Chú ý: Mỗi nhóm có thể có nhiều người dùng. Người dùng cũng có thể thuộc một hay nhiều nhóm.

12. File /etc/skel

File /etc/skel được sử dụng để bắt đầu thư mục chính khi người dùng được tạo lần đầu tiên. Cách bố trí mẫu của các file người dùng của skel được thể hiện dưới đây:

[root@test1 ~]# ls -lart /etc/skel
total 24
-rw-r--r--   1 root root  231 Oct 31 00:07 .bashrc
-rw-r--r--   1 root root  193 Oct 31 00:07 .bash_profile
-rw-r--r--   1 root root   18 Oct 31 00:07 .bash_logout
drwxr-xr-x.  2 root root   62 Mar  7 15:34 .
drwxr-xr-x. 78 root root 8192 Mar  7 15:36 ..

Quyền mặc định của thư mục /etc/skel là drwxr-xr-x. Không nên thay đổi quyền của skel hoặc nội dung của nó. Thay đổi quyền có thể có thể phá vỡ một số chương trình, bởi vì trong thư mục skel có một số cấu hình cần sự cho phép đọc và cấp cho nó quyền thực thi sẽ làm một số chương trình hoạt động.