Tự động thiết lập server ban đầu với Ubuntu 18.04
Khi bạn lần đầu tiên tạo một server Ubuntu 18.04 mới, có một số bước cấu hình mà bạn nên thực hiện sớm như một phần của cài đặt cơ bản. Điều này sẽ tăng tính bảo mật và khả năng sử dụng cho server của bạn và sẽ tạo cho bạn một nền tảng vững chắc cho các hành động tiếp theo.Mặc dù bạn có thể hoàn thành các bước này theo cách thủ công , nhưng đôi khi việc viết kịch bản các quy trình có thể dễ dàng hơn để tiết kiệm thời gian và loại bỏ lỗi của con người. Hướng dẫn này giải thích cách sử dụng tập lệnh để tự động hóa các bước trong hướng dẫn cài đặt server ban đầu .
Tập lệnh làm gì?
Tập lệnh này là một giải pháp thay thế cho việc chạy thủ công thông qua quy trình được nêu trong hướng dẫn cài đặt server ban đầu Ubuntu 18.04 và hướng dẫn cài đặt SSH key trên Ubuntu 18.04 .
Các biến sau đây ảnh hưởng đến cách chạy tập lệnh:
-
USERNAME
: Tên của account regular user để tạo và cấp quyềnsudo
cho. -
COPY_AUTHORIZED_KEYS_FROM_ROOT
: Có sao chép nội dung SSH key từ account gốc sang accountsudo
mới hay không. -
OTHER_PUBLIC_KEYS_TO_ADD
: Một mảng các chuỗi đại diện cho các public key khác để thêm vào account kích hoạtsudo
. Tùy chọn này được dùng bổ sung hoặc thay vì sao chép các khóa từ account gốc .
Bạn nên cập nhật các biến này nếu cần trước khi chạy tập lệnh.
Khi tập lệnh chạy, các hành động sau được thực hiện:
- Tạo account regular user với quyền
sudo
bằng tên được chỉ định bởi biếnUSERNAME
. - Cấu hình trạng thái password ban đầu cho account mới:
- Nếu server được cấu hình để xác thực password , thì password quản trị ban đầu, được tạo sẽ được chuyển từ account gốc sang account
sudo
mới. Mật khẩu của account gốc sau đó bị khóa. - Nếu server được cấu hình để xác thực SSH key , một password trống sẽ được đặt cho account
sudo
.
- Nếu server được cấu hình để xác thực password , thì password quản trị ban đầu, được tạo sẽ được chuyển từ account gốc sang account
- Mật khẩu của user
sudo
được đánh dấu là đã hết hạn để nó phải được thay đổi khi đăng nhập lần đầu. - Các
authorized_keys
file từ account gốc được sao chép sangsudo
dùng nếuCOPY_AUTHORIZED_KEYS_FROM_ROOT
được cài đặt đểtrue
. - Bất kỳ khóa nào được xác định trong
OTHER_PUBLIC_KEYS_TO_ADD
sẽ được thêm vào fileauthorized_keys
của usersudo
. - Xác thực SSH dựa trên password bị vô hiệu hóa đối với user gốc .
- Tường lửa UFW được bật khi cho phép kết nối SSH.
Cách sử dụng tập lệnh
Các kịch bản có thể được chạy trong hai cách: bằng cách thêm vào lĩnh vực dữ liệu user của server trong quá trình tạo hoặc bằng cách đăng nhập bằng root và thực hiện nó sau khi trích lập dự phòng.
Sử dụng dữ liệu user
Khi tạo Server trên DigitalOcean, bạn có thể tùy chọn chỉ định dữ liệu user , một tập lệnh sẽ được chạy trong quá trình cấp phép server ban đầu để thực hiện cấu hình bổ sung.
Nếu bạn đang tạo Server từ Control panel , bạn có thể chọn hộp kiểm Dữ liệu user trong phần Chọn tùy chọn bổ sung . Một hộp văn bản sẽ xuất hiện nơi bạn có thể dán tập lệnh:
Nếu bạn đang tạo Server bằng API DigitalOcean , bạn có thể chuyển tập lệnh vào bằng cách sử dụng thuộc tính user_data
.
Nếu bạn đang tạo Server bằng công cụ dòng lệnh doctl
, bạn có thể chuyển tập lệnh vào bằng tùy chọn --user-data-file
:
- doctl compute server create ... --user-data-file /path/to/script
Dù phương pháp bạn sử dụng để thêm dữ liệu user , tập lệnh sẽ được chạy lần đầu tiên khi server mới khởi động. Bạn có thể phải đợi một vài phút để quá trình hoàn tất, nhưng sau đó, bạn có thể đăng nhập vào server của bạn với user đã kích hoạt sudo
của bạn để biết thêm bất kỳ cấu hình nào.
Lần đầu tiên đăng nhập, bạn sẽ được yêu cầu thay đổi password của bạn . Server sẽ kết thúc phiên SSH hiện tại khi bạn cung cấp và xác nhận thông tin đăng nhập mới của bạn . Sau đó, bạn có thể SSH trở lại như bình thường.
Chạy tập lệnh sau khi cấp phép
Nếu bạn không muốn sử dụng dữ liệu user , bạn cũng có thể chạy script theo cách thủ công qua SSH sau khi server được khởi động.
Nếu bạn đã tải tập lệnh xuống máy tính local của bạn , bạn có thể chuyển tập lệnh trực tiếp tới SSH bằng lệnh :
- ssh root@servers_public_IP "bash -s" -- < /path/to/script/file
Đến đây bạn có thể đăng nhập bằng account sudo
mình cho bất kỳ cấu hình nào khác.
Nếu bạn chưa tải tập lệnh xuống máy tính local của bạn , hãy bắt đầu bằng cách đăng nhập vào account gốc trên server của bạn:
- ssh root@servers_public_IP
Tiếp theo, tải tập lệnh thô xuống server :
- curl -L https://raw.githubusercontent.com/do-community/automated-setups/master/Ubuntu-18.04/initial_server_setup.sh -o /tmp/initial_setup.sh
Kiểm tra tập lệnh đảm bảo rằng tập lệnh được download đúng cách và cập nhật bất kỳ biến nào bạn muốn thay đổi:
- nano /tmp/initial_setup.sh
Sau khi hài lòng, hãy chạy script theo cách thủ công bằng cách sử dụng bash
:
- bash /tmp/initial_setup.sh
Bạn có thể đăng nhập bằng cách sử dụng sudo
-enabled user để hoàn thành bất kỳ cấu hình nào khác.
Nội dung kịch bản
Bạn có thể tìm thấy tập lệnh cài đặt server ban đầu trong kho lưu trữ cài đặt tự động trong tổ chức DigitalOcean Community GitHub. Để sao chép hoặc download trực tiếp nội dung script, hãy nhấp vào nút Raw ở phía trên cùng của script hoặc nhấp vào đây để xem trực tiếp nội dung thô .
Nội dung đầy đủ cũng được bao gồm ở đây để thuận tiện:
#!/bin/bash set -euo pipefail ######################## ### SCRIPT VARIABLES ### ######################## # Name of the user to create and grant sudo privileges USERNAME=sammy # Whether to copy over the root user's `authorized_keys` file to the new sudo # user. COPY_AUTHORIZED_KEYS_FROM_ROOT=true # Additional public keys to add to the new sudo user # OTHER_PUBLIC_KEYS_TO_ADD=( # "ssh-rsa AAAAB..." # "ssh-rsa AAAAB..." # ) OTHER_PUBLIC_KEYS_TO_ADD=( ) #################### ### SCRIPT LOGIC ### #################### # Add sudo user and grant privileges useradd --create-home --shell "/bin/bash" --groups sudo "${USERNAME}" # Check whether the root account has a real password set encrypted_root_pw="$(grep root /etc/shadow | cut --delimiter=: --fields=2)" if [ "${encrypted_root_pw}" != "*" ]; then # Transfer auto-generated root password to user if present # and lock the root account to password-based access echo "${USERNAME}:${encrypted_root_pw}" | chpasswd --encrypted passwd --lock root else # Delete invalid password for user if using keys so that a new password # can be set without providing a previous value passwd --delete "${USERNAME}" fi # Expire the sudo user's password immediately to force a change chage --lastday 0 "${USERNAME}" # Create SSH directory for sudo user home_directory="$(eval echo ~${USERNAME})" mkdir --parents "${home_directory}/.ssh" # Copy `authorized_keys` file from root if requested if [ "${COPY_AUTHORIZED_KEYS_FROM_ROOT}" = true ]; then cp /root/.ssh/authorized_keys "${home_directory}/.ssh" fi # Add additional provided public keys for pub_key in "${OTHER_PUBLIC_KEYS_TO_ADD[@]}"; do echo "${pub_key}" >> "${home_directory}/.ssh/authorized_keys" done # Adjust SSH configuration ownership and permissions chmod 0700 "${home_directory}/.ssh" chmod 0600 "${home_directory}/.ssh/authorized_keys" chown --recursive "${USERNAME}":"${USERNAME}" "${home_directory}/.ssh" # Disable root SSH login with password sed --in-place 's/^PermitRootLogin.*/PermitRootLogin prohibit-password/g' /etc/ssh/sshd_config if sshd -t -q; then systemctl restart sshd fi # Add exception for SSH and then enable UFW firewall ufw allow OpenSSH ufw --force enable
Kết luận
Tự động hóa cài đặt server ban đầu có thể giúp bạn tiết kiệm một chút thời gian và cung cấp cho bạn nền tảng tốt để cấu hình thêm. Nếu có các bước bổ sung mà bạn muốn thực hiện, bạn có thể đăng nhập sau khi tập lệnh chạy để tiếp tục theo cách thủ công hoặc nối các bước vào cuối tập lệnh để tự động hóa quy trình.
Các tin liên quan
Thiết lập server ban đầu với Ubuntu 18.042018-04-27
Bắt đầu với kết xuất phía server bằng Nuxt.js
2018-04-16
Cách bảo vệ server của bạn trước lỗ hổng Meltdown và Spectre
2018-01-10
Sơ lược về lịch sử Linux
2017-10-27
Cách thiết lập Shiny Server trên Ubuntu 16.04
2017-10-25
Cách thiết lập server lưu trữ đối tượng bằng Minio trên Ubuntu 16.04
2017-08-30
Cách chạy server MongoDB an toàn với OpenVPN và Docker trên Ubuntu 16.04
2017-03-24
Kết xuất phía server cơ bản với Vue.js và Express
2017-03-14
Cách thiết lập server VPN IKEv2 với StrongSwan trên Ubuntu 16.04
2017-02-17
Cách cấu hình firewall Linux cho Docker Swarm trên CentOS 7
2017-01-11