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

Tài khoản người dùng đặc biệt trên hệ thống 
Trong quá trình cài đặt một hệ thống Linux, một số tài khoản người dùng đặc biệt sẽ tự động được tạo ra. Các tài khoản người dùng này được sử dụng với một số chức năng đặc biệt trên hệ thống. 

Có 3 tài khoản người dùng đặc biệt : root, nobody và bin.

Tài khoản root
Tài khoản root còn được gọi là tài khoản siêu người dùng là tài khoản có quyền cao nhất trên hệ thống Linux. Người dùng sử dụng tài khoản root để thực hiện một số công việc quản trị hệ thống bao gồm : thêm các tài khoản người dùng mới, thay đổi mật khẩu của người dùng, xem các file log của hệ thống, cài đặt phần mềm, gỡ bỏ phần mềm, thay đổi quyền của file trên hệ thống … 

Khi sử dụng tài khoản root, người dùng phải rất cẩn thận vì mọi thao sẽ ảnh hưởng trực tiếp đến hệ thống. Tuy nhiên trong quá trình người dùng sử dụng tài khoản root để thực hiện một số công việc quản trị, hệ thống luôn có cảnh báo các thao tác mà người dùng đang thực hiện để tránh trường hợp người dùng làm sai ảnh hưởng đến hệ thống.

Tài khoản nobody
Tài khoản người dùng nobody được sử dụng để chạy các dịch vụ trên hệ thống. Tài khoản này không có thư mục home hoặc môi trường làm việc shell. Nếu tài khoản này bị lỗi, các dịch vụ đang chạy sử dụng tài khoản này sẽ bị ảnh hưởng nhưng hệ thống vẫn được bảo mật. 

Tài khoản bin
Tài khoản bin được sử dụng trên hệ thống với thư mục home là /bin. Tài khoản này được sử dụng để bảo mật các file nhị phân cơ bản trên hệ thống. Tài khoản bin không có môi trường làm việc shell. Tài khoản này được tạo mặc định trong quá trình cài đặt hệ thống. 

Tạo tài khoản người dùng và nhóm người dùng 

Linux kernel coi mọi người dùng trên hệ thống là các con số. Mỗi người dùng trên hệ thống được nhận diện bởi một số nguyên duy nhất được gọi là user id hoặc uid. 

Một cơ sở dữ liệu riêng ngoài kernel sẽ gán một username cho mỗi user id. Cơ sở dữ liệu này chứa thông tin cơ bản của người dùng. Khi tài khoản người dùng được tạo ra trên hệ thống, mỗi một người dùng sẽ được gán một số user id. Số user id này có thể được tạo một cách tự động hoặc do người quản trị tạo ra. 

Mỗi người dùng đều là một thành viên của một nhóm đặc biệt (tên của nhóm trùng với tên của người dùng) và có thể chuyển là thành viên của nhóm khác trên hệ thống. Giống như mỗi người dùng, mỗi nhóm người dùng cũng có một số group id hoặc gid để nhận diện trên hệ thống. 

Lưu trữ thông tin người dùng
Cơ sở dữ liệu cơ bản của người dùng được lưu trữ trong file /etc/passwd. File này liệt kê tất cả các tên người dùng hợp lệ và các thông tin liên quan của mỗi người dùng trên hệ thống. 
Ví dụ file /etc/passwd trên hệ thống :

Hình ảnh


Mỗi một người dùng trên hệ thống được miêu tả bằng 1 dòng trong file /etc/passwd và mỗi một dòng được chia thành 7 trường ngăn cách nhau bởi dấu ":"

root : x : 0 : 0 : root : /root: /bin/bash

Trong đó :
Trường thứ 1 là username được đặt tên tối đa 8 ký tự. Username trên hệ thống Linux phân biệt chữ hoa, chữ thường và thường được đặt tất cả là chữ thường. Trong ví dụ username là "root". 

Trường thứ 2 là mật khẩu của người dùng, trong ví dụ là chữ "x". Chữ "x" cho biết mật khẩu đã được mã hóa và được đặt trong file khác (/etc/shadow).

Trường thứ 3 là số user id của người dùng. Trong ví dụ user id của người dùng root là "0".

Trường thứ 4 là số group id của nhóm người dùng. Thông thường số group id sẽ giống số user id của người dùng. Trong ví dụ group id của root là "0". 

Trường thứ 5 là tên đầy đủ hoặc các miêu tả khác của tài khoản người dùng. Trong ví dụ tài khoản root cũng có tên đầy đủ là "root". 

Trường thứ 6 là thư mục home của người dùng. Thông thường thư mục home của người dùng trên hệ thống là /home/username. Trong ví dụ thư mục home của root là "/root". 

Trường thứ 7 là shell đăng nhập mặc định của người dùng. Mỗi người dùng có một shell đăng nhập (chương trình để chạy mỗi khi đăng nhập vào hệ thống). Trong ví dụ shell của root là /bin/bash (bash shell). 

Như vậy chúng ta thấy rằng mọi người dùng trên hệ thống đều có thể xem file /etc/passwd và họ sẽ thấy username và mật khẩu của mọi người dùng trên hệ thống. 

Điều gì sẽ xảy ra nếu mật khẩu của người dùng không được mã hóa mà ở dạng text ???

Mọi người trên hệ thống sẽ biết thông tin về username và password của những người dùng khác. Như vậy tài khoản của người dùng trên hệ thống sẽ bị đánh cắp và sử dụng trái phép bởi một người dùng nào đó. 

Biện pháp khắc phục là chúng ta sẽ mã hóa mật khẩu của người dùng bằng các thuật toán mã hóa như MD5. Tuy nhiên hiện nay việc bẻ khóa mật khẩu được tiến hành dễ dàng với các công cụ bẻ khóa nếu mật khẩu của người dùng được xem là “yếu” (độ dài ký tự nhỏ, không sử dụng các ký tự đặc biệt, không sử dụng chữ cái in hoa ...). 

Vì vấn đề này các hệ thống Linux không đặt mặt khẩu của mỗi người dùng trong file /etc/passwd mà xây dựng một file khác để lưu trữ mật khẩu riêng. Đó là file /etc/shadow
Ví dụ file /etc/shadow :

Hình ảnh


Chỉ có người dùng root mới có quyền xem file /etc/shadow. File này lưu trữ mật khẩu đã được mã hóa của tất cả người dùng trên hệ thống. File /etc/shadow chứa một số tài khoản người dùng và các tài khoản của các dịch vụ trên hệ thống. Các tài khoản dịch vụ này được cài đặt mặc định cho phép các dịch vụ khác nhau thực hiện đúng các chức năng của nó. 

Lưu trữ thông tin nhóm người dùng 
Trên một hệ thống Linux thông tin của nhóm người dùng được lưu trữ trong file /etc/group. Mỗi nhóm người dùng, mật khẩu, số group id và các thành viên của nhóm được lưu trữ trong file này. Cấu trúc thông tin trong file /etc/group giống cấu trúc trong file /etc/passwd (gồm 7 trường). 

Ví dụ file /etc/group :

Hình ảnh


Tạo một tài khoản người dùng mới
Để tạo một tài khoản người dùng mới vào hệ thống, chúng ta sử dụng câu lệnh useradd. 

Cú pháp :
useradd [options] <tên người dùng> 

Lệnh useradd sẽ tự động tạo các file của người dùng trên hệ thống, tạo thư mục home của người dùng và một số thông tin cấu hình khác phụ thuộc vào các option sử dụng. Khi một tài khoản người dùng mới được tạo ra, một tài khoản nhóm người dùng cùng tên với người dùng cũng sẽ tự động được tạo ra trên hệ thống. 

Một số option với lệnh useradd :
-d /home_directory : Tạo thư mục home cho người dùng. Chúng ta thường tạo thư mục home trùng với tên của người dùng và thường đặt là thư mục /home/<tênngườidùng>.

-e date : Xác định ngày mà tài khoản người dùng sẽ bị vô hiệu hóa trên hệ thống. Định dạng của ngày được đặt như sau YYYY-MM-DD (Năm-Tháng-Ngày).

-g group : Xác định tài khoản người dùng thuộc nhóm người dùng nào trên hệ thống. 

-G groups
 : Xác định tài khoản người dùng thuộc những nhóm người dùng nào trên hệ thống (một người dùng có thể thuộc nhiều nhóm khác nhau).

-s shell : Xác định shell mặc định của người dùng khi đặng nhập vào hệ thống. 

-u uid : Xác định số user id của người dùng. 

Ví dụ : Tạo tài khoản người dùng có tên ipmac, thư mục home là /home/ipmac, thuộc nhóm người dùng ipmac và có số user id là 722 sử dụng câu lệnh sau :

# useradd ipmac -d /home/ipmac -g ipmac -u 722

Xóa một tài khoản người dùng

Để xõa một tài khoản người dùng chúng ta sử dụng câu lệnh :

userdel [options] <tên người dùng>

Lệnh này sẽ xóa tài khoản người dùng trong 2 file /etc/passwd và /etc/shadow. Người dùng không thể đăng nhập vào hệ thống khi tài khoản của người dùng đã bị xóa. Chúng ta sử dụng thêm option -r để xóa thư mục home của người dùng và các file có trong thư mục home. 

Ví dụ : Để xóa tài khoản người dùng ipmac và thư mục home của người dùng ipmac trên hệ thống, chúng ta sử dụng câu lệnh sau : 

# userdel -r ipmac 

Chỉnh sửa một tài khoản người dùng
Sau khi tạo một tài khoản người dùng, để chỉnh sửa một số thông tin của tài khoản người dùng chúng ta sử dụng câu lệnh usermod. Câu lệnh usermod cho phép chúng ta chỉnh sửa một tài khoản người dùng với các tiêu chí sau : thay đổi thư mục home của người dùng, thay đổi thời gian hết hạn của tài khoản, thay đổi nhóm của người dùng, thay đổi tên đăng nhập, thay đổi login shell … 

Các option dùng với usermod giống với các option sử dụng với lệnh useradd. 

Cú pháp :
usermod [options] <tên người dùng> 

Tạo một nhóm người dùng mới
Để tạo một nhóm người dùng mới chúng ta sử dụng câu lệnh groupadd với các option tùy chọn.

Cú pháp :
# groupadd [options] <tên nhóm người dùng>

Các option : 
-g gid : Đặt số group id cho nhóm người dùng. 

-f : Bắt câu lệnh chạy mà không thông báo lỗi nếu đã có một nhóm trên hệ thống trùng với tên nhóm định tạo.
Và một số option khác. 

Ví dụ : Tạo một nhóm có tên ipmac với số group id của nhóm là 721 

# groupadd -g 721 ipmac 

Xóa một nhóm người dùng
Để xóa một nhóm chúng ta sử dụng câu lệnh groupdel. Chức năng của lệnh groupdel giống với lệnh userdel sẽ xóa toàn bộ thông tin của nhóm khỏi hệ thống (thông tin trong file /etc/group). Trước khi xóa một nhóm khỏi hệ thống chúng ta cần đảm bảo rằng không có người dùng nào đang yêu cầu truy cập đến nhóm đó. 

Cú pháp :
# groupdel <tên nhóm>

Chỉnh sửa một nhóm người dùng
Để chỉnh sửa một nhóm chúng ta sử dụng câu lệnh groupmod. Chức năng của lệnh groupmod giống chức năng của lệnh usermod. 

Cú pháp :
# groupmod [options] <tên nhóm>

Ví dụ : Thay đổi số group id của nhóm có tên ipmac

# groupmod ipmac -g 400

Tạo mật khẩu và thay đổi mật khẩu của người dùng
Để tạo mật khẩu hoặc thay đổi mật khẩu cho người dùng chúng ta sử dụng lệnh passwd. 

Cú pháp :
# passwd <tên người dùng>

Để thay đổi mật khẩu cho chính tài khoản chúng ta đang sử dụng, chúng ta chỉ cần sử dụng câu lệnh passwd (không cần nhập tên người dùng) sau đó nhập mật khẩu hiện tại rồi nhập mật khẩu mới. 

Để thay đổi mật khẩu cho một tài khoản khác trên hệ thống, chúng ta phải sử dụng tài khoản root để tiến hành thay đổi mật khẩu cho tài khoản người dùng khác (sử dụng sudo trước câu lệnh).