Một câu hỏi kinh điển của người mới dùng Linux: "Tại sao phải rắc rối tạo user làm gì trong khi tài khoản Root có thể làm mọi thứ?"
Câu trả lời ngắn gọn: Tuyệt đối không nên dùng Root cho các tác vụ hàng ngày.
Bài viết này sẽ giải thích lý do và hướng dẫn bạn cách quản lý User/Software chuẩn như một DevOps chuyên nghiệp.
1. Tại sao Root lại "nguy hiểm"?
Tài khoản root (Superuser) có quyền lực tối thượng. Root có thể đọc, ghi, xóa bất kỳ file nào trên hệ thống, kể cả file của hệ điều hành.
Rủi ro khi dùng Root thường xuyên:
- Xóa nhầm hệ thống: Một lệnh
rm -rf /gõ nhầm (hoặc script lỗi) khi đang ở quyền root có thể xóa sạch hệ điều hành trong vài giây. - Lỗ hổng bảo mật: Nếu bạn chạy các ứng dụng (Web Server, Database, App) bằng quyền root, hacker khai thác được ứng dụng đó sẽ chiếm được toàn quyền kiểm soát máy chủ (Full Control).
- Lỗi phân quyền: File tạo ra bởi root thì user thường không sửa được, gây rắc rối khi deploy ứng dụng hoặc chia sẻ file.
2. Mô hình chuẩn: User thường + Sudo
Thay vì log in trực tiếp vào root, bạn nên tạo một user bình thường và cấp quyền sudo (SuperUser DO).
- User thường: Dùng để code, chạy các lệnh
ls,cd, biên dịch code, chạy ứng dụng web. - Sudo: Chỉ dùng khi cần cài phần mềm hệ thống, sửa cấu hình mạng, tắt mở service.
Hướng dẫn tạo User và cấp quyền Sudo (Ubuntu/Debian)
Bước 1: Tạo user mới
Thay huynguyen bằng tên username bạn muốn.
adduser huynguyen
# Nhập password và các thông tin phụ (có thể Enter bỏ qua)Bước 2: Cấp quyền Sudo
Thêm user vào nhóm sudo (hoặc wheel trên CentOS).
usermod -aG sudo huynguyenBước 3: Sử dụng Thoát root và đăng nhập bằng user mới.
su - huynguyen
# Hoặc logout và ssh lại bằng user mới3. Cài đặt phần mềm: Cài vào đâu?
Khi cài phần mềm, có hai phạm vi chính: Toàn hệ thống (System-wide) và Cục bộ (User-specific).
A. Phần mềm Hệ thống (Cần Root/Sudo)
Những phần mềm dùng chung cho cả máy chủ, hoặc cần mở port thấp (< 1024), chạy dưới dạng Service (systemd).
- Ví dụ: Nginx, Docker, Git, Unzip, Curl.
- Cách cài: Dùng Package Manager (
apt,yum).bash:sudo apt update sudo apt install nginx git docker.io
B. Ngôn ngữ lập trình & Công cụ Dev (KHÔNG NÊN dùng Sudo)
Node.js, Python, Ruby, Go... thường xuyên thay đổi phiên bản. Nếu cài bằng sudo apt install nodejs, bạn sẽ nhận được phiên bản rất cũ và khó nâng cấp, đồng thời gặp lỗi EACCES khi cài gói npm global.
Giải pháp: Cài trên User riêng thông qua các Version Manager.
- Mỗi User tự quản lý phiên bản Node/Python của mình.
- Không cần gõ
sudokhi cài gói (ví dụnpm install -g yarn). - Không sợ làm hỏng các thư viện hệ thống.
Ví dụ với Node.js (Khuyên dùng nvm hoặc fnm):
# Cài đặt nvm (chạy với user thường, KHÔNG sudo)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# Load nvm
source ~/.nvm/nvm.sh
# Cài Node.js mới nhất
nvm install --lts
# Kiểm tra
node -v
npm install -g yarn # Chạy mượt, không cần sudoVí dụ với Python (Khuyên dùng pyenv hoặc miniconda):
Tránh dùng lệnh pip của hệ thống (/usr/bin/python3) vì dễ làm hỏng các tool của Ubuntu. Hãy tạo môi trường ảo (venv).
Tổng kết
| Tác vụ | Tài khoản nên dùng | Ghi chú |
|---|---|---|
| Quản lý file cá nhân, code | User | An toàn, tiện lợi. |
| Cài tools dev (Node, Python...) | User | Dùng nvm, pyenv, sdkman... |
| Chạy Web App (Node, Go...) | User | Không bao giờ chạy app bằng root! |
| Cài Nginx, Docker, Update OS | User + Sudo | Chỉ dùng sudo khi cần thiết. |
| Cấu hình mạng, ổ đĩa | User + Sudo | Cẩn thận khi thao tác. |
Hãy tập thói quen: Luôn bắt đầu với User thường, chỉ thêm sudo khi máy báo "Permission denied" và bạn HIỂU RÕ mình đang làm gì.