Bạn đã bao giờ rơi vào tình huống đang quản lý một hệ thống VPS quan trọng, nhưng lại bị chặn đứng ngay lập tức bởi thông báo "Permission denied" khi cố gắng chỉnh sửa một file cấu hình hệ thống chưa nhỉ? Lúc này, nếu không biết cách xử lý nhanh chóng, mọi công việc quản trị của bạn có thể sẽ bị đình trệ vô cùng rắc rối, đúng không? Đừng quá lo lắng nhé, vì su chính là "chìa khóa vạn năng" mà bất kỳ quản trị viên nào cũng cần nắm vững. Vậy su là gì và làm thế nào để làm chủ nó? Trong bài viết này, mình sẽ hướng dẫn bạn từ khái niệm su Linux cơ bản đến cách dùng su để chuyển đổi sang quyền root một cách an toàn nhất. Việc hiểu rõ cách chuyển đổi người dùng sẽ giúp bạn thực hiện các tác vụ như cách thay đổi quyền truy cập hệ thống một cách mượt mà và chuyên nghiệp hơn rất nhiều.
Cần chuẩn bị gì trước khi dùng lệnh su?
- Quyền user: Bạn cần đăng nhập vào một tài khoản người dùng bình thường để thực hiện chuyển đổi sang tài khoản root hoặc một tài khoản khác có mật khẩu.
- Hệ điều hành hỗ trợ: Lệnh này có sẵn trên hầu hết các bản phân phối Linux (Ubuntu, Debian, CentOS, Fedora, Arch Linux) và các hệ điều hành dựa trên Unix.
- Package dependencies: Lệnh su thuộc gói shadow-utils (hoặc login) đã được cài đặt mặc định trên hầu hết các hệ thống Linux.
- Yêu cầu cấu hình: Tài khoản root phải được thiết lập mật khẩu. Trong một số trường hợp trên Ubuntu, tài khoản root bị khóa mặc định, bạn cần thiết lập mật khẩu cho root trước khi có thể sử dụng lệnh này.
Cú pháp lệnh su là gì?
Lệnh su hỗ trợ các dạng cú pháp cơ bản sau trên hệ thống Linux/Unix:
su [OPTIONS] [-] [USER]
su [OPTIONS] [-] [[USER] ARG...]
Các tùy chọn của lệnh su là gì?
Lệnh su cung cấp các tùy chọn thuộc hai nhóm chính: nhóm kiểm soát môi trường đăng nhập và nhóm điều khiển xác thực, phiên làm việc.
| Tùy chọn ngắn | Tùy chọn dài | Mô tả |
|---|---|---|
| - | -l, --login | su - khởi động shell đích như một login shell đầy đủ, tải toàn bộ môi trường của người dùng đích bao gồm HOME, SHELL, PATH và USER. |
| -c | --command=COMMAND | su -c truyền một lệnh cụ thể tới shell của người dùng đích để thực thi, sau đó thoát ngay lập tức thay vì mở phiên tương tác. |
| -s | --shell=SHELL | su -s chỉ định shell sẽ được khởi chạy thay vì dùng shell mặc định được khai báo trong /etc/passwd của người dùng đích. |
| -m | --preserve-environment | su -m giữ nguyên toàn bộ biến môi trường của người dùng hiện tại, không thay thế bằng môi trường của người dùng đích. |
| -p | --preserve-environment | su -p có chức năng tương đương với -m, giữ nguyên các biến môi trường hiện tại khi chuyển đổi người dùng. |
| -g | --group=GROUP | su -g chỉ định nhóm chính sẽ được áp dụng cho phiên làm việc mới, chỉ root mới có quyền sử dụng tùy chọn này. |
| -G | --supp-group=GROUP | su -G chỉ định nhóm bổ sung cho phiên làm việc mới, chỉ root mới có quyền sử dụng tùy chọn này. |
| -f | --fast | su -f truyền tùy chọn -f tới shell đích, thường dùng với csh hoặc tcsh để bỏ qua bước đọc file khởi tạo. |
| -w | --whitelist-environment=LIST | su -w cho phép chỉ định danh sách các biến môi trường cụ thể được giữ lại khi chuyển sang môi trường của người dùng đích. |
| -P | --pty | su -P tạo một pseudo-terminal độc lập cho phiên làm việc mới, giúp cô lập phiên và tránh một số rủi ro bảo mật liên quan đến terminal. |
| -T | --no-pty | su -T không tạo pseudo-terminal cho phiên làm việc, đây là hành vi mặc định khi không có tùy chọn -P. |
| --session-command=COMMAND | su --session-command truyền lệnh tới shell để thực thi mà không tạo phiên mới, khác với -c ở chỗ không gọi setsid(). | |
| -h | --help | su --help hiển thị thông tin trợ giúp tóm tắt về cú pháp và các tùy chọn có sẵn của lệnh. |
| -V | --version | su --version hiển thị phiên bản hiện tại của lệnh su đang được cài đặt trên hệ thống. |
xem thêm: User and Permission Management
Lệnh su được sử dụng như thế nào trong thực tế?
Các ví dụ dưới đây trình bày các kịch bản chuyển đổi quyền người dùng phổ biến trong quản trị hệ thống Linux.
su là gì? [Chuyển sang người dùng root]
$ su Password: uid=0(root) gid=0(root) groups=0(root) $
Lệnh cho phép bạn chuyển sang tài khoản root bằng cách nhập mật khẩu của root. Trong thực tế, phương thức này thường được sử dụng trên các hệ thống cũ hoặc máy chủ có thiết lập mật khẩu root riêng biệt.
su - là gì? [Chuyển sang root với môi trường đầy đủ]
$ su - Password: login: root [root@localhost ~]# pwd /root [root@localhost ~]#
Tham số "-" giúp nạp toàn bộ biến môi trường và thư mục home của người dùng root. Trên môi trường production, đây là cách an toàn và chính xác nhất để thực hiện các tác vụ quản trị nhằm tránh xung đột đường dẫn (PATH) của người dùng hiện tại.
su - username là gì? [Chuyển sang một người dùng cụ thể]
$ su - deploy Password: [deploy@web-server ~]$ pwd /home/deploy
Lệnh cho phép bạn đăng nhập trực tiếp vào tài khoản của một người dùng khác mà không cần chuyển sang root trước. Trong các quy trình CI/CD hoặc triển khai ứng dụng, kỹ thuật này giúp kiểm tra quyền hạn và môi trường làm việc của user chạy dịch vụ.
su -c là gì? [Chạy một lệnh duy nhất với quyền cao nhất]
$ su -c "apt update && apt upgrade -y" Password: Reading package lists... Done Building dependency tree... Done
Tham số "-c" cho phép thực thi một câu lệnh cụ thể dưới quyền người dùng mục tiêu rồi kết thúc phiên làm việc ngay lập tức. Trong các kịch bản automation hoặc viết shell script, cách tiếp cận này giúp giảm thiểu rủi ro khi không cần duy trì một phiên shell root kéo dài.
Tại sao lệnh su không hoạt động hoặc báo lỗi khi sử dụng?
Trong quá trình quản trị hệ thống, người dùng thường gặp phải các trở ngại khi thực hiện chuyển đổi quyền hạn thông qua lệnh su.
Lỗi sai mật khẩu root mặc dù đã nhập đúng
user@linux:~$ su - Password: "!su: Authentication failure"
Lỗi này xảy ra khi tài khoản root chưa được thiết lập mật khẩu hoặc mật khẩu nhập vào không khớp với cấu hình hệ thống.
Lỗi không thể truy cập vào tài khoản root trên Ubuntu/Debian
user@linux:~$ su - "!su: Authentication failure"
Trên các bản phân phối như Ubuntu, tài khoản root thường bị khóa mặc định (locked), dẫn đến việc không thể đăng nhập trực tiếp bằng lệnh su.
Lỗi thiếu quyền thực thi hoặc sai môi trường biến
user@linux:~$ su user@linux:~$ whoami user
Trường hợp này xảy ra khi người dùng chỉ sử dụng lệnh su mà không kèm theo dấu gạch ngang, khiến các biến môi trường của root không được tải đầy đủ.
Lỗi liên quan đến chính sách bảo mật PAM
user@linux:~$ su - Password: "!su: Authentication failure"
Lỗi này phát sinh khi các quy tắc trong tệp cấu hình PAM (Pluggable Authentication Modules) ngăn chặn việc chuyển đổi người dùng từ một phiên làm việc cụ thể.
Quy trình thực tế dùng lệnh su trong quản trị hệ thống Linux?
Trong kịch bản bảo trì máy chủ hoặc cài đặt các gói phần mềm hệ thống, lệnh su thường được sử dụng như một phần của quy trình chuyển đổi quyền hạn để thực hiện các tác vụ đặc quyền.
Bước 1: Kiểm tra danh tính người dùng hiện tại
whoami sysadmin
Lệnh này cho phép bạn xác nhận tài khoản đang đăng nhập để đảm bảo không thực hiện nhầm thao tác trên các môi trường khác nhau.
Bước 2: Chuyển sang tài khoản quản trị root
su - Password: ******** root
Lệnh su kết hợp với tham số - cho phép bạn đăng nhập vào môi trường của người dùng root, giúp nạp đầy đủ các biến môi trường và đường dẫn hệ thống.
Bước 3: Thực hiện các thay đổi cấu hình hệ thống
apt update && apt upgrade -y Reading package lists... Done Building dependency tree... Done
Sau khi đã có quyền root thông qua lệnh su, bạn có thể thực hiện các lệnh thay đổi cấu hình hoặc cập nhật phần mềm mà không bị hệ thống từ chối quyền truy cập.
Bước 4: Thoát khỏi phiên làm việc đặc quyền
exit sysadmin
Lệnh exit cho phép bạn kết thúc phiên làm việc của root và quay trở lại tài khoản người dùng thông thường để đảm bảo an toàn cho hệ thống.
Do bạn chưa cung cấp tên lệnh cụ thể trong phần {COMMAND_NAME}, tôi sẽ viết mẫu dựa trên lệnh **chmod** (một lệnh cực kỳ phổ biến mà Sysadmin hay gặp lỗi trên VPS) để bạn hình dung đúng format và giọng văn yêu cầu. **Ví dụ với lệnh: chmod**Việc áp dụng sai quyền hạn khi quản trị VPS dẫn đến các lỗi thực thi nghiêm trọng. Đối với các file script chạy qua cron job, quyền thực thi (execute) thường bị thiếu do sử dụng lệnh chmod 644 thay vì chmod 755. Khi cấu hình permission trên VPS, việc gán quyền 777 cho thư mục web có thể gây rủi ro bảo mật cao. Trong các trường hợp migration dữ liệu, chủ sở hữu file (owner) không đồng nhất khiến lệnh chmod không có tác dụng nếu không sử dụng sudo. Ví dụ, lệnh sudo chmod +x script.sh cho phép cấp quyền chạy trực tiếp cho file. Việc kiểm tra kỹ trạng thái quyền bằng lệnh ls -l trước khi triển khai giúp hạn chế lỗi hệ thống.
Tư khóa cần viết: [su]Những câu hỏi thường gặp về lệnh su?
Dưới đây là các vấn đề phổ biến mà người dùng thường gặp phải khi sử dụng lệnh su để chuyển đổi người dùng trong hệ thống Linux.
Làm thế nào để chuyển sang tài khoản root mà không cần nhập tên người dùng?
Khi bạn chỉ nhập lệnh su mà không kèm theo tham số, hệ thống mặc định sẽ yêu cầu mật khẩu của tài khoản root để chuyển quyền điều khiển.
su Password: uid=0(root) gid=0(root) groups=0(root)
Sự khác biệt giữa lệnh su và su - giúp duy trì môi trường người dùng?
Lệnh su bình thường chỉ thay đổi người dùng nhưng giữ nguyên các biến môi trường của người dùng hiện tại. Sử dụng tham số - (hoặc -l) cho phép bạn đăng nhập với môi trường hoàn toàn mới của tài khoản đích.
su - Password: user@linux:~$ su - Password: root@linux:~#
Làm cách nào để chuyển sang một người dùng cụ thể không phải root?
Bạn có thể chuyển sang một tài khoản người dùng khác bằng cách cung cấp tên người dùng ngay sau lệnh su.
su username Password: user@linux:~$
Tại sao lệnh su báo lỗi "Authentication failure" dù đã nhập đúng mật khẩu?
Lỗi này thường xảy ra nếu tài khoản root bị khóa hoặc chưa được thiết lập mật khẩu trên các bản phân phối như Ubuntu. Trong trường hợp này, bạn nên sử dụng lệnh sudo thay thế.
su Password: su: Authentication failure
Làm thế nào để thực thi một lệnh duy nhất dưới quyền root mà không cần đăng nhập hẳn?
Bạn có thể sử dụng tham số -c để truyền một câu lệnh cụ thể vào shell của người dùng mục tiêu.
su -c "ls /root" Password: /root: Permission denied
Làm sao để thoát khỏi phiên làm việc của người dùng mới và quay lại người dùng cũ?
Sử dụng lệnh exit hoặc nhấn tổ hợp phím Ctrl+D để kết thúc phiên làm việc của tài khoản vừa chuyển sang.
root@linux:~# exit user@linux:~$
Lệnh su là một công cụ quyền lực giúp bạn chuyển đổi sang danh tính của người dùng khác hoặc quyền root trực tiếp trên hệ thống Linux. Bạn có thể sử dụng tham số -c để thực thi nhanh một lệnh duy nhất hoặc dùng tham số -l để thiết lập toàn bộ môi trường làm việc của người dùng mục tiêu, cực kỳ tiện lợi khi cần quản trị hệ thống, đúng không nhỉ? Việc nắm vững lệnh này sẽ giúp bạn có thể kiểm soát máy chủ một cách linh hoạt và an toàn hơn rất nhiều. Chúc bạn thành công!