오늘 회사에서 SSH 계정 생성과 외부에서 접속할 수 있는 DB 서버의 계정을 만들어 달라고 했다. 사실 난 갖다 쓴 적 밖에 없어서 살짝 당황했으나, 구글을 믿었다. 믿음은 배신하지 않았다. 다만 시간이 오래 걸렸을 뿐
1. SSH 계정
SSH 계정 생성은 쉬웠다 root 계정으로 접속한 뒤 user를 추가했으면 됐으니까. 다만 권한이 문제였다. 권한은 통상적으로 일반 유저 권한이 보안적으로는 맞으나, 편의상 superuser 권한을 줄 때도 있기 때문이다. 하지만 난 정석대로 줬다.
1.1 계정 생성하기
계정 생성은 쉽다.
adduser [username]
해당 명령을 치면 user 생성 절차가 진행된다. 생성하고 별다른 추가 권한을 부여하지 않으면 일반 유저 권한이다.
권한을 확인하려면 아래의 명령을 치면 된다.
cat /etc/passwd
해당 명령을 치면 콘솔에 촤라락~ 많이 뜨는데 [username]:x:1001:1001... 이 부분(UID)을 확인하면 된다.
참고! UID는 권한을 의미한다
0: root
1 ~ 99: predefined
100 ~ 999 : administrative and system accounts
1000 ~: user
2. DB
DB에 접속하기 위해서는 계정이 필요하다 보통 DML, DDL, DCL 권한이 모두 있는 관리자 계정을 선호하지만, 정책상 DML과 DDL만 권한을 주기로 했다.
2.1 계정 생성
DB는 MariaDB를 사용했다. 사실 MariaDB도 처음이다. mysql과 비슷한 듯 다른 느낌인데, MariaDB 관련해서는 추후 포스팅을 해야겠다.
일단 계정을 생성하기 위해 root 계정으로 접속했다.
mysql -u root -h [hostname] -p
패스워드를 치고 접속을 완료한 뒤 계정을 생성했다
CREATE USER '[아이디]'@'[접속을 허용할 IP]' IDENTIFIED BY '[비밀번호]';
여기서 IP라고 적은 부분은 만약 로컬 환경에서만 접속가능하게 하려면 '아이디'@'localhost' 라 적으면 된다. 또는 외부 접속을 가능하게 하는 모든 외부 IP로 지으려면 '아이디'@'%'로 작성하면 된다. 물론 특정 IP를 넣어도 된다.
그 뒤 권한을 부여했다. 나는 DML과 DDL만 주고자 했으므로 아래의 명령어를 쳤다.
GRANT SELECT, INSERT, UPDATE, DELETE ON '[DATABASE]'.'[TABLE]' TO [DB 계정];
이때 DATABASE에 와일드카드(*)를 부여하면 모든 DATABASE에 대해 부여한 권한을 갖는다. 마찬가지로 TABLE에도 와일드카드를 쓴다면. 특정 DATABASE나 TABLE에만 권한 부여를 원한다면 해당 이름을 쓰면 된다. 그럼 생성한 계정을 확인해 보자.
SHOW GRANTS FOR [아이디]@[IP];
2.2 외부 접속 허용하기
사실 아까 계정을 생성할 때 '%'를 주면 끝난 줄 알았다. 아마 나 이전에 계정을 생성하신 분도 그렇게 하고 됐다고 한 거 같은데... 문제는 접속이 안됐다. 당연히 방화벽을 열었는데도 안되길래 뭐지? 싶었는데 알고 보니 ncloud에서 포트포워딩을 했어야 했다... 하고 나니 되더라... 내 소중한 시간들...
참고
1. https://hooongs.tistory.com/239
'DevOps' 카테고리의 다른 글
따라하며 배우는 도커와 CI 환경 - 1. 도커란 (0) | 2023.03.03 |
---|---|
Github Actions CI/CD 알아보기 - 1 (1) | 2023.02.24 |
배포전략 - 카나리 배포전략 (0) | 2023.02.18 |
SSH 터널링(포트 포워딩) (1) | 2023.02.04 |
[Nginx] 리버스 프록시란? (0) | 2023.01.14 |