Ubuntu 18.04 사용자 이름을 사용하여 초기 서버 설치를 자동으로 진행하여sudo 권한을 만들고 부여합니다. 루트 사용자의 authorized\u keys 파일을 새 sudo 사용자에게 복사할지 여부입니다.새 sudo 사용자에 추가할 다른 공개 키 OTHER\u public\u keys\u to\u add=("ssh rsa AAAB...") sudo 사용자를 추가하고 루트 계정이 실제 암호를 설정했는지 확인하여 sudo 사용자의 암호를 즉시 종료하여 sudo 사용자의 ssh 디렉터리를 루트 디렉터리에서 복사하여 권한을 부여한\u 키 파일을 강제로 변경합니다. (요청하면) 제공된 다른 공개 키를 추가합니다.SSH 구성 소유권 및 권한을 조정하여 루트 SSH 로그인을 비활성화하고 암호를 사용하여 SSH에 이상을 추가한 다음 UFW 방화벽을 활성화합니다.

Ubuntu 18.04 사용자 이름을 사용하여 초기 서버 설치를 자동으로 진행하여sudo 권한을 만들고 부여합니다. 루트 사용자의 authorized\u keys 파일을 새 sudo 사용자에게 복사할지 여부입니다.새 sudo 사용자에 추가할 다른 공개 키 OTHER\u public\u keys\u to\u add=("ssh rsa AAAB...") sudo 사용자를 추가하고 루트 계정이 실제 암호를 설정했는지 확인하여 sudo 사용자의 암호를 즉시 종료하여 sudo 사용자의 ssh 디렉터리를 루트 디렉터리에서 복사하여 권한을 부여한\u 키 파일을 강제로 변경합니다. (요청하면) 제공된 다른 공개 키를 추가합니다.SSH 구성 소유권 및 권한을 조정하여 루트 SSH 로그인을 비활성화하고 암호를 사용하여 SSH에 이상을 추가한 다음 UFW 방화벽을 활성화합니다.

소개


새 Ubuntu 18.04 서버를 처음 만들 때 기본 설정의 일부로서 가능한 한 빨리 설정 절차를 수행해야 합니다.이것은 서버의 안전성과 가용성을 향상시키고 후속 조작에 튼튼한 기반을 다질 것이다.
비록 you can complete these steps manually 그러나 때때로 프로세스 스크립트를 작성하여 시간을 절약하고 사람의 오류를 없애는 것이 더욱 쉽다.이 안내서는 어떻게 사용하는지 설명합니다a script to automate the steps in the initial server setup guide.

스크립트는 무엇을 합니까?


이 스크립트는 수동 실행 Ubuntu 18.04 initial server setup guidesetting up SSH keys on Ubuntu 18.04 가이드에서 개술한 과정을 대체하는 방법입니다.
다음 변수는 스크립트의 작동 방식에 영향을 줍니다.
  • USERNAME: sudo 권한을 만들고 부여할 일반 사용자 계정의 이름입니다.
  • COPY_AUTHORIZED_KEYS_FROM_ROOT: SSH 키 자산을 루트 계정에서 새 sudo 계정으로 복사할지 여부.
  • OTHER_PUBLIC_KEYS_TO_ADD: sudo 계정을 사용하는 다른 키에 추가할 문자열 그룹을 표시합니다.루트 계정에서 키를 복사하는 것 외에 이 옵션을 사용할 수도 있고, 루트 계정에서 키를 복사하지 않을 수도 있습니다.
  • 스크립트를 실행하기 전에 필요에 따라 이 변수를 업데이트해야 합니다.
    스크립트가 실행되면 다음과 같은 작업이 수행됩니다.
  • 변수에 지정된 이름을 사용하여 sudo 권한이 있는 일반 사용자 계정을 만듭니다.
  • 새 계정의 초기 암호 상태를 구성합니다.
  • 서버가 암호 인증으로 구성되면 원래 생성된 관리 암호가 루트 계정에서 새 USERNAME 계정으로 이동합니다.그리고 루트 계정의 비밀번호를 잠그세요.
  • 서버가 SSH 키 인증으로 구성된 경우 sudo 계정에 빈 암호가 설정됩니다.
  • sudo 사용자의 암호가 만료된 것으로 표시되므로 첫 로그인 시 암호를 변경해야 합니다.
  • sudo을(를) authorized_keys로 설정하면 루트 계정의 sudo 파일이 COPY_AUTHORIZED_KEYS_FROM_ROOT 사용자에게 복사됩니다.
  • true에 정의된 모든 키는 OTHER_PUBLIC_KEYS_TO_ADD 사용자의 sudo 파일에 추가됩니다.
  • 루트 사용자는 암호 기반 SSH 인증을 해제합니다.
  • UFW 방화벽은 SSH 연결을 허용합니다.
  • 스크립트 사용 방법


    이 스크립트는 두 가지 방식으로 실행할 수 있습니다. the server’s user data field during creation 에 추가하거나 루트로 로그인하여 설정 후에 실행합니다.

    사용자 데이터 사용


    Digital Ocean에서 Droplet을 만들 때 지정user data을 선택하여 초기 서버 구성 중에 스크립트를 실행하여 다른 구성을 수행할 수 있습니다.
    제어판에서 물방울을 생성하려면 다른 옵션 선택 섹션에서 사용자 데이터 확인란을 선택합니다.스크립트를 붙여넣을 수 있는 텍스트 상자가 나타납니다.

    creating a Droplet using the DigitalOcean API 인 경우 authorized_keys 속성을 사용하여 스크립트에 전송할 수 있습니다.
    creating a Droplet with the user_data command line tool 의 경우 doctl 옵션을 사용하여 스크립트를 전송할 수 있습니다.
    1. doctl compute droplet create ... --user-data-file /path/to/script
    어떤 방법으로 사용자 데이터를 추가하든지 간에 스크립트는 새 서버가 처음 시작될 때 실행됩니다.이 프로세스를 완료하려면 몇 분 정도 기다려야 할 수도 있지만, 나중에 --user-data-file 를 사용하는 사용자를 사용하여 서버에 로그인하여 추가 구성을 할 수 있습니다.
    처음 로그인하면 암호를 변경하라는 메시지가 표시됩니다.새 자격 증명을 제공하고 확인하면 서버에서 현재 SSH 세션이 종료됩니다.그런 다음 평소와 같이 SSH를 다시 사용하여 복귀할 수 있습니다.

    설정 후 스크립트 실행


    사용자 데이터를 사용하지 않으려면 서버가 시작된 후 SSH를 통해 스크립트를 수동으로 실행할 수도 있습니다.
    로컬 컴퓨터에 스크립트를 다운로드한 경우 다음을 입력하여 SSH에 직접 스크립트를 전달할 수 있습니다.
    1. ssh [email protected]servers_public_IP "bash -s" -- < /path/to/script/file
    현재 sudo 계정으로 로그인하여 추가 설정을 할 수 있습니다.
    스크립트를 로컬 컴퓨터에 다운로드하지 않은 경우 먼저 서버의 루트 계정에 로그인하십시오.
    1. ssh [email protected]servers_public_IP
    그런 다음 서버에 원본 스크립트를 다운로드합니다.
    1. curl -L https://raw.githubusercontent.com/do-community/automated-setups/master/Ubuntu-18.04/initial_server_setup.sh -o /tmp/initial_setup.sh
    스크립트가 제대로 다운로드되었는지 확인하고 변경할 변수를 업데이트합니다.
    1. nano /tmp/initial_setup.sh
    요구 사항이 충족되면 sudo 를 사용하여 스크립트를 수동으로 실행합니다.
    1. bash /tmp/initial_setup.sh
    추가 구성을 완료하려면 활성화된 사용자 로그인 bash 을 사용할 수 있어야 합니다.

    스크립트 내용


    Digital Ocean 커뮤니티 GitHub 조직 automated-setups repository 에서 초기 서버 설치 스크립트를 찾을 수 있습니다.스크립트 컨텐트를 직접 복사하거나 다운로드하려면 스크립트 맨 위에 있는 Raw 버튼 또는 click here to view the raw contents directly 을 클릭합니다.
    여기에는 편의를 위해 전체 내용이 포함되어 있습니다.
    #!/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
    

    결론


    초기 서버 설정을 자동화하면 시간을 절약할 수 있을 뿐만 아니라 추가 설정에 좋은 기반을 다질 수 있다.다른 절차를 실행하려면 스크립트가 실행된 후에 로그인해서 수동으로 계속하거나 스크립트 끝에 이 절차를 추가하여 이 과정을 자동화할 수 있습니다.