Amazon Linux 2023 서버에 리눅스 유저 추가하기
안녕하세요.
이번 블로그에서는 Amazon Linux 2023 서버에 리눅스 유저를 추가해보겠습니다.
인스턴스의 생성
먼저 작업을 위해 서버를 작성합니다.
- 인스턴스 이름: add-user
- OS: Amazon Linux 2023
- 인스턴스 유형: t2.micro
- 키페어: add-user
- 세큐리티 그룹
- 유형-SSH, port-22, 소스-내IP
- 네트워크 설정: (생략)
1. 리눅스 유저 (키페어)
먼저 키페어를 사용해서 로그인할 수 있는 리눅스 유저를 생성해보겠습니다.
해당 작업은 다음 페이지를 참고했습니다.
키페어의 생성
먼저 추가할 유저를 위한 키페어를 생성합니다.
- 키페어 이름: add2-user
- 키페어 타입: RSA
- 프라이빗 키 파일 형식: .pem
키페어의 퍼블릭키 취득하기
키페어를 생성했으면 프라이빗키가 다운로드 되었을 겁니다.
그 프라이빗키를 사용해서 퍼블릭 키를 취득합니다.
# 프라이빗키의 파일 접근 권한 설정
> chmod 400 [키페어 경로]/add2-user.pem
# 퍼블릭키 취득
> ssh-keygen -y -f [키페어 경로]/add2-user.pem
# (퍼블릭키의 일부분은 x로 대체)
ssh-rsa AAAAB3Nzaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
인스턴스에 로그인
먼저 인스턴스에 로그인합니다.
> ssh -i [키페어 경로]/add-user.pem [email protected]
, #_
~\_ ####_ Amazon Linux 2023
~~ \_#####\
~~ \###|
~~ \#/ ___ https://aws.amazon.com/linux/amazon-linux-2023
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
[ec2-user@ip-yy-yy-yy-yy ~]$
리눅스 유저 생성
새로운 유저를 생성합니다.
$ sudo adduser newuser
그 후에 생성한 유저로 로그인해서 키페어(퍼블릭키)를 설정합니다.
[ec2-user@ip-yy-yy-yy-yy ~]$ sudo su - newuser
# 로그인하게 되면 다음과 같이 앞의 이름이 변경됩니다. ec2-user -> newuser
[newuser@ip-yy-yy-yy-yy ~]$
# SSH 키 파일에 대한 폴터를 생성 및 권한 설정을 합니다.
[newuser@ip-yy-yy-yy-yy ~]$ mkdir .ssh
[newuser@ip-yy-yy-yy-yy ~]$ chmod 700 .ssh
[newuser@ip-yy-yy-yy-yy ~]$ touch .ssh/authorized_keys
[newuser@ip-yy-yy-yy-yy ~]$ chmod 600 .ssh/authorized_keys
# .ssh/authorized_keys 파일에 퍼블릭키를 저장합니다.
[newuser@ip-yy-yy-yy-yy ~]$ vim .ssh/authorized_keys
# 내용 입력 후 저장 방법: esc -> :wq 입력 후 엔터
# 저장 내용 확인
[newuser@ip-yy-yy-yy-yy ~]$ cat .ssh/authorized_keys
ssh-rsa AAAAB3Nzaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
생성 확인 및 접속 테스트
로그인 확인을 해보겠습니다.
ec2-user
로 로그인한 인스턴스에서 로그아웃(exit
)한 후에 newuser
로 다시 로그인해보면 성공적으로 로그인되는 걸 확인할 수 있습니다.
> ssh -i [키페어 경로]/add2-user.pem newuser@xx-xx-xx-xx
, #_
~\_ ####_ Amazon Linux 2023
~~ \_#####\
~~ \###|
~~ \#/ ___ https://aws.amazon.com/linux/amazon-linux-2023
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
Last login: Mon Jul 8 08:39:38 2024
[newuser@ip-yy-yy-yy-yy ~]$
다음 명령어를 통해 리눅스에서 생성하고 있는 유저도 확인할 수있습니다.
블로그에서 생성한 newuser
도 추가되어 있습니다.
[newuser@ip-yy-yy-yy-yy ~]$ grep /bin/bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
ec2-user:x:1000:1000:EC2 Default User:/home/ec2-user:/bin/bash
newuser:x:1001:1001::/home/newuser:/bin/bash
2. 리눅스 유저 (비밀번호)
이번에는 키페어가 아니라 비밀번호로 입력해서 로그인하도록 하는 유저로 작성을 해보겠습니다.
인스턴스에 로그인
먼저 인스턴스에 로그인합니다.
> ssh -i [키페어 경로]/add-user.pem [email protected]
, #_
~\_ ####_ Amazon Linux 2023
~~ \_#####\
~~ \###|
~~ \#/ ___ https://aws.amazon.com/linux/amazon-linux-2023
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
[ec2-user@ip-yy-yy-yy-yy ~]$
리눅스 유저 생성
먼저 유저를 생성하고 비밀번호를 설정합니다.
# 유저 생성
$ sudo adduser newuser2
# 비밀번호 설정
$ sudo passwd newuser2
Changing password for user newuser2.
New password: (비밀번호 입력)
Retype new password: (비밀번호 한 번 더 입력)
passwd: all authentication tokens updated successfully.
로그아웃하고 로그인을 해보면 에러가 발생합니다.
비밀번호 설정까지 했지만 이것만으로는 아직 사용할 수 없습니다.
> ssh [email protected]
# 에러 발생
[email protected]: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
그렇기 때문에 인스턴스에서 PasswordAuthentication
설정을 변경해겠습니다.
다시 ec2-user 유저로 인스턴스에 로그인합니다.
$ sudo vi /etc/ssh/sshd_config
# PasswordAuthentication no -> yes 로 변경
# 설정 적용을 위해 sshd 재기동
$ sudo systemctl restart sshd
이걸로 비밀번호 입력을 통해서도 리눅스에 접속할 수 있도록 설정했습니다.
생성 확인 및 접속 테스트
이제 모든 설정이 끝났으니 접속테스트를 해보겠습니다.
인스턴스에서 로그아웃하고 newuser2로 SSH접속을 합니다.
> ssh [email protected]
[email protected]'s password: (비밀번호 입력)
, #_
~\_ ####_ Amazon Linux 2023
~~ \_#####\
~~ \###|
~~ \#/ ___ https://aws.amazon.com/linux/amazon-linux-2023
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
[newuser2@ip-yy-yy-yy-yy ~]$
이번에도 리눅스 유저를 확인해보면 아까와 달리 newuser2
가 추가된 것을 확인할 수 있습니다.
[newuser@ip-yy-yy-yy-yy ~]$ grep /bin/bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
ec2-user:x:1000:1000:EC2 Default User:/home/ec2-user:/bin/bash
newuser:x:1001:1001::/home/newuser:/bin/bash
newuser2:x:1002:1002::/home/newuser2:/bin/bash
번외1) 필요없어진 유저 삭제
이번에는 필요 없어진 유저를 삭제해보겠습니다.
명령어를 실행하고 현재 유저를 확인해보면 성공적으로 삭제 되어있습니다.
# 삭제하는 유저 이름: newuser
$ sudo userdel -r newuser
# 유저 확인
$ grep /bin/bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
ec2-user:x:1000:1000:EC2 Default User:/home/ec2-user:/bin/bash
newuser2:x:1002:1002::/home/newuser2:/bin/bash
번외2) 생성한 유저에서 sudo 기능 사용할 수 있게 설정하기
위에서 만든 유저 (newuser
, newuser2
) 에서는 sudo 기능을 사용할 수 없습니다.
예를 들어 ec2-user
에서는 sudo 를 사용할 수 있기 때문에 root
유저 계정으로 전환하는 명령어가 잘 실행됩니다.
[ec2-user@ip-yy-yy-yy-yy ~]$ sudo -i
[root@ip-yy-yy-yy-yy ~]#
하지만 newuser2
로 실행하면 다음과 같이 비밀번호 입력칸이 나오고, 입력을 하면 다음과 같이 sudoers 파일에 newuser2
유저가 없다라는 결과가 출력됩니다.
이 결과를 통해 sudo 를 사용하려면 sudoers 파일에 유저를 등록해야 한다는 걸 알 수 있습니다.
[newuser2@ip-yy-yy-yy-yy ~]$ sudo -i
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
For security reasons, the password you type will not be visible.
[sudo] password for newuser2: (비밀번호 입력)
newuser2 is not in the sudoers file.
sudo 파일 수정
그러면 실제로 /etc/sudoers
파일에 유저를 등록해보겠습니다.
# 이 작업은 sudo 권한을 가지고 있는 유저만 할 수 있으니 ec2-user에서 실행합니다.
$ sudo visudo
# 일부 내용 발췌
########## (⭐️⭐️ 사이에 있는 내용을 추가하고 저장합니다.)
...
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
⭐️⭐️newuser2 ALL=(ALL) ALL⭐️⭐️
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LO>
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
...
##########
# /etc/sudoers 파일 저장 방법 헷갈릴때는 ↓ 참고
</etc/sudoers 파일 변경 할 때 순서>
Ctrl + X 눌러서 Y 입력
파일 이름이 /etc/sudoers.tmp
를 /etc/sudoers
로 변경 후에 엔터
Y 입력
Y 입력을 하면 저장 완료!
파일 저장 끝나고 확인을 해보면 다음과 같이 root
유저로 전환이 잘 되게 됩니다.
[newuser2@ip-yy-yy-yy-yy ~]$ sudo -i
[sudo] password for newuser2: (비밀번호 입력)
[root@ip-yy-yy-yy-yy ~]#
wheel 그룹에 넣기
아니면 파일을 수정할 필요도 없이 사용자 그룹에 넣는 방법도 있습니다.
이미 ec2-user
유저가 포함되어 있는 사용자 그룹 wheel
이 있기 때문에 newuser2
를 wheel
에 넣어서 sudo 사용가능하게 설정해보겠습니다.
먼저 어떻게 설정되어 있는지 확인해겠습니다.
# 유저가 소속되어 있는 그룹 확인
$ groups ec2-user
ec2-user : ec2-user adm wheel systemd-journal
$ groups newuser2
newuser2 : newuser2
# 반대로 사용자 그룹에 포함되어 있는 사용자 확인
$ getent group wheel
wheel:x:10:ec2-user
wheel
그룹에는 ec2-user
만 들어가 있습니다.
newuser2
를 넣어보겠습니다.
$ sudo usermod -aG wheel newuser2
이제 다시 한 번 확인 해보면 newuser2
가 wheel
그룹에 포함되었습니다.
# 유저가 들어가 있는 그룹 확인
$ groups newuser2
newuser2 : newuser2 wheel
# wheel 그룹에 들어가 있는 유저 확인
$ getent group wheel
wheel:x:10:ec2-user,newuser2
그럼 확인해보겠습니다.
# 실행 전에 한번 로그아웃(exit) 하고 다시 로그인해주세요 (변경 적용을 위해)
[newuser2@ip-yy-yy-yy-yy ~]$ sudo -i
[sudo] password for newuser2: (비밀번호 입력)
[root@ip-yy-yy-yy-yy ~]#
+ root 전환할 때 비밀번호 입력하고 싶지 않다면
여기까지 되었으면 sudo 명령어를 문제 없이 사용할 수 있게 되었습니다.
근데 newuser2
는 root
유저로 전환할 때마다 비밀번호를 입력해야 되는게 귀찮으신가요?
[sudo] password for newuser2:
그러면 이번에 비밀번호 입력없이 바로 전환되도록 해보겠습니다.
$ sudo visudo
# 일부 내용 발췌
########## (⭐️⭐️ 사이에 있는 내용을 추가하고 저장합니다.)
...
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LO>
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
⭐️⭐️newuser2 ALL=(ALL) NOPASSWD: ALL⭐️⭐️
...
##########
다시 테스트 해보면 비밀번호 입력하라는 게 사라지고 바로 root로 전환이 되었습니다!
[newuser2@ip-yy-yy-yy-yy ~]$ sudo -i
[root@ip-yy-yy-yy-yy ~]#