개발놀이터

리눅스 사용자, 그룹 추가 (부제 : 리눅스 카테고리 출범!) 본문

배포/리눅스

리눅스 사용자, 그룹 추가 (부제 : 리눅스 카테고리 출범!)

마늘냄새폴폴 2024. 5. 30. 21:37

저는 현재 소규모 스타트업에서 일하고 있는데요. 회사에서 큼직하지 않은 잡다한 인프라 담당을 겸하고 있습니다. 사용자 권한 관리하고 서버 내리고 올리고 라우팅이나 포트 관리하고 이런 서버관리 업무가 제 업무에 포함되어있습니다. 

 

그러다보니 평소에 안그래도 부족했던 리눅스관련 지식이 더 티가 잘나더군요... 그래서 이번 기회에 리눅스 명령어부터 리눅스 커널에 대해서 좀 공부를 할  생각입니다. 

 

평소의 제 방식처럼 일단 사용법부터 들이박아보고 이론은 조금 시간이 지나고 배워보도록 하겠습니다. 

 

 

리눅스 사용자 추가

서버 컴퓨터는 대부분 리눅스로 되어있습니다. 보통 제가 프로젝트를 할 때는 AWS에서 제공해주는 기본 사용자를 사용하곤 했었죠. 회사에선 개발전용 사용자가 있고 루트 사용자가 있더군요. 

 

이 사용자를 생성하고 비밀번호를 만든 뒤 sudo를 이용해서 루트 사용자 권한을 부여하는 것까지 해보겠습니다. 

 

일단 AWS의 EC2를 한대 빌리겠습니다. 

 

구글링하면서 돌아다니다가 알게된 내용인데 t2 컴퓨터보다 t3 컴퓨터가 성능도 더 좋고 싸다고 하더라구요? 이걸 왜 지금알았는지... 

 

t3 중에서도 t3a가 좋다고해서 t3a.micro를 한대 빌렸습니다. 비용적인 측면으로 봤을 때 t3a가 t2보다 25퍼센트정도 더 저렴합니다. 

 

일단 실습하기 전에 간단한 개요부터 보고 넘어가도록 하겠습니다. 

 

개요

보통 서버에 들어갈 땐 ppk 혹은 pem 키를 들고 들어갑니다. ppk는 퍼블릭키, pem은 프라이빗키입니다. 리눅스는 사용자가 해당 키에 대한 정보가 없으면 서버로 들어가지 못합니다. 

 

그래서 사용자를 만들어주고 그 사용자에 키를 등록해주어야만 외부에서 접속할 때 사용자로 인식할 수 있습니다. 

 

이정도 배경지식을 알고나서 본격적으로 실습해보도록 하겠습니다. 

 

실습

일단 AWS에 등록한 pem키를 서버로 가져와줍니다. 이 pem키를 가져오는 다양한 방법이 있는데 가장 단순한 방법이 FTP를 이용하는 방법입니다. 

 

FTP는 SSL적용을 해야 조금 안심이 되긴 하지만 실습의 복잡도를 낮추기위해 SSL은 적용하지 않겠습니다. 저는 SFTP를 이용해서 파일을 서버로 옮겼습니다. 

 

번외)

안전한 방법은 AWS의 S3에서 파일을 다운로드 하는 방법이 개인적으로 안전한 방법인 것 같습니다. 하지만 보안과 효율성 사이에서 고민하면 항상 효율성을 찾게 되더라구요...

 

AWS S3에서 파일을 리눅스 서버로 옮기는 방법은 아래의 링크를 확인해주세요!

 

https://coding-review.tistory.com/454

 

데이터베이스 서버와 애플리케이션 서버를 분리해보자 : 실전3 (EC2 연결)

앞선 포스팅에서 우리는 EC2 인스턴스를 생성했습니다. 이제 우리는 EC2 인스턴스에 접속해보도록 하겠습니다. 이전 포스팅과 연결되는 포스팅입니다. https://coding-review.tistory.com/453 데이터베이스

coding-review.tistory.com

 

pem키를 서버로 옮겼다면 아래의 명령어를 입력합니다. 

 

 ssh-keygen -y -f ./{키이름}.pem

 

이 명령어를 쳤는데 WARNING!! 이렇게 뜬다면 앞에 sudo를 붙여서 실행해주세요. 

 

 sudo ssh-keygen -y -f ./key-pair-name.pem

 

이 명령어를 치면 pem키를 퍼블릭키로 바꿔줍니다. 

 

아래와 같은 결괏값을 받을 수 있습니다. 

 

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQClKsfkNkuSevGj3eYhCe53pc
jqP3maAhDFcvBS7O6Vhz2ItxCih+PnDSUaw+WNQn/mZphTk/a/gU8jEzoOWbkM
4yxyb/wB96xbiFveSFJuOp/d6RJhJOI0iBXrlsLnBItntckiJ7FbtxJMXLvvwJ
ryDUilBMTjYtwB+QhYXUMOzce5Pjz5/i8SeJtjnV3iAoG/cQk+0FzZqaeJAAHc
o+CY/5WrUBkrHmFJr6HcXkvJdWPkYQS3xqC0+FmUZofz221CBt5IMucxXPkX4r
Wi+z7wB3RbBQoQzd8v7yeb7OzlPnWOyN0qFU0XA246RA8QFYiCNYwI3f05p6KL
xEXAMPLE

 

이 값을 잘 복사해서 가지고 있으면 됩니다. 

 

그리고 adduser 명령어를 이용해서 사용자를 만들어줍니다. 

 

sudo adduser {user이름}

 

번외)

사용자가 sudo 명령어를 실행할 때 비밀번호를 입력하게 하고 싶으면 

 

sudo passwd {user이름}

 

이렇게 명령어를 날리면 비밀번호를 설정할 수 있습니다. 

 

 

이제 이 유저로 강제 로그인을 해줍니다. 

 

sudo su - {user이름}

 

이제 우리가 만든 사용자로 접속했습니다. 

 

아래의 명령어를 순서대로 치면 됩니다. 

 

mkdir .ssh

chmod 700 .ssh

touch .ssh/authorized_keys

chmod 600 .ssh/authorized_keys

 

chmod는 다음 포스팅에서 다룰 예정이라 자세한 설명은 생략하도록 하겠습니다. 파일이나 폴더에 권한을 부여한다 정도만 파악하고 계시면 됩니다. 

 

700은 해당 파일 혹은 폴더를 가지고 있는 사용자만 읽기(r), 쓰기(w), 실행(x) 권한을 부여하는 것입니다. 

 

즉, 해석하면 .ssh 폴더에 .ssh 폴더를 소유한 사용자 (우리가 만든 사용자) 에 한해서만 읽기, 쓰기, 실행 권한을 부여하고 그 아레 authorized_keys라는 빈 파일을 만든 뒤 해당 파일을 이 파일을 소유한 사용자만 읽고, 쓸 수 있는 권한을 부여하는 것입니다. 

 

700은 rwx 모두를, 600은 rw만을 부여하는 명령어입니다. 

 

번외)

  • 파일에 r 권한을 부여받지 못한 경우엔 vim같은 파일 편집기로 읽을 수 없습니다. 만약 폴더에 r 권한을 부여받지 못하면 ls같은 읽기 명령을 실행할 수 없습니다. 
  • 파일에 w 권한을 부여받지 못한 경우엔 파일을 수정하고 저장하는 :wq 같은 명령어를 실행할 수 없습니다. 만약 폴더에 w 권한을 부여받지 못하면 mkdir, rm, mv, cp 같은 쓰기 명령을 실행할 수 없습니다. 
  • 파일에 x 권한을 부여받지 못하면 쉘 스크립트 실행 명령어인 sh를 사용할 수 없습니다. 만약 폴더에 x 권한을 받지 못한다면 ls -a, ls -l 같은 실행 명령어를 실행할 수 없습니다. 

 

이제 authorized_keys를 열어서 아까 복사해둔 우리의 퍼블릭 키를 붙여넣기 하면 됩니다. 

 

vi .ssh/authorized_keys

 

그리고 이제 다시 나갔다가 우리가 만든 사용자로 로그인하면? 

 

짜잔! 로그인이 성공합니다. 

 

여기서 만약 sudo 명령어를 실행하게되면 실행이 됩니다. 

 

 

그룹추가

이제 그룹을 추가해보도록 하겠습니다. 상황을 한번 가정해볼까요? 

 

상황)

개발자들만 사용하는 폴더를 만들고싶습니다. 그래서 cat, dog를 개발자 그룹으로 넣고싶다고 가정해보죠. 

 

사용자는 위의 사용자 만들기에서 소개했으니 그룹을 만들어보겠습니다. 

 

sudo groupadd developer

 

그룹이 잘 만들어졌는지는 아래의 명령어로 확인해보면 됩니다. 

 

groups

or

vi /etc/group 안되면 sudo vi /etc/group

 

이제 그룹을 만들었으니 그룹 안에 사용자를 넣어보죠. 

 

sudo usermod -aG {그룹이름} {user이름}

우리의 예시에선

sudo usermod -aG developer cat
sudo usermod -aG developer dog

 

자 이제 아래의 명령어로 잘 들어갔나 확인해보죠. 

 

vi /etc/group 안되면 sudo vi /etc/group

 

그룹에 추가하는건 이것 이외에도 여러가지 방법이 있는데 그 중에서 잘 쓰일 것 같은 것을 소개해드리겠습니다. 

 

바로 gpasswd입니다. 

 

간단하게 사용법을 알아보죠. 

 

사용자 그룹에 추가
sudo gpasswd -a cat developer

사용자 그룹에서 삭제
sudo gpasswd -d cat developer

 

이것 말고도 그냥 /etc/group에서 직접 추가하고 삭제해도 됩니다. 

 

 

번외)

다음 포스팅에서 다룰 내용이지만 제가 미리 예습한 것을 적용해볼까합니다. 

 

바로 개발자들 폴더를 만들어서 해당 폴더는 개발자만 사용할 수 있게 권한을 부여하는 것입니다. 

 

먼저 /home으로 가보죠. 

 

cd /home

 

그리고 여기다 developer라는 폴더를 만들어줍니다. 

 

sudo mkdir developer

 

그리고 권한을 확인해보면?

 

 

d 뒤에 세개는 이 폴더를 가지고 있는 사람의 권한, 그 뒤 세개는 이 폴더를 가진 그룹의 권한, 그 뒤 세개는 그외의 그룹의 권한입니다. 

 

그리고 맨 앞에 있는 root는 해당 폴더를 소유한 사용자, 그 뒤에 있는 root는 해당 폴더를 포함한 그룹입니다. 

 

즉, 해석하자면 developer를 소유한 사용자는 rwx가 가능하고 그룹 (root)는 r-x, 그 외는 r-x입니다. 

 

자 이제 이 권한을 바꿔보겠습니다. 

 

먼저 developer를 소유한 사용자를 개발자 리더인 cat에게 부여하겠습니다. 

 

sudo chown cat developer

 

이제 그룹을 developer로 바꿔보죠. 

 

sudo chgrp developer developer

 

그리고 ls -l 명령어를 치면 이렇게 되어있을 것입니다. 

 

 

이제 권한을 바꿔보죠. 

 

sudo chmod 770 developer

 

그럼 이렇게 변합니다. 

 

 

그리고 cat으로 들어가보면?

 

잘 들어가지는 것을 확인할 수 있습니다. 

 

 

마치며

이렇게 리눅스에서 사용자를 만들고 sudo 권한까지 부여했습니다. 일단 리눅스 첫 공부로 사용자 등록을 마무리했는데 엄청 기본기치곤 꽤 헤맸습니다. 

 

다음 포스팅에선 파일, 폴더에 권한을 부여하고 더 나아가 ACL을 이용해서 관리해보도록 하겠습니다. 

 

긴 글 읽어주셔서 감사합니다. 오늘도 즐거운 하루 되세요~

 

 

출처

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/managing-users.html

 

Linux 인스턴스에서 사용자 관리 - Amazon Elastic Compute Cloud

퍼블릭 키를 연속된 한 줄에 붙여넣는지 확인합니다. 퍼블릭 키는 여러 줄로 분할되지 않아야 합니다.

docs.aws.amazon.com