리눅스 - 클라우드 머신 세팅하기 (Naver Cloud)

이 글은 네이버 클라우드에서 Server 인스턴스를 생성한 후 수행해야 할 가장 기본적인 작업인 계정 생성 및 ssh 설정을 다룬다. 이후 Docker 설치까지 진행한다.


1. Server 생성 및 인증키, 비밀번호 확인

Server 생성

그냥 하면 된다. Zone과 사양만 지정한다.

ACG 생성

그냥 하면 된다. 없으면 하나 만든다. 단순한 방화벽 설정이다.

인증키 다운로드

다운로드 하면 된다. 그냥 key다.

[StackExchange]

WSL을 사용한다면 Windows에서 cp로 WSL에 파일을 옮기고 난 후 chmod 400 $FILENAME.pem으로 적절한 권한을 줘서 보호한다.

비밀번호 확인

서버 콘솔 > 서버 관리 및 설정 변경 버튼 > 관리자 비밀번호 확인

열리는 Modal에 인증키를 업로드하면 확인할 수 있다.

포트포워딩 설정하기

모든 포트를 열어주는 게 아니라 SSH 접속 용도로만 공인 아이피를 제공한다. 1024~65535 사이의 포트는 임의로 지정할 수 있다.

  • 보통 편리하게 2222로 하는 편이다.

  • 애초에 포트포워딩을 안 하더라도 ssh 포트는 변경하는 편이다.

  • 포트 설정의 자유를 제공한 것은

    • enterprise에선 요구사항이 다양하기 때문이고,
    • 통계적으로 특정 포트로 몰리지 않기 때문인 듯하다.

서버 접속

ssh root@SERVER_IP -p PORT 로 비밀번호 방식으로 ssh 접속을 할 수 있다.

2. privatekey 기반 ssh 로그인 구성

ssh의 비밀번호 방식을 허용할 경우 Bruteforce 공격의 대상이 된다.

  • 이는 aws instance를 생성한 후 아무런 정보 없이도 공격이 매우 많이 쌓이는 것을 확인할 수 있다.

이는 임의의 매우 긴 rsa keypair를 사용한다면 공격의 비용이 매우 커지므로 효과적으로 줄일 수 있으며, 일반적인 password에 비해 key의 길이가 훨씬 더 기므로 더 안전할 것이다.

RSA 방식으로 생성된 key로 로그인하는 방식이다.

  • 서버에 publickey를 직접 등록한다. (즉, 최초의 rsa 방식의 연결 이전에 미리 서버에 접근할 수 있어야 한다.)

  • publickey 방식으로 ssh 접속한다.

    1. server에서 메시지를 publickey로 암호화한다.
    2. client에서 메시지를 privatekey로 복호화한다.
    3. client에서 메시지를 전송하고, server에서 일치 여부를 확인하고 접근을 허가한다.

[생활코딩]

1
2
3
4
5
6
7
8
9
10
11
12
13
#-----내 PC------
# 클라이언트에서 privatekey, publickey 쌍을 생성한다.
# id_rsa가 privatekey, id_rsa.pub이 publickey이다.
ssh-keygen -t rsa

#-----원격 서버------

# 본인 클라이언트에서 생성한 데이터로 파일을 생성한다.
# 굳이 파일로 만드는 이유는 cat으로 redirect하기 위함
nano id_rsa.pub

# >> 는 append의 의미이다.
cat id_rsa.pub >> ~/.ssh/authorized_keys

[StackExchange]

authorized_keys는 .ssh 밑에 있으므로 유저 한 명의 범위이다.

같은 privatekey로 여러 사용자로 접속하고 싶다면, /home/{USER}/.ssh/authorized_keys에 모두 등록해주어야 한다.

authorized_keys 등록을 하지 않고 passwordlogin을 못하게 설정하면 이후 해당 서버로는 영영 접속할 수 없게 된다.

  • 클라우드 상에서 직접 접속할 수 있는 콘솔을 제공하는 경우는 될지도 모르겠다.

3. sudo 계정 생성

네이버 클라우드로 인스턴스를 프로비저닝한 경우 계정이 따로 생성되지 않으므로 직접 생성해야 한다.

root 계정을 그냥 사용하는 경우의 단점:

  1. 과도한 권한이 있다. (모든 작업이 가능하다.)
  2. 생성한 파일 소유권이 root가 된다. (root 계정의 사용의 악순환 유발)
  3. 이름이 root이다. (공격 대상이 되기 매우 쉽다.)

계정 생성

[jhnyang]

아래 파일을 생성 즉시 곧장 실행한다면 Permission denied이 발생한다.

chmod +x ./{filename}을 수행하여, 실행 권한을 부여한 후 실행(./{filename})한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
NAME="username"
PWD="password" # 8글자까지면 상관 없음. 길면 truncate 됨.
SHELL="/bin/bash" # 배쉬 사용
ENC_PWD="$(openssl passwd -crypt $PWD)"

echo $ENC_PWD

# 보통 그룹을 이름과 같게 생성해줌
groupadd $NAME

# 사용자 추가
# 비밀번호 지정
# sudo 사용할 수 있게 수정
# 홈 디렉토리 자동 생성
useradd -p $ENC_PWD -s $SHELL -g $NAME -G sudo -m $NAME
  • 신기한 점은, home_directory를 자동으로 생성하면, /etc/skel에 있는 파일이 자동으로 복사되지 않아 ll과 같은 alias를 사용할 수 없다는 점이다. 이는 useradd에서 -m 옵션을 주면 자동으로 생성되며 파일들도 잘 복사되어 해결된다.

  • -p 옵션으로 plaintext로 비밀번호를 전달하니 해당 비밀번호로는 로그인할 수 없었다. 암호화를 적용하니 잘 됐는데, passwd로 변경 시 자동으로 암호화되는 듯하다.

계정 생성, 삭제 과정의 명령어들 모음

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 그룹 조회
cat /etc/group

# 그룹 생성
groupadd $GROUPNAME

# 그룹 삭제
groupdel $GROUPNAME (-f)

# 유저 조회
cat /etc/passwd

# 유저 생성
useradd $USERNAME

# 유저 삭제
userdel (-r) $USERNAME # -r 로 홈 디렉토리까지 제거

sudoer 등록

나중에 수동으로 sudoer에 등록하려면 간단하다.

sudo 그룹에 사용자명을 추가하면 된다.

1
2
3
nano /etc/group

sudo:x:27:user1,user2 # 여기 뒤에 사용자 명을 추가하면 된다.

기본 셸을 bash 사용하게 등록

나중에 수동으로 bash 셸을 사용하게 하려면 간단하다.

1
2
3
4
5
6
7
nano /etc/passwd

# 맨 밑 라인으로 가서,
sb:x:1001:1001::/home/sb:/bin/sh
# 에서
sb:x:1001:1001::/home/sb:/bin/bash
# 로 변경한다.

4. sshd 보안 설정

root 계정 로그인 시도 차단

1
2
3
nano /etc/ssh/sshd_config

PermitRootLogin yes # 이걸 no로 바꾸면 된다.

비밀번호 접속 차단

비밀번호 접속을 차단하지 않으면 bruteforce 공격이 매우 많이 들어오게 된다.

1
2
#PasswordAuthentication yes
# 위 주석을 제거하고 no로 변경한다.

5. Docker 및 Docker-compose 설치

[Docker Docs] [Docker Docs]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
# Engine 설치
# -y가 필요한 진 모르겠음.
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# compose 설치 (Optional)
# 최신 버전의 도커 엔진은 compose 명령세트가 포함돼서 배포되므로
# docker compose 형식으로 사용하면 되므로 굳이 설치할 필요는 없다.

# 참고로 apt install로 깔면 무슨 옛날 버전 나온다.
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

리눅스 - 클라우드 머신 세팅하기 (Naver Cloud)

https://jsqna.com/linux-new-machine-settings/

Author

Seongbin Kim

Posted on

21-08-15

Updated on

21-08-15

Licensed under

댓글