Thứ sáu, 27/04/2018 | 00:00 GMT+7

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ền sudo cho.
  • COPY_AUTHORIZED_KEYS_FROM_ROOT : Có sao chép nội dung SSH key từ account gốc sang account sudo 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ạt sudo . 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ến USERNAME .
  • 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 .
  • 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 sang sudo dùng nếu COPY_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 file authorized_keys của user sudo .
  • 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:

Trường dữ liệu  user  console  DigitalOcean

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.


Tags:

Các tin liên quan

Thiết lập server ban đầu với Ubuntu 18.04
2018-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