root là superuser trên Unix-like systems. UID 0 có thể đọc, sửa và xóa gần như mọi thứ. Đây không phải account để dùng hằng ngày chỉ vì permission error làm ta mất kiên nhẫn.
sudo làm gì?
1 | sudo systemctl restart nginx |
sudo chạy command theo policy với identity khác, mặc định là root. Nó kiểm tra cấu hình sudoers, ghi audit log và có thể cache authentication trong thời gian ngắn.
sudo không có nghĩa “command chắc chắn đúng”. Nó chỉ có nghĩa “command sai giờ có thêm quyền”.
Least privilege
- Chạy application bằng user riêng, không phải root.
- Chỉ cấp command cần thiết trong sudoers.
- Sửa sudoers bằng
visudođể validate syntax. - Không dùng
sudo chmod -R 777để né ownership sai. - Trong container, vẫn cân nhắc non-root user; namespace không biến root thành vô hại.
Package manager
Package manager cài software cùng metadata, dependency và upgrade path:
1 | # Debian/Ubuntu |
Không trộn bừa system package, language package và file copy thủ công vào cùng prefix. Package manager không thể upgrade thứ nó không biết tồn tại.
sudo với package của language
Tránh sudo gem install, sudo npm install -g vào system runtime nếu version manager/project dependency giải quyết được. Dùng rbenv, asdf, nvm, Bundler hoặc local package scripts để tránh permission conflict và dependency trôi nổi.
Khi gặp permission denied
Hỏi theo thứ tự:
- Ai đang sở hữu file/process?
- Permission/ACL hiện tại là gì?
- Command có thật sự cần privilege không?
- Có nên sửa ownership/service config thay vì nâng quyền không?
Thêm sudo ngay lập tức là debugging bằng búa: nhanh, mạnh, và khá thú vị cho tới khi thứ bị đóng không phải cái đinh.