우분투 root 계정설정 가이드

우분투 root 계정설정 가이드

리눅스 배포판을 설치하고나서 기본적으로 하면 좋은 설정들이 있다. 이러한 설정을 하는 이유에는 여러가지가 있겠지만 보안적인 측면 그리고 쉬운 관리 및 더 나은 사용성을 위해서 하는 세팅을 정리해보자.

개별 머신을 가지고 연습해보는 게 제일 좋겠지만 클라우드 플랫폼의 홍수 속에서 사는 만큼 그 이점을 활용하고자 AWS의 프리티어를 이용할 계획이다.

1. 루트계정(root) 비활성화

root / ec2-user 와 같은 유저는 모든 권한을 가지고 있는 계정이다. 일반적인 경우 root계정을 비활성화 시켜놓고 root권한을 가진 사용자계정을 새로 만들어 사용한다. AWS를 통해서 사용하고 있는 게 아니라면 root 권한을 가진 새로운 계정을 만든 후 root 계정을 비활성화 하고 AWS를 사용하고 있다면 ec2-user 또는 ubuntu 계정을 비활성화 하면 된다.

AWS을 사용한다면…

pem키를 통해서 ubuntu 계정으로 로그인하기 때문에 새로운 계정만 생성해서는 로그인을 할 수 없다. 아래와 같은 세 가지 과정을 거쳐야 한다.

  1. 로그인에 사용할 새로운 계정 생성
  2. pem키 재매핑(ssh-key 이전)
  3. ubuntu 계정 삭제 또는 비활성화
로그인 후 root 계정으로 전환

AWS의 경우 root 계정의 비밀번호가 설정되어 있지 않기 때문에 비밀번호 지정 후 이어나가야 한다.

1
sudo passwd root
새로운 계정 생성

root의 패스워드를 지정했다면 root로 계전 전환 후 새로운 계정을 만든다.

1
adduser <newUser_id>
pem키 이전

ubuntu 계정으로 로그인 할 때 처럼 pem를 이용하기 위해서 이전을 시켜준다.

1
2
3
4
5
6
7
8
# 새로운 계정의 홈 폴더 아래에 .ssh 폴더 생성
mkdir /home/<newUser_id>/.ssh

# ubuntu 계정의 .ssh 폴더를 새로운 계정으로 복사
cp /home/ubuntu/.ssh /home/<newUser_id>/

# 소유자 변경
chown -R <newUser_id>:<newUser_id> /home/<newUser_id>/.ssh
재시작
1
service sshd restart

지금부터 새로운 계정으로 pem키를 이용하여 로그인할 수 있을것이다. 하지만 sudo 명령어를 통해서 root 권한을 얻으려하면 에러가 발생하게된다. sudo 명령어를 사용할수 있게 만들기 위해서 sudoer 파일을 수정해주어야 한다.

아마도 _ is not in the sudoers file. This incident will be reported._ 이라는 에러가 발생할 것이다.

sudoers 파일 수정

sudoers 파일이란 sudo 명령어에 대한 설정을 하는 파일이며 sudo 명령어를 사용할 수 있는 계정을 지정할 수 있다. 파일의 위치는 /etc 폴더 아래에 있다(/etc/sudoers)

1
2
3
4
5
# vi /etc/sudoers

# User privilege specification
root ALL=(ALL:ALL) ALL
example ALL=(ALL:ALL) ALL

root 아래에 새로운 계정명과 권한을 추가해 주면 된다

ubuntu 계정 삭제

계정과 홈 디렉토리를 삭제하기 위해 -r 옵션을 부여한다.

1
deluser -r ubuntu
완료

지금까지 문제없이 잘 왔다면 기본유저 삭제 및 root 권한을 가질 수 있는 새로운 유저를 생성할 수 있다. 보안을 위해서 기본유저는 사용하지 말도록 하고 꼭 위와 같은 작업을 하는 것을 추천한다!


<참고>

https://blog.outsider.ne.kr/505

http://love0and0hate.blogspot.com/2017/01/linux-aws-ec2-user-ssh-key.html

https://uroa.tistory.com/100

https://blog.shako.net/ubuntu-server-16-04-initial-setup-guide/

Share

mac에 postgresql 설치하기

how to install postgresql on macOS

갑자기 psql를 업데이트하고 싶었다. 기존에 9.6버전을 사용하고 있었고 homebrew을 통해 업데이트 하려고하니 11버전으로 갈 수 있다고 한다. 그래서 업데이트를 했고 결과적으로 실패했다.. 덕분에 크리티컬하진 않지만 이전에 사용하던 것을 지우고 다시 설치를 했고 그 과정을 정리해본다.

macOS를 사용중이라면 homebrew를 통해서 수월하게 설치할 수 있다.

주의

psql를 upgrade한 뒤 이전의 DB를 migration 하는 과정이 아닌 새로 설치하는 과정이다. 업그레이드가 아닌 점을 분명히하자!!

설치과정

기존 psql 삭제
1
brew uninstall --force postgresql
psql 관련 파일 삭제
1
rm -rf /usr/local/var/postgres

이전에 brew를 통해서 psql을 설치했다면 위와 같은 경로에 관련 파일들이 위치해있을 것이다. 기존에 있던 psql에 대한 관련 파일이므로 같이 삭제하도록하자.

만약 brew uninstall 후 관련 파일 삭제를 하지 않고 다시 brew install을 하게 된다면 기존에 있던 파일들로 인해서 제대로 동작하지 않을 수도 있다.

psql 설치
1
brew install postgres
서버 실행
1
pg_ctl -D /usr/local/var/postgres start
DB 생성
1
initdb /usr/local/var/postgres

때에 따라서 DB를 생성하는 과정에 아래와 같은 에러가 발생할 수 있다.

initdb: directory “/usr/local/var/postgres” exists but is not empty
If you want to create a new database system, either remove or empty
the directory “/usr/local/var/postgres” or run initdb
with an argument other than “/usr/local/var/postgres”.

이미 DB가 존재하며 empty하지 않기 때문에 생긴 에러이다. 삭제하고 다시 생성하면 되는 간단한 이슈이다.

old db 삭제
1
rm -r /usr/local/var/postgres
다시 DB 생성 시도
1
2
3
initdb /usr/local/var/postgres
# 또는
initdb /usr/local/var/postgres -E utf8
테스트 DB 생성
1
createdb test
psql 콘솔 접속 및 확인
1
psql test

<참고>
https://medium.com/@Umesh_Kafle/postgresql-and-postgis-installation-in-mac-os-87fa98a6814d

Share

sed 명령어와 -i 옵션으로 파일내용 수정하기

명령어 sed

하이퍼레저 패브릭을 하다보면 쉘 스크립트를 수정해야 할 일들이 꽤나 많다. 그 중에 하나가 정식의 CA 서버를 건너뛰고 certificate 를 생성해 주는 부분인데 이 때에 sed 명령어를 사용하는 스크립트들이 굉장히 많다.

예시
1
sed -i "s/DEVORG_CA_PRIVATE_KEY/${PRIV_KEY}/g" docker-compose-e2e.yaml
사용법

파일 내용을 수정할 때 사용한다. cat과 파이프라인을 통해서 할 수도 있지만 꽤 손이 많이 가는 작업이기 때문에 sed를 이용하여 간단하게 수정 할 수 있다.

sed 명령어는 ed 명령어와 grep 명령어(필터링 기능)의 일부 기능을 합친 것이라고 한다.(sed는 Stream EDitor의 약자이다)

활용

sed 명령어를 이용하여 파일 내용의 문자를 수정해보자.

1
2
3
4
# test.txt
abcde
fgh
231

일단 테스트를 위해 영문 알파벳과 숫자를 내용으로 하는 test.txt 텍스트 파일을 생성했다.

abcde 문자열을 숫자로 바꾸어보자.

1
2
3
4
5
6
sed 's/abcde/12321/' test.txt

# 출력
12321
fgh
231

파일을 확인해보면 내용은 변하지 않은채 쉘에 출력만 해줄뿐이다. 어떻게 해야지 실제로 파일 내용을 수정할 수 있는 걸까? -i 옵션을 사용해야지 출력이 아닌 실제 파일에 수정사항을 반영할 수 있다.

1
sed -i 's/abcde/12321/' test.txt

ubuntu나 centos같은 리눅스에서 사용한다면 별다른 출력과 에러 없이 제대로 동작하는 것을 볼 수 있다. 하지만 macOS를 사용하고 있다면 undefined label과 같은 에러가 발생하는데 이는 macOS에서 사용하는 sed가 다른 리눅스에서 사용중인 sed와는 다르기 때문이다.

간단하게 말하자면 각 리눅스 배포판에서 사용하고 있는 소프트웨어의 차이로 인해서 발생하는 문제이다. macOS의 경우 man을 통해서 명령어를 살펴보면 맨 윗줄에서 아래와 같은 결과를 볼 수 있다.

1
2
3
4
5
# sed 매뉴얼 출력
man sed

# 결과
SED(1) BSD General Commands Manual SED(1)

BSD 계열의 소프트웨어라는 의미이다. 하지만 ubuntu나 centos에서 똑같이 테스트하게 되면 다른 결과를 볼 수 있다.

1
2
3
4
5
6
7
8
9
# sed 매뉴얼 출력
man sed

# 또는 그냥 입력
sed

# 결과
GNU sed home page: <https://www.gnu.org/software/sed/>.
General help using GNU software: <https://www.gnu.org/gethelp/>.

잘은 모르겠지만 우분투의 sed는 GNU sed라는 것을 알 수 있다.

다시 정리하자면 BSD와 GNU 소프트웨어의 차이로 인해서 발생한 에러라는 것이다!!

macOS에서 GNU sed를 사용하려면 아래와 같은 작업을 해주면 된다.

1
2
3
# mac에서 GNU's sed 설치
# --with-default-names 옵션은 기존의 sed이름으로 gnu-sed를 사용하겠다는 의미
brew install gnu-sed --with-default-names
Share