클라우드는 사람을 화나게 만든다. 설정 하나 하나 사람의 발목을 붙잡는다. 특히 Linux
를 잘 모르는 사람에게는 더 엄혹하다. 당장 SELinux
만 해도 그렇다. 처음 접하는 유저가 이를 통해 얻을 수 있는 경험은 놀라움과 절망감 뿐이다. 이뿐만이랴? 설정 파일을 만지고, 패키지를 설치하는 과정(없는 패키지도 있다) 또한 만만치 않다. 하지만 걱정치 마라,
우리는 답을 찾을 것이다. 늘 그랬듯이.
원래는 Fedora
를 쓰려고 했으나 설치해보니 패키지 매니저조차 없는 완전 퓨어한 배포판이었다. 바로 지우고 CentOS Stream
으로 갔다.
언제 어디서나, 항상 가장 먼저 입력해야 할 명령어.
dnf update -y
dnf upgrade -y
useradd <username> -m
passwd <username>
usermod -G wheel <username>
root
계정은 잠궈두고 새롭게 만든 유저 계정으로 사용하면 된다.
# SSH Port 변경 (필요 시)
sed -e '/^#Port/{s/#//; s/22/80/}' -i sshd_config
# Root Login 비허용 (필요 시)
sed -e '/^PermitRootLogin/s/yes/no/' -i /etc/ssh/sshd_config
# Password Login 허용
# (이걸 안 해주면 비밀번호 로그인이 안된다.)
sed -e '/^#PasswordAuthentication/{s/no/yes/; s/#//}' -i /etc/ssh/sshd_config
# Redhat 기본 설정 및 Cloud 에서 제공하는 설정 제외
# (이걸 안 해주면 GSS 문제로 로그인이 안된다.)
sed -e '/^Include/s/^/#/' -i sshd_config
# 변경 사항 적용 (SELinux 라면 `setenforce 0` 으로 변경 후에 작업)
systemctl restart sshd
이렇게 설정해줘야 80 포트로 외부에서 ssh
로 접속할 수 있다.
dnf config-manager --set-enabled crb
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm \
https://dl.fedoraproject.org/pub/epel/epel-next-release-latest-9.noarch.rpm
이게 없으면 사용 가능한 패키지가 많이 제한된다.
Two-Factor
생성# Two-Factor 생성
dnf install google-authenticator
google-authenticator # 이 명령어 입력하고 전부 다 yes
mv .google_authenticator ~/.ssh/google_authenticator
핸드폰에 Two-Factor 앱을 아무거나 설치한다. 필자는 Google Authenticator
를 설치했다. 나머지는 아래에서 진행하면 된다.
핸드폰 앱은 화면 캡쳐가 안되기 때문에 풀어서 설명하면,
Your new secret key is:
다음 부분의 코드를 앱에서 입력하거나Two-Factor
가 생성되면 앱의 숫자를 시간 내에 입력한다.여기에서 Your emergency scratch codes
는 반드시 손으로 적어서 백업해두길 바란다. 뭐가 됐든 Two Factor
를 날리면 아예 접근할 방법이 없다.
# PAM 설정 파일 내용 추가
sed -e '/#%PAM-1.0/a\auth required pam_google_authenticator.so secret=\$\{HOME\}\/.ssh\/google_authenticator' \
-i /etc/pam.d/sshd
# ssh 설정 파일
sed -e '/^#UsePAM/{s/no/yes/; s/#//}' -i /etc/ssh/sshd_config
sed -e '$aChallengeResponseAuthentication yes' -i /etc/ssh/sshd_config
systemctl restart sshd
이걸로 인증키 대신 Two-Factor
로 로그인 할 수 있다. 인증키는 관리하기 귀찮지만 핸드폰은 언제나 들고 다니므로 훨씬 편하게 먹힌다. 그리고 너무 당연하지만 위에 보여준 예시의 코드는 필자가 그냥 임의로 만든 것이므로 이걸로 해킹을 한다거나 하는 짓은 헛수고임을 밝힌다.