Chuẩn bị workspace thực hành
Thực hiện trên server của bạn, rồi kiểm tra từng tiêu chí.
Vì sao cần học
Mọi bài thực hành trong khóa đều chạy trên môi trường của bạn và được kiểm tra bằng agent kdc. Trước khi học Linux, cần một chỗ làm bài tách biệt và một agent đã liên kết để kiểm tra kết quả.
Mục tiêu
- Liên kết agent với tài khoản, bật kiểm tra từ xa và hiểu agent gửi gì về nền tảng.
- Tạo workspace riêng cho bài thực hành.
- Đọc và đặt quyền file bằng
chmod, giải thích ý nghĩa quyền600.
Điều kiện tiên quyết
- Python 3.10 trở lên. Chạy
python3 --version:python3gọi Python, còn--versionyêu cầu in phiên bản rồi thoát. Kết quả cần làPython 3.10hoặc mới hơn. - Đã đăng nhập trên web.
Mental model
Agent chạy outbound. Agent trên máy bạn tự hỏi nền tảng xem có yêu cầu kiểm tra không, chạy các check cố định rồi gửi lại kết quả đạt/chưa đạt. Nền tảng không SSH vào máy bạn và không gửi lệnh shell tùy ý. Agent không gửi nội dung file hay log.
Lab root. Agent chỉ đọc file bài tập trong một thư mục gốc, mặc định ~/kdc-labs. Đường dẫn trong bài như workspace/README.md được tính từ lab root.
Quyền file. Mỗi file có ba nhóm quyền cho chủ sở hữu (user), nhóm (group) và người khác (other), mỗi nhóm gồm đọc r=4, ghi w=2, thực thi x=1. Quyền 600 nghĩa là chủ file đọc/ghi được, mọi tài khoản khác không làm gì được. File chứa cấu hình nhạy cảm nên có quyền này.
Thực hành (Guided Lab)
Bấm biểu tượng ⓘ ở góc trên bên phải khối lệnh để xem giải thích lệnh và tham số. Bấm lần nữa để thu gọn.
1. Tải agent về máy thực hành
Bạn chỉ cần một file Python độc lập để kiểm tra bài tập. Mở Servers của tôi, bấm Tải agent kdc.py, hoặc sao chép nhóm lệnh tải/liên kết trên trang đó; địa chỉ trong nhóm lệnh được điền theo web bạn đang mở.
Nếu dùng terminal, ví dụ dưới đây dành cho nền tảng đang chạy local. Nếu học trên web trực tuyến, thay giá trị KDC_WEB_URL bằng địa chỉ web khóa học trên thanh địa chỉ, chỉ lấy phần https://<tên-miền> (kèm cổng nếu có), không thêm /lessons/... hay /api.
KDC_WEB_URL='http://127.0.0.1:3000'
curl -fL "$KDC_WEB_URL/downloads/kdc.py" -o ~/kdc.py
python3 ~/kdc.py --help
Giải thích lệnh và tham số
| Thành phần | Ý nghĩa |
|---|---|
KDC_WEB_URL='...' | Lưu địa chỉ web vào biến shell để dùng ở các lệnh sau trong cùng terminal; không có dấu cách quanh =. |
curl | Tải nội dung từ một URL. |
-f của curl | Báo lỗi khi server trả HTTP lỗi như 404/500, tránh coi trang lỗi là file tải thành công. |
-L của curl | Theo chuyển hướng HTTP nếu địa chỉ tải được chuyển sang URL khác. |
"$KDC_WEB_URL/downloads/kdc.py" | Ghép địa chỉ web với đường dẫn tải agent; dấu nháy kép giữ URL thành một đối số. |
-o ~/kdc.py | Ghi nội dung tải vào file kdc.py trong home; file đang có sẽ bị thay thế. |
python3 ~/kdc.py --help | Chạy file vừa tải để in hướng dẫn và các lệnh con, chưa liên kết máy. |
~ là home của tài khoản hiện tại. File agent nằm ở ~/kdc.py, thư mục bài tập là ~/kdc-labs; hai vị trí có vai trò khác nhau. Vì dùng đường dẫn bắt đầu bằng ~, bạn có thể chạy agent từ bất kỳ thư mục nào. Không cần cài package Python bằng pip.
Nếu tải bằng trình duyệt, file thường nằm trong Downloads. Trên Linux/macOS, khi file có đúng tên kdc.py ở đó, chuyển về home bằng:
mv ~/Downloads/kdc.py ~/kdc.py
python3 ~/kdc.py --help
Giải thích lệnh và tham số
mv <nguồn> <đích> di chuyển file. python3 ~/kdc.py --help mở hướng dẫn của agent để xác nhận file vừa tải chạy được; --help không liên kết máy hay chạy kiểm tra.
Chỉnh đường dẫn nguồn nếu trình duyệt lưu ở chỗ khác. Đích đã có sẽ bị thay thế. Với WSL2, tải bằng curl ngay trong terminal WSL để có file trong home Linux.
2. Liên kết agent
Trong cùng terminal đã đặt KDC_WEB_URL, chạy:
mkdir -p ~/kdc-labs
python3 ~/kdc.py connect \
--api "$KDC_WEB_URL/api" \
--name "Laptop của tôi" \
--lab-root ~/kdc-labs
Giải thích lệnh và tham số
| Thành phần | Ý nghĩa |
|---|---|
mkdir -p ~/kdc-labs | Tạo thư mục bài tập; -p tạo thư mục cha còn thiếu và cho phép chạy lại khi thư mục đã có. |
python3 ~/kdc.py | Chạy file agent trong home bằng Python, độc lập với thư mục làm việc hiện tại. |
connect | Yêu cầu agent liên kết máy này với tài khoản của bạn. |
--api "$KDC_WEB_URL/api" | Địa chỉ API của nền tảng. Với web trực tuyến dùng HTTPS; 127.0.0.1 trong ví dụ local chỉ chính máy đang chạy agent. |
--name "Laptop của tôi" | Tên máy hiển thị trên web. Dấu nháy kép giữ tên có dấu cách thành một tham số. |
--lab-root ~/kdc-labs | Thư mục gốc để agent tìm file bài tập. ~ là home của tài khoản hiện tại. |
\ cuối dòng | Nối dòng kế tiếp thành cùng một lệnh. Không thêm dấu cách sau \; chỉ nhấn Enter. |
CLI in ra mã liên kết và mã xác nhận. Mở trang Servers, nhập hai mã, đợi CLI báo đã liên kết. Trong khung Server đã liên kết, tích ô Kiểm tra từ xa dưới tên máy đó. Nếu chưa thấy máy, bấm Làm mới.
Giữ agent chạy trong terminal này:
python3 ~/kdc.py run
run dùng cấu hình đã lưu khi connect, liên tục chờ yêu cầu kiểm tra và gửi kết quả. Khi thấy Agent sẵn sàng. Lab root: ..., giữ terminal mở. Ctrl+C dừng agent. Mở terminal thứ hai để làm các bước tiếp theo; không đổi thư mục trong terminal đang chạy agent.
3. Tạo workspace
mkdir -p ~/kdc-labs/workspace
cd ~/kdc-labs/workspace
Giải thích lệnh và tham số
mkdir -p tạo thư mục workspace bên trong lab root; -p tạo cả thư mục cha còn thiếu và không báo lỗi khi thư mục đã tồn tại. cd chuyển terminal vào đó, nên tên file như config.env ở các lệnh tiếp theo sẽ trỏ tới ~/kdc-labs/workspace/config.env.
4. Tạo README và file cấu hình
Nếu chưa có các file này, tạo bằng các lệnh sau. Nếu đã có, dùng trình soạn thảo để sửa nội dung vì dấu > sẽ ghi đè file hiện có.
printf 'Workspace thực hành của tôi\nKDC-LAB\n' > README.md
printf 'APP_ENV=practice\n' > config.env
cat README.md
cat config.env
Giải thích lệnh và tham số
| Thành phần | Ý nghĩa |
|---|---|
printf | In nội dung theo định dạng được chỉ định. |
\n trong chuỗi của printf | Xuống dòng; ví dụ README có hai dòng nội dung. |
> | Chuyển nội dung in ra vào file; tạo file nếu chưa có, ghi đè nội dung nếu đã có. |
README.md, config.env | File đích trong thư mục hiện tại. Không phải tên lệnh. |
cat <file> | In nội dung file để xem; không sửa file. |
README phải có dòng KDC-LAB; cấu hình chỉ dùng giá trị mẫu APP_ENV=practice, không ghi secret thật.
5. Xem quyền hiện tại
ls -l config.env
Giải thích lệnh và tham số
ls liệt kê file; -l (chữ l thường, không phải số 1) hiển thị dạng chi tiết: loại file, quyền, số hard link, chủ sở hữu, group, kích thước, thời điểm sửa và tên file. config.env giới hạn kết quả ở đúng file đó.
Ví dụ, nếu file hiện có quyền 644, bạn thấy:
-rw-r--r-- 1 <user> <group> <size> <date> config.env
Các phần <...> trong ví dụ là chỗ minh họa, không phải lệnh cần gõ. Ký tự đầu - nghĩa là file thường; chín ký tự tiếp theo chia thành rw- (chủ sở hữu), r-- (group), r-- (người khác). Quyền ban đầu có thể khác tùy thiết lập máy.
Bạn có thể bấm Kiểm tra kết quả ở thời điểm này để xem tiêu chí quyền file trước khi sửa.
6. Đặt quyền 600 rồi kiểm tra lại
chmod 600 config.env
ls -l config.env
Giải thích lệnh và tham số
chmod đổi quyền file. 600 là giá trị quyền, không phải tùy chọn bắt đầu bằng -; config.env là file cần đổi quyền. Lệnh không sửa nội dung file và thường không in gì khi thành công.
| Chữ số | Áp dụng cho | Cách tính | Quyền |
|---|---|---|---|
6 | Chủ sở hữu | 4 đọc + 2 ghi | rw- |
0 | Group | Không cấp quyền | --- |
0 | Người khác | Không cấp quyền | --- |
Kết quả ls -l sau khi đổi quyền cần bắt đầu bằng:
-rw-------
Chỉ chủ sở hữu đọc và sửa được file. Không cần sudo vì bạn tạo file bằng tài khoản của mình. Chỉ áp dụng 600 cho file này: thư mục cần quyền x để đi vào.
Tự kiểm tra (Verification)
ls -l ~/kdc-labs/workspace
cat ~/kdc-labs/workspace/README.md
Giải thích lệnh và tham số
Ở đây ls -l nhận đường dẫn thư mục, nên liệt kê chi tiết các file bên trong; cat nhận đường dẫn file README để in nội dung.
Dòng của config.env phải bắt đầu bằng -rw-------, README phải có KDC-LAB.
Chọn server và bấm Kiểm tra kết quả. Nếu server chưa có trong danh sách sau khi bật Kiểm tra từ xa, tải lại trang bài học.
Tự tra cứu lệnh và tham số
man chmod
man ls
man mkdir
man mở trang hướng dẫn của lệnh đứng sau nó. Dùng phím mũi tên để cuộn, gõ / rồi tên tùy chọn để tìm, nhấn q để thoát. Một tùy chọn chỉ có nghĩa trong lệnh đang dùng: -p của mkdir tạo thư mục cha, nhưng -p ở một lệnh khác có thể làm việc hoàn toàn khác.
Lỗi thường gặp
- Agent báo không tìm thấy file bài tập: lab root khác với thư mục bạn tạo. Chạy
python3 ~/kdc.py statusđể xem lab root;statuschỉ in cấu hình liên kết, không chạy kiểm tra. can't open file .../kdc.py: chưa tải agent hoặc lưu khác vị trí. Chạyls -l ~/kdc.pyđể kiểm tra; nếu chưa có, tải lại theo bước 1. Dùngpython3 ~/kdc.py runthay cho đường dẫn nằm trong mã nguồn dự án.curlbáo lỗi hoặc Python báo cú pháp HTML: kiểm tra đúng URL web và đường dẫn/downloads/kdc.py, tải lại bằngcurl -fL. Với agent trên VM mà web chạy trên laptop, xem cách dùng SSH tunnel ở bài VM Linux.lshoặcchmodbáoNo such file or directory: file chưa có hoặc terminal đang ở sai thư mục. Chạypwd, rồils -l ~/kdc-labs/workspace/config.envđể xác định vị trí file.- Bấm kiểm tra mà job chờ mãi: agent chưa chạy, hoặc chưa bật Kiểm tra từ xa trên trang Servers.
chmod 600trên thư mục làm mất quyền vào thư mục, vì thư mục cần quyềnxđể truy cập. Chỉ đặt600cho file.
Bảo mật
Token của agent nằm ở ~/.config/kdc/device.json với quyền 600, hết hạn sau 30 ngày. Thu hồi server trên trang Servers khi không dùng nữa.