Warning: wp_hide_post_Public::query_posts_join(): Argument #2 ($wp_query) must be passed by reference, value given in /home/nginx/domains/thachpham.com/public/wp-includes/class-wp-hook.php on line 324

Warning: wp_hide_post_Public::query_posts_join(): Argument #2 ($wp_query) must be passed by reference, value given in /home/nginx/domains/thachpham.com/public/wp-includes/class-wp-hook.php on line 324

Warning: wp_hide_post_Public::query_posts_join(): Argument #2 ($wp_query) must be passed by reference, value given in /home/nginx/domains/thachpham.com/public/wp-includes/class-wp-hook.php on line 324

Warning: wp_hide_post_Public::query_posts_join(): Argument #2 ($wp_query) must be passed by reference, value given in /home/nginx/domains/thachpham.com/public/wp-includes/class-wp-hook.php on line 324

Warning: wp_hide_post_Public::query_posts_join(): Argument #2 ($wp_query) must be passed by reference, value given in /home/nginx/domains/thachpham.com/public/wp-includes/class-wp-hook.php on line 324
Quản lý user và sudo - VPS cho WordPress căn bản
Trang chủ Linux Webserver VPS căn bản [Phần 4] – Quản lý user và sudo

VPS căn bản [Phần 4] – Quản lý user và sudo

bởi Thạch Phạm
1 bình luận 7,K views

Tham gia nhóm hỗ trợ WordPress

Tham gia nhóm Hỗ trợ Server - Hosting & WordPress để cùng nhau hỏi đáp và hỗ trợ các vấn đề về WordPress, tối ưu máy chủ/server.

Tham gia ngay

Như bạn đã thấy ở những phần trước chúng ta đều đăng nhập vào VPS thông qua user tên là root. Nhưng suy cho cùng, việc sử dụng trực tiếp với user là root sẽ ẩn chứa nhiều rủi ro như bạn có thể bị lộ mật khẩu root nếu máy có bị nhiễm spyware và soi mật khẩu khi bạn đang gõ, hoặc nếu bạn muốn người khác vào quản trị VPS mà đưa hẳn cái user root thì thật là nguy hiểm.

Vậy giải pháp ở đây là gì? Có một giải pháp mà bạn cần biết ngay lúc này đó là sử dụng tính năng sudo trong Linux.

https://www.youtube.com/watch?v=GDlW3A4xErI

I. Sudo là gì?

Sudo là chữ viết tắt của Superuser Do, dịch nôm na là “Siêu thành viên làm [điều gì đó]“. Nghĩa là nó sẽ cho phép một thành viên có thể thực hiện một lệnh nào đó trong hệ thống dưới quyền của một thành viên khác (Superuser ở đây nghĩa là tài khoản root) mà họ không cần cấp quyền đặc biệt.

Khuyến mãi Black Friday

Ví dụ, một user bình thường sẽ không thể nào sử dụng các lệnh để dừng một tác vụ nào đó trên hệ thống. Nhưng nếu họ gõ một lệnh dừng tác vụ nào đó mà có kèm chữ sudo đằng trước thì yêu cầu này sẽ được gửi đến hệ thống, hệ thống sẽ kiểm tra xem user đang gửi yêu cầu có trong danh sách sudoers hay không, nếu có thì sẽ cho phép thành viên kia thực thi, không thì báo lỗi và lưu log lại (reported).

Đối với user gõ lệnh sudo, thì họ sẽ được hỏi mật khẩu của chính họ để xác nhận gửi yêu cầu thay vì sử dụng lệnh su là chuyển sang tài khoản root và nhập mật khẩu của root vì không an toàn lắm.

Cách sử dụng sudo như thế nào thì bạn hãy đọc bài này từ từ sẽ hiểu.

II. Cách tạo và quản lý user

Bây giờ hãy tiến hành đăng nhập vào VPS qua SSH với user root nhé và chúng ta sẽ đi làm từng bước theo thứ tự.

2.1) Cách tạo một user mới

Để tạo một user mới, chúng ta sẽ tiến hành sử dụng lệnh useradd với cấu trúc là:

[bash]useradd tên-user-cần-tạo[/bash]

Ví dụ mình muốn tạo một user tên thach thì mình sẽ gõ là useradd thach.

Mặc định khi tạo xong, user này sẽ không có mật khẩu nên bạn cần phải thiết lập mật khẩu cho nó. Để thiết lập mật khẩu cho user trong Linux bạn sẽ sử dụng lệnh passwd với cấu trúc là:

[bash]passwd tên-user-cần-thiết-lập[/bash]

Ví dụ mình muốn thiết lập mật khẩu cho user thach thì sẽ gõ là passwd thach.

Khi gõ xong bạn sẽ cần gõ mật khẩu 2 lần.

linux-createuser

Để kiểm tra xem user của bạn đã thật sự được thêm vào chưa, bạn có thể kiểm tra bằng cách đọc file /etc/passwd bằng lệnh cat /etc/passwd, nó sẽ hiển thị toàn bộ user có trên VPS kèm theo quyền và tên nhóm của nó.

linux-userlist

Vậy là xong rồi nhé, bây giờ trên VPS của bạn đã có một user tên là thach và bạn có thể đăng nhập vào SSH với user này thay cho root. Nhưng hiện tại user này không có quyền gì đặc biệt cả nên bạn sẽ không sử dụng các lệnh thay đổi hệ thống được, mình sẽ hướng dẫn bạn dùng sudo ở dưới.

2.2) Thư mục của từng user

Mặc định trên Linux, user tên root sẽ sở hữu một thư mục với đường dẫn là /root.

Tuy nhiên nếu bạn thêm user vào, thì các user này sẽ có một thư mục riêng tại /home. Ví dụ mình đã vừa tạo ra một user tên thach thì mình sẽ có một thư mục tên là thach trong /home.

linux-userfolder

Và ở thư mục cá nhân này, user được thêm sẽ có quyền cơ bản trong thư mục như truy cập, xóa, tạo, thay đổi nội dung trong thư mục nhưng sẽ không có quyền trên thư mục khác nếu như không được cấp quyền.

Nếu bạn không muốn sử dụng /home làm thư mục chứa user thì có thể đổi nó bằng cách sửa file /etc/default/useradd. Nếu bạn chưa hiểu lắm thì đừng nên sửa gì ở file này mà chỉ cần hiểu nội dung của nó.

linux-useraddfile

Note: Cách sửa file như thế nào thì quay lại bài trước để xem cách sử dụng phần mềm vi.

Trong đó:

  • GROUP: là ID của group mặc định mà user sẽ được đưa vào khi tạo ra.
  • HOME: Đường dẫn mặc định chứa các thư mục của từng thành viên khi tạo ra.
  • INACTIVE: Thời gian mà tài khoản sẽ bị khóa vĩnh viễn sau khi mật khẩu của thành viên đó hết hạn.
  • EXPIRE: Ngày mà tài khoản của thành viên được tạo ra mặc định sẽ bị khóa. Cấu trúc ngày tháng ở đây là YYYY-MM-DD (2014-09-23).
  • SKEL: Thư mục mẫu của user mà khi tạo ra, user sẽ tự động copy các file và thư mục trong đây vào thư mục /home/tên-user.
  • SHELL: Là một hệ vỏ mặc định mà user sẽ được sử dụng. Bạn cứ hiểu là khi vào SSH, bạn gõ các dòng lệnh Linux vào và thực thi, đó chính là bạn đang dùng Shell. Nếu bạn không muốn user được tạo ra có quyền sử dụng Shell thì để trống phần này.
  • CREATE_EMAIl_SPOOL: Nôm na là cho thành viên được phép sử dụng mail trên server nếu tùy chọn là yes. Mail sẽ được lưu trong file /var/mail/tên-user hoặc /var/spool/mail/tên-user.

Note: Các tùy chọn trong /etc/useradd sẽ áp dụng mặc định cho lệnh useradd nếu bạn không thiết lập từng tính năng riêng cho nó. Còn nếu bạn muốn user được thêm vào có những tùy chọn riêng biệt thì đọc thêm ở cuối bài.

2.3) Thêm quyền cho user và sử dụng sudo

Bây giờ bạn hãy thoát user root ra và đăng nhập lại vào SSH với user và password mà bạn đã tạo ở phần trên, như mình thì user đã tạo tên là thach.

linux-loginasthachuser

Bây giờ chúng ta thử dùng một lệnh liên quan đến hệ thống như gõ lệnh tạo user xem nào.

[bash]useradd thach2[/bash]

Và bạn sẽ thấy nó trả kết quả về là “-bash: /usr/sbin/useradd: Permission denied“, nghĩa là user hiện tại không có quyền thực hiện lệnh này mà chỉ có root mới được thực hiện mà thôi.

Như mình đã nói ở đầu bài, nếu bạn viết lệnh mà kèm chữ sudo đằng trước thì thành viên đó sẽ có thể làm một việc gì đó dựa trên quyền của Super User (root) mà không cần sử dụng tài khoản root để thực thi. Vậy thì bây giờ chúng ta thử gõ lại và thêm chữ sudo đằng trước nhé.

[bash]sudo useradd thach2[/bash]

Ok, bây giờ nó sẽ hiển thị ra dòng có nội dung là:

[bash]

$ sudo useradd thach2

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

[sudo] password for thach:

[/bash]

Dòng này nghĩa là nó cảnh báo bạn đang sử dụng quyền của user root trên hệ thống và yêu cầu bạn tôn trọng quyền này. Để xác nhận sử dụng sudo, bạn hãy gõ mật khẩu của user hiện tại mà bạn đang đăng nhập vào.

Điều gì xảy ra sau khi gõ xong? Nó không thực hiện lệnh mà sẽ hiển thị ra đoạn này:

[bash]thach is not in the sudoers file.  This incident will be reported.[/bash]

What the fuck there are? Đoạn này nghĩa là user mà bạn đang đăng nhập không có trong danh sách các thành viên được sử dụng lệnh sudo (sudoers), và hành động này sẽ bị báo cáo. Báo cáo ở đây không phải là báo cáo cho cảnh sát, mà sẽ lưu lại trong log của admin để họ xem những ai đã làm gì.

Bị từ chối sử dụng lệnh sudo

Bị từ chối sử dụng lệnh sudo

Vậy làm sao để user này có thể sử dụng được sudo đây? Đơn giản thôi, bây giờ bạn hãy thoát ra và đăng nhập lại với user root nhé.

Sau đó bạn gõ lệnh visudo. Lệnh này nghĩa là sẽ mở file /etc/sudoers bằng phần mềm vi nhưng sẽ gõ gọn hơn thay vì gõ vi /etc/sudoers.

Trong đây, bạn khoan hãy chuyển qua chế độ Insert mode mà sẽ gõ :/Allows people in group để tìm kiếm chỗ cần sửa.

linux-sudoers-search

Bây giờ bạn hãy viết đoạn này vào bên dưới # %wheel        ALL=(ALL)       ALL:

[bash] %quantri      ALL=(ALL)       ALL[/bash]

Dòng này có nghĩa là cho phép các thành viên trong group quantri được phép sử dụng tất cả các dòng lệnh.

linux-add-sudoer-group

Bây giờ ấn phím ESC để thoát khỏi Insert Mode và gõ :wq! để save và thoát ra, cái này về sau mình không nhắc lại nữa nhé vì ở bài trước mình có nói kỹ rồi. :D

Có một vấn đề là mặc dù chúng ta đã thêm group quantri vào danh sách sudoers nhưng mà chúng ta chưa có group nào tên là quantri cả. Do đó, hãy tiến hành tạo một group mang tên quantri với lệnh groupadd quantri.

Để xem toàn bộ danh sách group có trên VPS thì bạn sử dụng lệnh cut -d: -f1 /etc/group và kiểm tra xem đã có group tên quantri chưa. Nếu có rồi thì thành công.

Tạo group xong, chúng ta cần làm một việc đó là đưa user chưa được cấp quyền vào group quantri (ở đây user của mình là thach), sử dụng lệnh sau để đưa một user vào group:

[bash]usermod -G tên-group-cần-thêm tên-user[/bash]

Ví dụ mình muốn thêm user thach vào group quantri thì gõ:

[bash]usermod -G quantri thach[/bash]

Sau khi gõ xong, để xem user của bạn đang ở group nào thì gõ groups tên-user (ví dụ: groups thach).

[root@vpscanban ~]# groups thach
thach : thach
[root@vpscanban ~]# usermod -G quantri thach
[root@vpscanban ~]# groups thach
thach : thach quantri
[root@vpscanban ~]#

Ok, bây giờ bạn hãy thử thoát ra và đăng nhập lại bằng user mới tạo của bạn rồi hãy thử gõ sudo adduser thach2 và nhập mật khẩu của user đang đăng nhập vào xem nó còn báo lỗi như ở trên không nhé, nếu không báo lỗi gì thì thành công.

linux-add-sudoaction

Ok, từ bây giờ bạn có thể không cần đăng nhập vào tài khoản root nữa mà chỉ cần đăng nhập bằng tài khoản phụ của bạn rồi sử dụng sudo để gõ lệnh mà thôi. Hoặc bạn có thể tạo một user cho quản trị khác vào để làm việc mà không cần đưa tài khoản root.

Ngoài ra còn có một cách khác để sử dụng quyền root mà không dùng sudo đó chính là su. Khi gõ lệnh su, bạn sẽ chuyển đổi sang tài khoản root và cần nhập mật khẩu của root.

linux-su-command

Chuyển đổi từ user thường sang user root với lệnh su.

2.4) Nói thêm về lệnh useradd

Như ở trên bạn đã biết chúng ta sẽ sử dụng lệnh useradd tên-user-cần-thêm để thêm một user mới lên VPS với các thông số thiết lập trong file /etc/default/useradd.

Tuy nhiên, một vài trường hợp bạn muốn sửa lại thiết lập của user khi add vào thì bạn sẽ khá mất công để sửa lại file này, sau đó lại đưa về mặc định. Ở phần này, mình sẽ hướng dẫn bạn cách thêm một user với các thiết lập tùy chọn với cấu trúc lệnh là:

[bash]useradd [tùy chọn] tên-user-cần-add[/bash]

Thêm user với thư mục tùy chọn

Mặc định user thêm vào sẽ đưa vào /home, nhưng với lệnh dưới đây bạn có thể tùy chỉnh lại thư mục của user khi được thêm vào.

[bash]useradd -d /path tên-user[/bash]

Chẳng hạn mình muốn thêm user tên quankun nằm ở thư mục /trash (nếu chưa có thì hệ thống tự tạo) thì sẽ viết là:

[bash]useradd -d /trash quankun[/bash]

Lúc này, thư mục của user quankun sẽ là /trash chứ không phải /trash/quankun nhé. Để xem chính xác đường dẫn user này là gì, bạn sử dụng lệnh dưới đây:

[root@vpscanban ~]# cat /etc/passwd | grep quankun
quankun:x:502:503::/trash:/bin/bash

Thêm user với group tùy chọn

Mặc định khi bạn thêm một user mới vào thì user này sẽ sở nằm trong một group với tên trùng với tên user. Tuy nhiên bạn vẫn có thể ép nó là thành viên của một group nào đó mà bạn muốn khi thêm vào thay vì tự tạo ra group mới.

[bash]useradd -G tên-group tên-user[/bash]

Ví dụ mình tạo thêm một user tên thach3 và nằm ở group quantri thì sẽ làm như sau:

[bash]useradd -G quantri thach3[/bash]

Kết quả:

[root@vpscanban trash]# useradd -G quantri thach3
[root@vpscanban trash]# groups thach3
thach3 : thach3 quantri

Bạn cũng có thể thêm user đó vào nhiều group bằng cách viết nhiều tên group và ngăn cách bởi dấu phẩy.

[bash]useradd -G quantri,admin,sysadmin thach3[/bash]

Thêm một user không tạo ra thư mục riêng

Mặc định nó sẽ tạo ra một thư mục riêng cho user khi thêm vào, nhưng bạn có thể ép nó không tạo ra thư mục riêng bằng cách thêm tham số -M vào lệnh tạo user.

[bash]useradd -M demo[/bash]

Tạo user và tự khóa vào ngày nhất định

Nếu bạn muốn tạo một user tạm thời với thời hạn nhất định thì có thể sử dụng cấu trúc lệnh sau:

[bash]useradd -e YYY-MM-DD tên-user[/bash]

Ví dụ mình muốn tạo 1 user tên là hongvan và sẽ tự xóa kể từ ngày 30 tháng 9 năm 2014 thì mình sẽ viết là:

[bash]useradd -e 2014-09-30 hongvan[/bash]

Để xem thời hạn của một user bạn sử dụng lệnh chage như sau:

[bash]chage -l tên-user[/bash]

linux-user-chage

Đấy, tạm thời bạn cần biết vậy là đủ rồi. :D

Lời kết

Ở bài này mình đã giải thích khá kỹ về cách quản lý với các user trên VPS và sudo là gì cũng như cách sử dụng sudo sao cho hợp lý và hiệu quả, để sau này nếu bạn có thấy ai gõ gì mà có chữ sudo ở trước thì cũng đừng có thắc mắc nha. :D

Đánh giá nội dung này
1 bình luận

Warning: wp_hide_post_Public::query_posts_join(): Argument #2 ($wp_query) must be passed by reference, value given in /home/nginx/domains/thachpham.com/public/wp-includes/class-wp-hook.php on line 324

Có thể bạn quan tâm

Hiện tại blog tạm đóng bình luận vì mình cần tập trung thời gian vào cập nhật bài viết. Bình luận sẽ mở ra cho đến khi mình sẵn sàng.