Lỗi và cách xử lý
Danh sách đầy đủ mọi lỗi và trục trặc gặp phải trong suốt quá trình dựng server, honeypot và blog này — kèm đúng nội dung lỗi gốc và cách xử lý từng cái. Hơn 30 lỗi lớn nhỏ, phần lớn rơi vào ba nhóm: nhầm cửa sổ terminal, giá trị lưu cứng (IP/domain) không tự cập nhật, và khác biệt Amazon Linux so với Ubuntu/Debian.
Nhầm lẫn terminal
Đây là nhóm lỗi lặp lại nhiều nhất trong cả quá trình.
Gõ lệnh Linux vào PowerShell Windows:
PS C:\WINDOWS\system32> sudo chgrp nginx /var/lib/php/session
Sudo is disabled on this machine. To enable it, go to the Developer Settings page in the Settings app
Cách xử lý: luôn nhìn prompt trước khi gõ — PS C:\...> là Windows, [ec2-user@...]$ là server.
Gõ ssh bên trong session SSH đã kết nối, server tự SSH vào chính nó, báo yêu cầu xác nhận fingerprint mới dù đang đứng ngay trong server. Cách xử lý: nếu đã thấy prompt [ec2-user@...]$ thì không cần gõ ssh nữa.
Nhiều lệnh dán cùng lúc ngay sau sudo su - cowrie bị nuốt mất:
[ec2-user@...]$ sudo su - cowrie
cd cowrie
rm -rf cowrie-env
python3.11 -m venv cowrie-env
source cowrie-env/bin/activate
Last login: ...
[cowrie@... ~]$
Không có dòng nào trong 4 lệnh sau thực sự chạy — prompt vẫn ở thư mục home, chưa vào cowrie-env. Cách xử lý: chạy từng lệnh một, đợi lệnh trước chạy xong mới gõ lệnh kế tiếp.
Cài đặt EC2 và Bludit
Chọn instance type t2.micro:
This instance type is not eligible under the Free Plan.
Upgrade your account plan to access this instance type.
Cách xử lý: đổi sang t3.micro, loại được đánh dấu Free tier eligible cho tài khoản này.
SSH báo lỗi quyền file key:
Permissions for 'C:\\AWS\\my-key.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "C:\\AWS\\my-key.pem": bad permissions
ec2-user@3.26.204.172: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
Cách xử lý:
icacls "C:\AWS\my-key.pem" /inheritance:r
icacls "C:\AWS\my-key.pem" /grant:r "$env:USERNAME:(R)"
Tải bludit-files.zip báo lỗi:
HTTP request sent, awaiting response... 404 Not Found
Cách xử lý: tải trực tiếp source code từ nhánh master (archive/refs/heads/master.zip) thay vì tìm release asset.
Vào trang admin Bludit chỉ thấy một dòng chỏ:
Bludit CMS. Session initialization failed.
Cách xử lý: PHP-FPM chạy dưới user nginx nhưng thư mục session PHP mặc định (/var/lib/php/session) chỉ cho group apache ghi — sửa quyền:
sudo chgrp nginx /var/lib/php/session
sudo chmod 770 /var/lib/php/session
sudo systemctl restart php-fpm
Domain, HTTPS và IP
Đổi Elastic IP xong, giao diện mất hết CSS, trang chỉ còn chữ thô không định dạng. Kiểm tra Console thấy hàng loạt:
Failed to load resource: net::ERR_CONNECTION_TIMED_OUT
3.26.204.172/bl-theme.../img/favicon.png:1
Nguyên nhân: Bludit lưu cứng IP cũ làm base URL trong site.php. Cách xử lý:
sudo sed -i 's/OLD_IP/NEW_IP/g' bl-content/databases/site.php
Bật HTTPS xong, giao diện vỡ lần nữa vì cùng lý do, lần này Console báo:
Mixed Content: The page at 'https://...' was loaded over HTTPS,
but requested an insecure script/stylesheet '...'.
This request has been blocked; the content must be served over HTTPS.
Cách xử lý: sed lại site.php, lần này đổi http:// thành https://.
Certbot chạy lần đầu báo:
Could not install certificate
Could not automatically find a matching server block for [domain].
Set the `server_name` directive to use the Nginx installer.
Nguyên nhân: nginx.conf vẫn còn server_name _; — certbot hiểu đây là giá trị thật, không phải chỗ để trống. Cách xử lý: đổi thành domain thật, reload nginx, chạy lại certbot install --cert-name [domain].
Honeypot Cowrie
$ sudo adduser --disabled-password --gecos "" cowrie
adduser: unrecognized option '--disabled-password'
Cách xử lý (cú pháp Amazon Linux thay cho Ubuntu/Debian):
sudo useradd -m -s /bin/bash cowrie
sudo passwd -l cowrie
$ cp etc/cowrie.cfg.dist etc/cowrie.cfg
cp: cannot stat 'etc/cowrie.cfg.dist': No such file or directory
Cách xử lý: find . -name "cowrie.cfg*" để tìm ra đường dẫn thật (src/cowrie/data/etc/cowrie.cfg.dist) — bản mới đổi cấu trúc thư mục.
ERROR: Package 'cowrie' requires a different Python: 3.9.25 not in '<4,>=3.10'
Cách xử lý: cài python3.11, tạo lại venv bằng đúng bản Python mới.
$ bin/cowrie start
-bash: bin/cowrie: No such file or directory
Cách xử lý: bản mới dùng lệnh cowrie cài qua pip, không còn script bin/cowrie — chạy pip install -e . để đăng ký lệnh, rồi gọi thẳng cowrie start.
$ sudo iptables -t nat -A PREROUTING ...
sudo: iptables: command not found
Cách xử lý: sudo dnf install -y iptables (Amazon Linux 2023 dùng nftables mặc định, không cài sẵn iptables).
Bảo mật và mật khẩu
Log Cowrie ghi lại nguyên văn:
login attempt [test/Duckhai1412@] succeeded
Đây là password thật gõ nhầm lúc test — cảnh báo đổi ngay ở nơi khác nếu có dùng thật.
Test truy cập /admin không thấy popup xác thực Basic Auth như mong đợi, nhưng kiểm tra độc lập lại đúng:
$ curl -I https://khaipham.duckdns.org/admin/dashboard
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Restricted"
Kết luận: cấu hình đúng, chỉ là trình duyệt tự nhớ mật khẩu đã nhập trước đó.
Xử lý nội dung và file lớn
Heredoc dài bị dán lẫn lộn — nội dung file honeypot_blog.py bị chèn nhầm dòng sudo chmod +x ngay giữa thân hàm Python, khiến file hỏng hoàn toàn. Cách xử lý: chuyển sang mã hoá base64 một dòng, dùng echo '...' | base64 -d | sudo tee file > /dev/null.
Bấm nhầm "Move to Static" trong menu quản trị, bài Honeypot report biến mất khỏi danh sách Pages. Cách xử lý: vào tab Static, dùng "Move to Pages" để đưa về lại.
Kéo-thả sắp xếp thứ tự bài viết không hoạt động — dùng chức năng Sticky thay thế để ghim bài lên đầu.
File artifact tổng hợp hiển thị lỗi font:
<title>Nháºt Ký Honeypot</title>
Nguyên nhân: PowerShell Get-Content/Set-Content không tường minh UTF-8 khi ghép nội dung. Cách xử lý: dùng [System.IO.File]::ReadAllText/WriteAllText với UTF8Encoding tường minh.
Chuỗi base64 dài khoảng 8500 ký tự dán một lần bị lỗi:
base64: invalid input
Traceback (most recent call last):
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa1 in position 4869: invalid start byte
Cách xử lý: chia thành 4 đoạn nhỏ hơn, nối bằng lệnh append (>>), giải mã một lần duy nhất ở bước cuối.
File tạm từ lần thất bại trước còn sót lại, thuộc quyền root:
-bash: /tmp/build_log_post.txt: Permission denied
Cách xử lý: sudo rm -f /tmp/build_log_post.txt trước khi tạo lại.
Kết nối mạng
ssh: connect to host 54.66.147.65 port 2222: Connection timed out
Xuất hiện lặp lại nhiều lần vì IP nhà bạn hay đổi (mạng Việt Nam dùng IP động). Cách xử lý: kiểm tra IP hiện tại qua icanhazip.com, cập nhật lại rule Security Group.
Lần cuối, timeout xảy ra dù Security Group và Instance state đều kiểm tra đúng hoàn toàn (Running, 3/3 status check passed). Đã cân nhắc phương án dự phòng EC2 Instance Connect và Serial Console, nhưng hoá ra chỉ là trục trặc mạng tạm thời phía máy người dùng, tự hết khi thử lại.
Điều rút ra
Không có lỗi nào trong danh sách này đến từ một quyết định kiến trúc sai — gần như toàn bộ là chi tiết nhỏ: nhầm cửa sổ, một giá trị lưu cứng không được cập nhật theo, một câu lệnh viết cho hệ điều hành khác. Cách xử lý luôn giống nhau: xác định