Saturday, August 17, 2013

Quản lý user trên linux

1. Các khái niệm cơ bản về quản lý account của Linux và Unix
- Account trên Linux/Unix bao gồm nhiều thông tin trong đó hai phần liên quan đến việc sử dụng là username và userID:

  • username: khi sử dụng để login, gán quyền, v.v.. chúng ta thực hiện thông qua username, nhưng hệ thống lại hiểu và làm theo userID.
  • userID: Số đi kèm với username, hệ điều hành dùng số này để quản lý. Như vậy nếu có hai username khác nhau nhưng dùng chung một userID, thì hệ thống xem hai tên này chỉ là một.
- Quyền hạn: Linux và Unix chỉ phân biệt user làm hai loại
  • User có quyền root: Tất cả những user có userID=0, thường thì với một máy mới, chúng ta sẽ có ngay một user tên root và có userID=0. Nếu chúng ta tạo ra một user khác và sau đó sửa userID của nó thành 0, thì lúc này nó có quyền root y chang user tên là root của hệ thống.
  • User thường: Tất cả các user có userID khác 0 điều là người dùng thường.
- User và Group :Mỗi user trên linux bắt buộc phải thuộc một group nào đó (gọi là Primary Group), ngoài ra còn có thể lựa chọn tham gia vào các group khác (gọi là Secondary Group), theo một số tài liệu thì user có thể tham gia vào tối đa 16 Secondary Group.
- Trên Linux và Unix , tất cả thông tin về users và groups điều được lưu vào các tệp tin văn bản thường. Vì vậy thay vì bạn dùng lệnh để quản lý user, có thể mở các files này ra sửa trực tiếp. Tuy nhiên chỉ làm vậy khi thật cần thiết, và với mục đích học tập mà thôi. Trước khi sửa chữa các bạn nên backup lại. Theo tôi bạn chỉ nên "đọc" mà thôi!
2. Quản lý các user
Thông tin về các user được lưu trữ trong các files: /etc/passwd/etc/shadow.
/etc/passwd: File này chứa thông tin về user, điều khiển việc login của các user.
File này được lưu dưới dạng ASCII, mỗi dòng lưu thông tin của một user, và mỗi dòng lại phân thành các trường bằng dấu hai chấm. Như vậy thông tin đã được lưu dưới dạng một "bảng". Cấu trúc của nó như sau:
UserName : Password : UserID : PrincipleGroup : Comments : HomeDirectory : Shell
Ý nghĩa của cụ thể của các trường:
  • 1-usename: tên đăng nhập, phân biệt Hoa/thường, nên dùng chữ thường.
  • 2-password: lưu chuỗi passwd đã hash, nếu có sử dụng /etc/shadow thì ở đây sẽ là chữ x
  • 3-user ID: hệ thống dùng user ID để phân biệt người này với người khác.
  • 4-group ID: Đây là Primary Group của user này.
  • 5-comment: mô tả cho user.
  • 6-Home Directory: Thư mục home của từng user, thường sẽ nằm trong /home/tenuser
  • 7-Shell: Tên chương trình sẽ thực thi ngay sau khi user login vào. Nếu không có shell user sẽ không thể login. Mặc nhiên trên Linux sẽ dùng bash shell ở đây.
Bạn xem nội dung của /etc/passwd bằng lệnh:

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
...

/etc/shadow : Chứa chuỗi password đã mã hóa bằng hàm băm và thông tin về khác như Password Age của User.
  • 1-usename: phân biệt Hoa/thường, nên dùng chữ thường.
  • 2-password: lưu chuỗi passwd đã hash. Nếu nó chứa ! hay * thì người dùng không thể login vào tài khoản này
  • 3-ngày sửa cuối: tính từ 1/1/1970
  • ...
  • 9-trường này để dành
Xem nội dung của /etc/shadow gần giống như cách ở trên nhưng lile này chứa các thông tin nhạy cảm nên nó chỉ có thể đọc được nếu bạn có quyền root. Chuyển sang root bằng lệnh 'su' nếu hệ điều hành cho phép root login, nếu không có thể dùng sudo như sau:

$ sudo cat /etc/shadow
Bạn có thể đọc 'man 5 shadow' để có thông tin đầy đủ về nó.
Nhóm lệnh quản lý user
- Tạo user:
$ useradd [options]
các tùy chọn:
-u UID
-g GID
-G GID : Danh sách các Secondary group có thể cách nhau bằng dấu phẩy ","
-c ghi chú
-d directory
-m Nếu như thư mục của -d chưa có, thì tự động tạo mới.
-s shell : mặc nhiên sẽ dùng bash shell
-Sửa user:
usermod [options] [-l ]
options: hầu hết giống như của lệnh useradd
-Đổi password:
Mỗi user có khả năng tự đổi passwd của chính họ, với điều kiện họ nhớ passwd cũ và phải tuân theo nguyên tắc đặt passwd của Linux. root được phép đổi passwd của tất cả cả các user mà không cần biết passwd cũ, cũng như không cần tuân theo nguyên tắc đặt passwd!
$ passwd []
- Xóa user:
$ userdel [-r]
-r : xóa luôn home directory
Xem thêm các lệnh khác như: chfn (thay đổi tên người dùng và các thông tin), chsh (Change login shell) v.v..
Để biết cú pháp cũng như các tùy chọn, hãy sử dụng tùy chọn --help hay đọc trong man.
3. Quản lý nhóm (group).
Thông tin về nhóm cũng tương tự như user được lưu trong : /etc/groups/etc/gshadows.
/etc/groups : Chứa thông tin về các groups
Cấu trúc của nó như sau:
GroupName : Password : GroupID : User1,User2,..., Usern
Mô chi tiết các trường:
  • 1-groupname: tên nhóm
  • 2-passwd: lưu chuỗi passwd đã băm, trong trường hợp có dùng /etc/gshadow thì chỗ này được ghi là x
  • 3-Group ID: ID của nhóm
  • 4-users: Danh sách các user nhận group này là secondary, ngăn cách nhau bằng dấu phẩy
/etc/gshadows : Chứa thông tin password của groups.
  • 1-groupname: tên nhóm.
  • 2-passwd: chuỗi passwd đã mã hóa bằng các hàm băm.
  • 3-admins: danh sách các user có quyền admin trên group này.
  • 4-users: các user
Nhóm lệnh quản lý group
- Tạo group:
$ groupadd [-g groupid]
- Sửa group:
$ groupmod [-n New name] [-g new goupid]
- Đổi group password:
gpasswd []

- Xóa group:
$ groupdel
Linux cho phép quản lý users/groups theo cả kiểu cũ và mới. Nhưng bạn nên sử dụng theo mặc định khi cài, thường là kiểu mới.
  • Kiểu cũ: chuỗi password được lưu luôn trong /etc/passwd, và không có file /etc/shadow.
  • Kiểu mới: Để tránh việc chuỗi passwd bị dòm ngó dù đã được mã hóa, giờ đây chuỗi passwd được di dời vào trong /etc/shadow mà chỉ có root được xem. Đồng thời cho phép lưu thêm các thông tin về Password Age. Chuyện tương tự với group!
4. Thay đổi thông số mặc định
Khi sử dụng lệnh useradd hoặc groupadd, nếu chúng chúng ta không liệt kê đầy đủ các thông số cần thiết thì hệ thống sẽ lấy theo giá tri mặc nhiên đã được định nghĩa.
Chúng ta có thể thay đổi định nghĩa những giá trị này trong file sau:
  • /etc/login.defs : file chứa thông số mặc định khi tạo user hoặc tạo group.
  • /etc/skel/ : Tất cả những file là thư mục con trong này sẽ được copy sang HOME của user mới
  •  

    Thông tin người dùng trong hệ thống

    1/ Tập tin /etc/passwd

    Cơ sở dữ liệu / danh sách các tài khoản người dùng trong hệ thống dưới dạng tập tin văn bản thông thường
    clip_image002
    Xem đơn giản bằng lệnh
    Cat /etc/passwd
    Mỗi một dòng trong tập tin là thông tin tương ứng cho một user trong hệ thống. Một trường có tất cả 7 phần thông tin mỗi phần ngăn cách nhau bởi dấu “:”. Ý nghĩa của 7 phần đó như sau:
    clip_image004
  • 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.
  • Password: Nếu sử dụng shadow password thì nên sử dụng dấu x hoặc ký tự * (gõ man pwcnv, và man shadow để hiểu rõ hơn)
  • 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.
  • 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 (thông tin các Group có trong file /etc/group)
  • User ID Info (còn gọi là GECOS): Trường này không quan trọng lắm, bạn để trống cũng được vì chỉ dùng cho mục đích khai báo các thông tin cá nhân về user như: tên đầy đủ, số điện thoại… Lệnh finger sẽ cung cấp thêm những thông tin phụ này.
  • Home directory: Phải là đường dẫn đầy đủ tới thư mục sẽ làm thư mục chủ cho user, mặc định đây sẽ là thư mục hiện hành (working direcroty) khi user đăng nhập. Nếu bạn chỉ đến 1 thư mục không tồn tại thì hệ thống sẽ tự gán là thư mục gốc (/) làm thư mục chủ.
  • Shell: Đường dẫn đầy đủ tới login shell. Nếu để trống trường này thì login shell mặc định là file /bin/sh, nếu chỉ tới 1 file không tồn tại thì user không thể đăng nhập vào hệ thống từ giao diện console hoặc qua SSH bằng lệnh login. Nhưng user vẫn có thể đăng nhập thông qua giao diện đồ họa bằng cách sử dụng non-login shell.
Bất kể người dùng nào cũng có thể truy cập tập tin /etc/passwd và login với tư cách người dùng khác nếu biết password của người dùng đó.

2/ Tập tin /etc/shadow

clip_image006
Tập tin này lưu trữ toàn bộ mật khẩu của người dùng trong hệ thống và tất nhiên là đã được mã hóa.
Cũng tương tư như file /etc/passwd thì ở đây mỗi dòng tương ứng thông tin cho mỗi user với mỗi dòng gồm 8 thành phần ngăn cách bới dấu “:” có thể xem bên dưới:
clip_image007
  1. User name: tên đăng nhập của người dùng
  2. Password: mật khẩu người dùng đã được mã hóa một chiều
  3. Last password change: thời gian lần cuối thay đổi mật khẩu
  4. Minimum: số ngày tổi thiểu yêu cầu giữa các lần thay đổi mật khẩu
  5. Maximum: số ngày tối đa xác định tính hợp lệ của mật khẩu sau khi thay đổi mật khẩu
  6. Warn: quy định số ngày trước khi mật khẩu hết hạn sẽ cảnh báo người dùng
  7. Inactive: số ngày đã bị khóa tài khoản
  8. Expire: quy định ngày cụ thể hết hạn
  9. Flag: chưa được định nghĩa

3/ Tập tin /etc/group

Thông tin về group được lưu trong file /etc/group, file này có cách bố trí tương tự như file /etc/passwd.
clip_image009
Mỗi dòng trong file có 4 trường được phân cách bởi dấu ‘:’, ý nghĩa của các trường theo thứ tự như sau:
clip_image010
  1. Group name: Tên nhóm người dùng
  2. Password : Mật khẩu nhóm người dùng (password – được mã hóa). Trong trường hợp dùng file /etc/gshadow thì ký hiệu là x. Thông thường nhóm khi tạp ra không có password
  3. Group ID: Chỉ số định danh cho nhóm
  4. User list: Danh sách các người dùng thuộc nhóm đó

4/ Tập tin /etc/gshadow

Chứa thông tin mật khẩu của groups
clip_image012
clip_image013
  1. Group name: tên group
  2. Password: mật khẩu nhóm
  3. Groupadmins: danh sách user có quyền admin trên group
  4. Members: danh sách người dùng
Linux cho phép quản lý users/groups theo cả 2 kiểu củ và mới:
Kiểu củ: chuổi password được lưu luôn trong /etc/passwd, và không có file /etc/shadow
Kiểu mới: Để tránh việc chuổi passwd bị dòm ngó (dù đã được mã), giờ đây chuổi passwd được di dời vào trong /etc/shadow mà chỉ có root được xem. Đồng thời cho phép lưu thêm các thông tin về Password Age.
Chuyện tương tự với group!
Để chuyển đổi giữa 2 kiểu sử dụng này có thể dùng các lệnh sau:
/usr/sbin/pwconv : Chuyển từ việc không có sang có xài /etc/shadow
/usr/sbin/pwunconv : Chuyển về xài kiểu củ, không có /etc/shadow
/usr/sbin/grpconv : Chuyển từ việc không có sang có xài /etc/gshadow
/usr/sbin/grpunconv : Chuyển về xài kiểu củ, không có /etc/gshadow

Quản lý người dùng

1/ Thêm người dùng mới

Cú pháp lệnh:
useradd [tùy-chọn] <tên-người-dùng>
useradd –D [tùy-chọn]
Để xem cú pháp của lệnh ta có thể dùng lệnh: man useradd
Nếu không có tỳ chọn –D, lệnh useradd sẽ tạo một tài khoản người dùng mới sử dụng các giá trị được chỉ ra tren dòng lệnh và các giá trị mặc định của hệ thống. Tài khoản người dùng mới sẽ được nhập vào trong các file hệ thống, thư mục cá nhân sẽ được tạo, hay các file khởi tạo được sao chép, điều này còn tùy thuộc vào tùy chọn đưa ra.
Các tùy chọn như sau:
clip_image015
Khi tùy chọn –D được sử dụng, lệnh useradd sẽ bỏ qua các giá tri ngầm định và
cập nhật các giá trị mới.
clip_image017

2/ Thiết lập mật khẩu

Cú pháp lệnh:
passwd [tùy-chọn] <tên-người-dùng>
với các tùy chọn như sau:
clip_image019

3/ Xóa người dùng

Cú pháp lệnh:
userdel [-r] <tên-người-dùng>
-r: các file tồn tại trong thư mục riêng của người dùng, cũng như các file nằm trong các thư mục khác có liên quan đến người dùng sẽ bị xóa bỏ cùng lúc với thư mục của người dùng.

4/ Sửa thông in người dùng

Cú pháp lệnh
usermod [tùy chọn] [-l <ten>] <ten>
Hầu hết các tùy chọn giống phần tạo người dùng

Quản lý nhóm

1/ Thêm nhóm mới

Cú pháp lệnh:
groupadd [tùy-chọn] <tên-nhóm>
các tùy chọn là:
clip_image021

2/ Sửa đổi thuộc tính nhóm

Cú pháp lệnh:
groupmod [tùy-chọn] <tên-nhóm>
các tùy chọn là:
clip_image023

3/ Đặt mật khẩu nhóm

Cú pháp lệnh:
gpasswd [<ten>]

4/ Xóa nhóm

Cú pháp lệnh:
groupdel <tên-nhóm>

Thay đổi các thông số mặc định

Khi sử dụng lệnh useradd hoặc groupadd để thêm mối một user hay một group, nếu chúng chúng ta không liệt kê đầy đủ các thông số tức các tùy chọn kèm theo cần thiết thì hệ thống sẽ lấy theo giá tri mặc định đã được định nghĩa.
Chúng ta có thể thay đổi định nghĩa những giá trị này trong file sau:
/etc/login.defs : file chứa thông số mặc định khi tạo user hoặc tạo group.
clip_image025
/etc/skel/ : Tất cả những file và thư mục thuộc thư mục này sẽ được copy sang HOME của user ngay khi mới vừa được tạo mặc định là rỗngclip_image027.