Mục Tiêu Chương 8
sudo và su
Chạy lệnh với quyền root qua sudo. Dùng su để chuyển user. Cấu hình /etc/sudoers với visudo an toàn.
Administrative Commands
Phân biệt lệnh user (/usr/bin) và admin (/sbin, /usr/sbin). Biết các lệnh quản trị quan trọng trong /sbin.
Config Files /etc
Quản lý file cấu hình hệ thống trong /etc. Biết cách sửa an toàn, backup trước khi thay đổi.
System Logs
Đọc log từ /var/log/, dùng journalctl để xem systemd logs, lọc theo thời gian, service, và mức độ nghiêm trọng.
Kernel Modules
Xem, load, unload kernel modules với lsmod, modprobe, rmmod. Hiểu /etc/modules-load.d/ và blacklisting.
Hardware Tools
Dùng lspci, lsusb, dmidecode, lshw, hwinfo để xem thông tin phần cứng. Chẩn đoán sự cố hardware.
Lý Thuyết: System Administration
1. sudo và su – Quản lý Quyền Admin
sudo (superuser do) cho phép user được ủy quyền chạy lệnh với quyền root mà không cần biết mật khẩu root. su (switch user) chuyển đổi sang user khác (thường là root) bằng mật khẩu của user đó.
$ sudo dnf update -y
# Chạy lệnh với quyền root (yêu cầu mật khẩu user)
$ sudo -i
# Mở root shell (login shell)
$ sudo -u apache cat /var/www/html/config.php
# Chạy lệnh với quyền user apache
$ su -
# Chuyển sang root (cần mật khẩu root); - = login shell
$ su - chris
# Chuyển sang user chris
$ sudo visudo
# Sửa /etc/sudoers an toàn (có syntax check)
$ sudo -l
# Liệt kê quyền sudo của user hiện tại
2. Cấu hình /etc/sudoers
File /etc/sudoers kiểm soát ai được dùng sudo và có thể làm gì. LUÔN dùng visudo để sửa, không edit trực tiếp.
# Cho phép wheel group dùng sudo với bất kỳ lệnh nào:
%wheel ALL=(ALL) ALL
# Cho phép chris không cần mật khẩu:
chris ALL=(ALL) NOPASSWD: ALL
# Cho phép devuser chỉ chạy systemctl:
devuser ALL=(ALL) /usr/bin/systemctl
# Thêm user vào wheel group:
$ sudo usermod -aG wheel chris
$ groups chris
chris : chris wheel
# /etc/sudoers.d/ - thư mục drop-in configs:
$ sudo visudo -f /etc/sudoers.d/devteam
3. System Logs – journalctl và /var/log
systemd journal (journalctl) là log tập trung cho tất cả services. Các log truyền thống vẫn tồn tại trong /var/log/.
$ journalctl -xe
# Log đầy đủ với context, nhảy đến cuối
$ journalctl -u sshd.service
# Log của SSH service
$ journalctl -f
# Follow logs real-time (như tail -f)
$ journalctl --since "2025-06-13 08:00" --until "2025-06-13 09:00"
# Log trong khoảng thời gian cụ thể
$ journalctl -p err
# Chỉ hiển thị errors (0=emerg, 3=err, 6=info, 7=debug)
$ journalctl --disk-usage
Archived and active journals take up 128.0M
$ journalctl --vacuum-size=100M
# Giới hạn kích thước journal
| Log File | Nội dung |
|---|---|
| /var/log/messages | Log hệ thống chung (syslog) |
| /var/log/secure | Authentication, sudo, SSH logs |
| /var/log/boot.log | Boot/startup messages |
| /var/log/dnf.log | Package install/remove history |
| /var/log/httpd/ | Apache access and error logs |
| /var/log/audit/ | SELinux và audit logs |
Kernel Modules và Hardware Tools
4. Kernel Modules
Kernel modules là các phần của kernel có thể load/unload động mà không cần reboot. Thường là drivers cho hardware hoặc filesystem.
$ lsmod
Module Size Used by
nf_conntrack 176128 3 nf_nat,iptable_nat
ip_tables 36864 3 iptable_mangle,iptable_nat
$ lsmod | grep usb
$ modinfo usb_storage
filename: /lib/modules/.../kernel/drivers/usb/storage/usb-storage.ko
$ sudo modprobe usb_storage
# Load module (dùng modprobe, không dùng insmod cho production)
$ sudo rmmod usb_storage
# Unload module (chỉ khi không còn dùng)
$ cat /proc/modules | head -5
# Blacklist module (ngăn load tự động):
$ echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
5. Hardware Information Tools
$ lspci
00:00.0 Host bridge: Intel Corporation...
00:02.0 VGA compatible controller: Intel Corporation...
$ lspci -v | grep -A5 "VGA"
# Thông tin chi tiết về GPU
$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$ sudo dmidecode -t memory
# Thông tin RAM từ BIOS DMI table
$ sudo dmidecode -t processor | grep "Version"
Version: Intel(R) Core(TM) i7-12700H CPU @ 2.30GHz
$ cat /proc/cpuinfo | grep "model name" | head -1
model name : Intel(R) Core(TM) i7-12700H CPU @ 2.30GHz
$ free -h
total used free
Mem: 15Gi 4.2Gi 8Gi
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part /
6. systemd-analyze và Boot Diagnostics
$ systemd-analyze
Startup finished in 1.234s (kernel) + 2.567s (userspace) = 3.801s
$ systemd-analyze blame | head -10
1.234s NetworkManager-wait-online.service
0.456s firewalld.service
# Dịch vụ nào khởi động lâu nhất
$ systemd-analyze critical-chain
# Chuỗi phụ thuộc critical path trong boot
$ systemctl list-units --failed
# Xem dịch vụ bị lỗi
$ systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service)
Active: active (running) since Fri 2025-06-13 08:00:00 EDT
Lab Thực Hành – Chapter 8
Cấu hình sudo cho user mới
$ sudo useradd -m -s /bin/bash devops
$ sudo passwd devops
$ sudo usermod -aG wheel devops
$ sudo -u devops sudo whoami
root
$ sudo visudo -f /etc/sudoers.d/devops
# Thêm: devops ALL=(ALL) NOPASSWD: /usr/bin/systemctl
Phân tích System Logs
$ journalctl --since today -p err --no-pager
$ journalctl -u sshd --since "1 hour ago"
$ grep "Failed password" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -rn | head -5
# Top IP đăng nhập SSH thất bại
$ last | head -10
# Lịch sử đăng nhập
Quản lý Kernel Modules
$ lsmod | wc -l
78
$ modinfo -F filename vfat
/lib/modules/6.8.0/kernel/fs/fat/vfat.ko.xz
$ sudo modprobe nfs
$ lsmod | grep nfs
nfs 491520 0
$ sudo rmmod nfs
Kiểm tra Hardware
$ lscpu | grep -E "Architecture|CPU\(s\)|Thread|Socket|Model name"
Architecture: x86_64
CPU(s): 16
Model name: Intel(R) Core(TM) i7-12700H
$ free -h && echo "---" && df -h /
$ sudo dmidecode -t 17 | grep -E "Size:|Speed:|Type:" | head -8
# Thông tin về RAM DIMMs
systemd-analyze Boot Performance
$ systemd-analyze time
$ systemd-analyze blame | head -15
$ systemctl list-units --type=service --state=running
$ systemctl list-units --failed
$ systemctl status NetworkManager.service
Xem và phân tích /etc config files
$ cat /etc/os-release
NAME="Fedora Linux"
VERSION="41 (Workstation Edition)"
$ cat /etc/hostname
$ cat /etc/resolv.conf
$ cat /etc/hosts
$ ls /etc/cron.d/ /etc/cron.daily/ /etc/cron.weekly/
$ cat /etc/crontab
Câu Hỏi Ôn Tập – Chapter 8
Sự khác nhau giữa sudo và su? Khi nào nên dùng cái nào?
Tại sao phải dùng visudo thay vì trực tiếp sửa /etc/sudoers?
journalctl -p err --since today làm gì?
Lệnh lsmod hiển thị gì? Cột "Used by" có ý nghĩa gì?
Làm thế nào để ngăn một kernel module tự động load khi boot?
echo "blacklist module_name" > /etc/modprobe.d/blacklist-module.conf. Sau đó chạy dracut -f để rebuild initrd. Ví dụ phổ biến: blacklist nouveau (NVIDIA open source driver) khi dùng driver proprietary. Kernel command line: modprobe.blacklist=module_name cũng hoạt động tạm thời.dmidecode -t memory cho biết thông tin gì?
Log file nào ghi lại các lần thử đăng nhập SSH thất bại?
grep "Failed password" /var/log/secure. Với systemd: journalctl -u sshd | grep "Failed". Thông tin gồm timestamp, username, IP nguồn, port.systemd-analyze blame dùng để làm gì?