Cách tự động: một script từ tài khoản cá nhân sẽ chuẩn bị toàn bộ máy chủ (web-stack Apache + PHP, cơ sở dữ liệu, công cụ bảo mật, cron). Tiếp theo — triển khai dashboard, cấp SSL và nhập license. Hoạt động trên Ubuntu/Debian: trên VPS mới, script thiết lập mọi thứ từ đầu; trên máy chủ đã cấu hình — chỉ bổ sung thêm (hồ sơ “Máy chủ đã cấu hình”, bước 01). Tất cả lệnh bên dưới theo thứ tự, chỉ cần cuộn từ trên xuống dưới. Trên VPS mới, mọi bước đều áp dụng lần lượt; nếu máy chủ đã được cấu hình hoặc có cài bảng điều khiển hosting, script cố ý để lại một phần công việc cho bạn — chính xác là phần nào, script ghi ở cuối quá trình chạy (phân tích kết quả xuất ra — ở bước 01).
monitor.example.com — domain của bạn; 203.0.113.10 — IP thật của máy chủ; /var/www/monitor — thư mục gốc của dashboard (nơi chứa public/, assets/, config.php); mật khẩu DB hãy tự đặt.
jail.local), root-crontab, quy tắc UFW, cấu hình Apache. Nếu máy chủ đã được cấu hình (dashboard đang chạy, các trang web, email, các jail riêng) — hãy chọn hồ sơ “Máy chủ đã cấu hình”: nó chỉ thực hiện các thay đổi bổ sung và không đụng đến firewall, Fail2ban, email, SSH và sysctl của bạn. Khi phát hiện có hosting-panel, script tự chuyển sang chế độ này. Trước lần chạy đầu tiên, bạn có thể bật chạy thử (đánh dấu trong tài khoản) — nó sẽ cho thấy những gì sẽ được làm mà không thay đổi gì. Trên máy chủ đang hoạt động, để chắc chắn hãy tạo một snapshot.
my.arciveo.com → mục “Cấu hình máy chủ” (khả dụng sau khi đăng ký Arcivéo Security Monitor). Lệnh gắn với tài khoản của bạn và chứa token cá nhân.
Tập lệnh chuẩn bị toàn bộ máy chủ: web-stack (Apache + PHP), cơ sở dữ liệu, công cụ cho SSL, bộ công cụ bảo vệ đầy đủ và các tác vụ cron (Lynis, SMART, debsums, Logwatch, báo cáo hằng ngày, cập nhật ipsum).
1) Chọn mức độ bảo vệ (trong tài khoản, trước khi sao chép lệnh):
2) Chạy trên máy chủ dưới quyền root lệnh từ tài khoản — nó trông như sau:
3) Hãy đọc phần kết quả xuất ra ở cuối — ở đó ghi rõ những gì còn lại thuộc về bạn. Tập lệnh kết thúc bằng một khối kiểm tra và danh sách “Tiếp theo — cài đặt bảng điều khiển”. Một phần các bước, tập lệnh cố ý không thực hiện: chính xác là phần nào thì tùy vào hồ sơ đã chọn và vào những gì nó tìm thấy trên máy chủ. Hãy đối chiếu với danh sách dưới đây — chỉ cần thực hiện những mục mà dòng tương ứng đã xuất hiện trong kết quả của bạn.
Control panel detected (…) — website được tạo bằng chính bảng điều khiển hosting, tập lệnh không tạo vhost. Bước 03, nhánh “Máy chủ có bảng điều khiển hosting”.No vhost created (no domain given) — hồ sơ “Máy chủ đã cấu hình” mà không có domain: một vhost không có tên sẽ trở thành website mặc định và chặn mất chính các website của bạn, nên nó không được tạo. Bước 03, nhánh “Tạo vhost thủ công”.sudo rules NOT written — tập lệnh không xác định được bảng điều khiển chạy dưới tài khoản nào. Đây là tình huống bình thường: tệp của bảng điều khiển được tải lên sau khi tự động cấu hình, nên lúc đó chưa có gì để xác định. Thiếu các quy tắc này, các module sẽ không thấy dữ liệu hệ thống. Bước 04, khối “sudo cho máy chủ web”.! Nginx does not read .htaccess — phía trước Apache có Nginx, và việc tự động ghi lệnh cấm vào cấu hình của nó đã không thành công. Nhất định hãy làm điều này: nếu không, data/, keys/, database/ và config.php sẽ bị lộ ra ngoài, bỏ qua .htaccess. Bước 03, khối “Nếu phía trước Apache có Nginx”.UFW installed but inactive — tường lửa đã được cài nhưng đang tắt: trên máy chủ đã cấu hình, tập lệnh không tự bật nó để không cắt mất quyền truy cập của bạn. Hãy tự bật, nhất thiết phải cho phép cổng SSH của bạn:
Fail2ban installed but not running — hãy khởi động: sudo systemctl enable --now fail2ban.Database server present … but not running — hãy khởi động hệ quản trị cơ sở dữ liệu trước bước 04: sudo systemctl enable --now mariadb (hoặc mysql — tùy loại đang được cài).Certbot skipped — issue SSL in … — chứng chỉ được cấp bằng công tắc Let's Encrypt trong bảng điều khiển hosting; bước 06 bạn không cần đến.All checks passed. Các mục có dấu ! cần được chú ý; chi tiết được ghi vào log, đường dẫn của log được tập lệnh in ra ở ngay cuối (Log: …).
Để mở dashboard tại địa chỉ dạng monitor.example.com và nhận SSL miễn phí, tên miền phải trỏ về máy chủ. Trong bảng quản lý DNS (tại nhà đăng ký hoặc nhà cung cấp hosting), hãy tạo một bản ghi A:
Sau vài phút (đôi khi tới một giờ), hãy kiểm tra tên miền đã trỏ về máy chủ chưa:
/var/www/monitor và thiết lập trang Apache (DocumentRoot trỏ vào gốc bảng điều khiển, PHP-FPM, AllowOverride cho .htaccess). Trong kết quả xuất ra của tập lệnh, đó là dòng vhost … → DocumentRoot …. Không cần tạo riêng thư mục hay vhost — chỉ cần tải tệp lên và cấp quyền.
Nhánh “Máy chủ có bảng điều khiển hosting” (trong kết quả xuất ra: Control panel detected (…)). Trên máy chủ như vậy, các website do bảng điều khiển quản lý, và tập lệnh cố ý không tạo vhost riêng — nó sẽ bị ghi đè ngay ở lần bảng điều khiển dựng lại cấu hình đầu tiên. Trình tự như sau:
public_html của domain đó: cạnh index.php, api/, assets/ cũng phải có các thư mục dịch vụ config.php, includes/, data/, tmp/, logs/, keys/, cron/, database/. Không cần đưa gì ra ngoài web-root: các thư mục dịch vụ đã được đóng bằng tệp .htaccess trong gói phân phối, còn dưới Nginx — bằng lệnh cấm mà tập lệnh đã ghi vào cấu hình của domain.config.php (bước 05). Trong các lệnh, hãy thay đường dẫn bằng /home/tài_khoản/web/domain/public_html, còn chủ sở hữu — bằng người dùng của domain đó thay cho www-data.Nhánh “Tạo vhost thủ công” (trong kết quả xuất ra: No vhost created (no domain given)). Điều này chỉ xảy ra với hồ sơ “Máy chủ đã cấu hình”, khi domain không được truyền vào. Cách đơn giản nhất — chạy lại lệnh từ tài khoản cá nhân và chỉ rõ domain:
Chạy lại là an toàn: những gì đã làm sẽ không bị lặp lại. Còn nếu cần tạo vhost bằng tay — dưới đây chính là cấu hình mà trình cài đặt ghi ra:
ServerName ở đây là bắt buộc. Một vhost không có tên sẽ trở thành website mặc định của Apache và bắt đầu trả lời thay cho các domain khác trên cùng máy chủ. Cũng vì lý do đó, đừng tắt 000-default.conf trên máy chủ đã cấu hình: website này có thể đã được sửa lại cho một dự án đang chạy — trên VPS mới, trình cài đặt tự gỡ nó, còn ở đây thì không cần làm vậy.
! Nginx does not read .htaccess). Nginx trả các tệp tĩnh trực tiếp từ đĩa và không đọc .htaccess — các thư mục dịch vụ sẽ bị mở ra ngoài, dù Apache đóng chúng đúng cách. Tập lệnh đã chuẩn bị sẵn tệp chứa các lệnh cấm; cần khai báo nó trong khối server{} của website và tải lại Nginx:
my.arciveo.com → “Tải xuống”. Hãy giải nén gói trước khi tải lên máy chủ.
Hãy tải nội dung gói phân phối vào /var/www/monitor (để bên trong có public/, assets/, config.php v.v.) — qua SFTP/SCP (FileZilla / WinSCP) hoặc bằng lệnh scp từ máy tính cục bộ:
ServerName), hãy truyền nó vào lệnh tự động cấu hình ngay ở bước 01: … | sudo bash -s -- monitor.example.com (hoặc nhập domain vào ô “Domain của bảng điều khiển” trong tài khoản cá nhân). Nếu không truyền domain — bảng điều khiển sẽ trả lời mọi host và theo IP, còn ServerName sẽ được certbot ghi khi cấp SSL (bước 06); không cần cài đặt lại gì cả.
root hoặc qua SFTP, tệp thuộc về root, và máy chủ web (www-data) sẽ không đọc được chúng — bảng điều khiển sẽ mở ra trống trơn hoặc báo lỗi 403 (trong log: .htaccess unreadable / directory not executable). Lệnh dưới đây khắc phục điều này:
Hãy mở quyền tải tệp lên qua SFTP cho chính bạn. Sau lệnh ở trên, mọi tệp đều thuộc về www-data, trong khi FileZilla / WinSCP kết nối bằng người dùng của bạn — khi đó việc tải lên sẽ thất bại với SSH_FX_PERMISSION_DENIED (Permission denied). Hãy chọn một trong hai phương án.
Phương án A — ACL chỉ dành cho người dùng của bạn (khuyến nghị). Chỉ mình bạn có quyền ghi; máy chủ web vẫn không thể ghi đè mã của bảng điều khiển:
Phương án B — qua nhóm www-data. Đơn giản hơn, nhưng máy chủ web cũng có quyền ghi vào tệp của bảng điều khiển: nếu PHP có lỗ hổng thì mã có thể bị thay thế. Thứ tự các lệnh rất quan trọng — config.php và các thư mục làm việc được đóng lại sau cùng:
id deploy — trong danh sách nhóm phải xuất hiện www-data; ls -ld /var/www/monitor — quyền drwxrwsr-x, chữ s thay cho x nghĩa là setgid đã được đặt.
Tạo cơ sở dữ liệu và người dùng, sau đó nhập lược đồ. Khối cấu hình DB được dán vào terminal toàn bộ (sudo mysql đăng nhập root qua unix-socket — không cần mật khẩu root). monitor_db và monitor_user chỉ là tên ví dụ, bạn có thể đặt tên tùy ý; hãy ghi nhớ tên cơ sở dữ liệu, người dùng và mật khẩu — bạn sẽ nhập chúng vào config.php ở bước tiếp theo:
admin khi truy cập lần đầu trên trình duyệt (từ database/db.sql), nếu DB trống.
Nếu các bảng không được tạo (bảng điều khiển báo lỗi kết nối tới DB hoặc hiện màn hình trống thay cho biểu mẫu đăng nhập) — hãy nhập lược đồ thủ công. Lệnh được chạy ở thư mục gốc của bảng điều khiển, các giá trị lấy từ khối bên trên:
$DBNAME / $DBUSER / $DBPASS đã “bị quên” (phiên terminal mới) — hãy tự điền giá trị vào lệnh hoặc đặt lại chúng bằng đúng ba dòng từ khối bên trên.
sudo rules NOT written — nghĩa là chưa có gì để xác định tài khoản của bảng điều khiển (tệp chưa được tải lên), và các quy tắc chưa được tạo. Thiếu chúng, các mục như tường lửa, Fail2ban và CrowdSec sẽ trống. Giờ khi tệp đã ở đúng chỗ, hãy chạy lại lệnh từ tài khoản cá nhân, chỉ rõ tài khoản:
www-data hãy thay bằng người dùng mà PHP của website bạn đang chạy dưới quyền đó (trên bảng điều khiển hosting, đó thường là chủ sở hữu domain). Có thể xem như sau:
/etc/sudoers.d/monitor tồn tại và trong đó có các dòng chứa người dùng của bạn.
config.php ở thư mục gốc của panel (/var/www/monitor/config.php) là tệp duy nhất bạn cần chỉnh sửa thủ công. Mọi thiết lập của panel được khai báo trong đó bằng các hằng define(). Mở tệp bằng trình soạn thảo:
Điền giá trị của bạn vào các chỗ được tô sáng; phần còn lại giữ nguyên:
Cần đổi những gì:
DB_NAME, DB_USER, DB_PASS — đúng tên cơ sở dữ liệu, người dùng và mật khẩu mà bạn đã đặt khi tạo cơ sở dữ liệu ở bước 04 (nếu giữ ví dụ — monitor_db / monitor_user). Đừng đụng vào DB_HOST và DB_CHARSET.APP_URL — địa chỉ đầy đủ của panel kèm https://, không có dấu gạch chéo ở cuối và không có www. Phải trùng với domain mà bạn kích hoạt license (bước 07), nếu không key sẽ bị từ chối.TIMEZONE — múi giờ của bạn (danh sách — timedatectl list-timezones). Chỉ ảnh hưởng đến cách panel hiển thị ngày tháng; không ảnh hưởng đến thời điểm chạy các tác vụ cron (chỗ đó dùng múi giờ hệ thống).SESSION_LIFETIME — sau bao nhiêu giây không hoạt động thì panel yêu cầu đăng nhập lại (mặc định 8 giờ). Ví dụ 3600 = 1 giờ, 86400 = một ngày.display_errors, log_errors, error_log) — giữ mặc định.Lưu tệp (Ctrl+O, Enter, rồi Ctrl+X) và khởi động lại PHP-FPM — nếu không thì do OPcache mà các thay đổi sẽ không có hiệu lực:
640 (đặt ở bước 03) và cấm rõ ràng trong .htaccess gốc. Đừng đưa nó lên các repository công khai và đừng gửi cho bộ phận hỗ trợ kèm mật khẩu thật.
http:// bạn sẽ không thể đăng nhập.
Certbot skipped — issue SSL in …). Chứng chỉ được cấp bằng công tắc Let's Encrypt trên web-domain ngay trong bảng điều khiển — như vậy việc gia hạn cũng do bảng điều khiển đảm nhiệm.
certbot và plugin cho Apache đã được cài sẵn bởi tự động cấu hình. DNS của tên miền phải trỏ về máy chủ từ trước (bước 02). Cấp chỉ với một lệnh:
Nếu bảng điều khiển còn phải mở được cả với www. — hãy liệt kê cả hai tên trong một lệnh, nếu không, ở địa chỉ thứ hai trình duyệt sẽ hiện cảnh báo về chứng chỉ:
Y.<VirtualHost *:443>, thiết lập chuyển hướng http→https và tự động gia hạn. Cuối cùng — Successfully enabled HTTPS.
dig +short monitor.example.com có trả về IP máy chủ và các cổng 80/443 đã mở (sudo ufw allow 80,443/tcp).
Sau khi cấp: https://monitor.example.com mở ra kèm biểu tượng ổ khóa, còn http:// chuyển hướng sang https://.
Mở https://monitor.example.com, đăng nhập admin / useradmin và làm theo danh sách kiểm tra:
ARCIVEO-… từ tài khoản cá nhân cho tên miền của bạn rồi dán khóa vào “Cài đặt” → “Giấy phép”. Chi tiết.public/start_db.php nếu vẫn còn: nó cho phép tạo lại cơ sở dữ liệu mà không cần xác thực. Khi tệp còn nằm trong thư mục gốc của dashboard hoặc trong public/, dashboard sẽ cảnh báo bằng biểu ngữ đỏ.sudo /usr/local/bin/clamav-scan.sh) gây tải nặng cho đĩa và bộ xử lý, có thể chạy một giờ hoặc lâu hơn — trên máy chủ đang hoạt động, tốt nhất hãy chờ lượt chạy ban đêm lúc 01:30. Các mục “Đĩa (SMART)”, “Hiệu năng” và “Cập nhật bảo mật” tự đầy lên: tương ứng mỗi 30 phút, 5 phút và mỗi giờ một lần.