패스워드 없이 sudo 사용으로 변경

패스워드 없이 sudo 사용으로 변경

On-premise 일 경우 – 선택사항
클라우드 환경은 보통 NOPASSWD 로 이미 설정되어 있습니다.

ubuntu$ id
uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),27(sudo),<중략..>
–> 27(sudo) 이 있음

/etc/sudoers 파일을 수정합니다
ubuntu$  sudo vi /etc/sudoers

%sudo ALL=(ALL:ALL) ALL

위의 내용을 아래 내용으로 수정 합니다

%sudo ALL=(ALL:ALL) NOPASSWD:ALL


apt repository를 kakao 로 변경

클라우드 환경 일 경우 – 선택사항

클라우드 환경은 자체 리전내 구축된 Repository 로 설정된 경우가 많습니다.
이런 경우 해당 클라우드내 설정되어 있는 Repository 를 사용하여도 됩니다.

ubuntu$ cd /etc/apt/
ubuntu$ sudo cp -rp sources.list sources.list.backup
ubuntu$ sudo vi /etc/apt/sources.list

vi 로  들어가서 아래의 명어를 통해 변경 합니다.
기존에 입력된 내용이 us 이거나 kr 일수 있어서 기존에 입력된 주소를 보시고 실행하시면 됩니다.
또는 AWS는 자체 리전내 Repository 로 설정되어 있습니다.

# AWS 일 경우
:%s/ap-northeast-2.ec2.archive.ubuntu.com/mirror.kakao.com
=> 클라우드 환경은 자체 Repository 를 사용하여도 어느정도 속도는 보장 될것으로 생각 됩니다.

# 그외 별도 설치 일 경우
:%s/us.archive.ubuntu.com/mirror.kakao.com
or
:%s/kr.archive.ubuntu.com/mirror.kakao.com


timezone 변경

OS가 설치 직후 timezone 은 UTC 로 설정되어 있습니다. 우리나라 시간과 9시간 차이가 발생하고 system timezone 을 이용하는 어플리케이션이나 데몬들의 로그 기록에도 영향을 주게 됩니다.

ubuntu$ date
Sun Oct 18 14:30:41 UTC 2020

타임존은 아래와 같이 설정을 변경 할 수 있습니다.
ubuntu$ sudo timedatectl set-timezone ‘Asia/Seoul’

변경 확인
ubuntu$ date
Sun Oct 18 23:31:24 KST 2020

timezone 등의 정보는  timedatectl  을 통해서도 할 수 있습니다

타임존이 변경 되었다면 아래와 같이 2개의 서비스를 재시작을 합니다.

ubuntu$ sudo systemctl restart cron
ubuntu$ sudo systemctl restart sshd

* 설치 타입이나 버전 등에 따라서 cron 이 설치가 안되어 있을수 있습니다.(아래에서 설치 진행을 함)


OS 방화벽 확인

 – 방화벽이 설정 / 활성화 되어있는지 확인 / 패키지 설치
ubuntu$ sudo ufw status
  => ufw 서비스 사용 여부 확인

ubuntu$ sudo ufw show raw

ubuntu$ sudo iptables -nL
  => 설정된 정책 확인


[참고] 모든 클라우드 환경이 iptables 이 설정되어 있지 않은건 아닙니다.

오라클 클라우드의 경우 Centos 나 Ubuntu 모두 OS방화벽이 기본 활성화 및 기본 차단 정책이 설정되어 있습니다.

사용하는 클라우드나 VPS 에서 iptables 사용이나 기본 룰 이 설정되어 있는지 초기에 확인 해봐야 합니다.


iptables 간단 설명

iptables 룰 정책 저장을 위한 패키지 설치

ubuntu$ sudo apt-get install iptables-persistent netfilter-persistent

-> 우분투의 iptables 는 재부팅시 내역이 초기화되기 때문에 아래 2개의 패키지를 설치가 필요합니다


특정 포트 오픈 규칙 추가( -I 가장 먼저 추가)
ubuntu$ sudo iptables -I INPUT -p tcp -m tcp –dport 8080 -j ACCEPT

특정 포트 오픈 규칙 삭제
ubuntu$ sudo iptables -D INPUT -p tcp -m tcp –dport 8080 -j ACCEPT

포트 오픈시 특정 IP(123.123.123.123) 로 만 허용
ubuntu$ sudo iptables -I INPUT -p tcp -s 123.123.123.123 –dport 8009 -j ACCEPT

위의 “포트 오픈시 특정 IP 로 만 허용” 정책 삭제
ubuntu$ sudo iptables -D INPUT -p tcp -s 123.123.123.123 –dport 8009 -j ACCEPT

정책 영구 저장
ubuntu$ sudo netfilter-persistent save


hostname 변경

ubuntu@123.123.123.123:~$

AWS 등의 클라우드에서 VM 생성시 위와 같이 IP나 특정 Tag 명등의 식별자로 호스트네임이 설정되는 경우가 있습니다.

이럴 경우 사용자가 원하는 hostname 으로 변경 하여 사용하여도 됩니다.

여기서는 hoing 으로 설정 해보도록 하겠습니다.
ubuntu$ sudo hostnamectl set-hostname hoing
ubuntu$ sudo cat /etc/hostname
hoing


= 즉시 반영 수행, 다음 명령어 수행 이후 재접속 하면 변경된 호스트 명으로 확인 됩니다.
ubuntu$ sudo hostname -F /etc/hostname


AWS 클라우드 환경에서는 재부팅하게 되면 설정이 원복 될수도 있습니다.
먼저 /etc/cloud/cloud.cfg 파일이 있는지 확인 합니다.
ubuntu$ ls -al /etc/cloud/cloud.cfg


있다면 cloud.cfg 안에 preserve_hostname 설정을 변경 합니다.
 
ubuntu$ sudo vi /etc/cloud/cloud.cfg
preserve_hostname : true
                  false => true  로 변경


/etc/hosts 에 호스트 추가
ubuntu$ ifconfig -a
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9001
inet 123.123.123.123 <——
<중략>


ubuntu$ sudo vi /etc/hosts

123.123.123.123 WMP
   <== 내용 입력

* IP 와 호스트네임 명칭은 예시입니다.


rc.local 활성화

booting을 하면서 스크립트나 명령어등이 같이 수행되도록 하는 방법에는 여러가지가 있습니다.
그 중에서 가장 쉽게 빠르게 할 수 있는 방법이 /etc/rc.local 을 사용 하는 것이기도 합니다.


= 파일을 생성 후 아래와 같이 입력 합니다.
ubuntu$ sudo vi /etc/rc.local
#!/bin/bash

touch /tmp/test


* touch /tmp/test  이부분은 서비스가 정상적으로 실행 되는지를 확인 해보기 위해서 추가한 내역으로 서비스가 정상적으로 실행되었고 /etc/rc.local 이 수행되었다면 /tmp 아래 test 라는 파일이 생성될 것입니다.

파일 생성 여부로 해당 작업의 정상 유무를 확인 할 수 있습니다.


= 퍼미션 권한 부여
ubuntu$ sudo chmod 755 /etc/rc.local


= rc-local.service 파일 수정
ubuntu$ sudo vi /lib/systemd/system/rc-local.service

[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no


위의 내용이 기존에 존재하는 내용입니다
아래 [Install] 부분을 추가 합니다

[Install]
WantedBy=multi-user.target


===== 추가 하게 되었을 때 내용 =======
RemainAfterExit=yes
GuessMainPID=no

[Install]
WantedBy=multi-user.target
===== 추가 하게 되었을 때 내용 =======


= 서비스 enable 및 시작 
ubuntu$ sudo systemctl enable rc-local
Created symlink /etc/systemd/system/multi-user.target.wants/rc-local.service → /lib/systemd/system/rc-local.service.

ubuntu$ sudo systemctl start rc-local.service


= 테스트 파일 생성 여부 확인
ubuntu$ ls -al /tmp
-rw-r–r– 1 root root 0 Oct 20 15:28 test


= touch 명령어 부분 삭제 
ubuntu$ sudo vi /etc/rc.local

touch /tmp/test <== 삭제합니다.


transparent hugepage 비활성화

transparent hugepage 기능은 hugepage 와 관련된 자동적 활성화 기능으로 자세한 내용은 이전의 포스팅을 참조하시면 됩니다.

Transparent Huge Pages 기능 비활성화

Transparent Huge Pages 기능Linux는 메모리에 대한 관리를 Pages 단위로 관리/사용되고 있고 기본 페이지는 4096바이트(4K)로 고정되어 있습니다.1GB의 메모리는 256,000개의 page로 구성되어있는 것이고 이러한 페이지는 메모리 크기가 늘어


= 현재 설정 내역 조회
ubuntu$ sudo cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
* madvise 로 되어 있을수도 있습니다.



ubuntu$ sudo apt install hugepages -y
ubuntu$ sudo hugeadm –thp-never
ubuntu$ sudo cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]


= 재부팅시 다시 활성화를 방지하기 위해서 위에서 활성화한 /etc/rc.local 을 활용하여 명령어가 실행 되도록 하겠습니다.추가ubuntu$ sudo /bin/sed -i ‘$i /usr/bin/hugeadm –thp-never’ /etc/rc.local


확인
ubuntu$ cat /etc/rc.local
#!/bin/bash

/usr/bin/hugeadm –thp-never


SWAP 추가

우분투의 경우 기본 swap 이 설정이 안되어 있는 경우가 많습니다.

AWS 클라우드도 그렇고 다른 프리티어 서비스에서 제공되는 VM의 메모리가 크지 않기 때문에 사용하다보면 어쩔수 없이 메모리가 부족한 상황이 발생되게 됩니다.

그러다 보면 부족한 메모리에 의해서 Page IN/OUT 처리가 되어야 하고 그에 따라서 kswapd0 프로세스가 바쁘게 동작하여 높은 CPU 사용율을 보이거나 과점 하는 상황도 발생 하게 됩니다.
과점하는 상황까지 되면 VM 이 다운이 되거나 응답하지 않는 다고 느낄 정도로 아주 매우 느린 상황이 되기도 합니다.
그래서 이런 상황이나 현상을 방지 하기 위해서 SWAP 을 사용하는 것이 더 좋은 성능과 안정성을 확보 할 수 있습니다.

우분투에서 SWAP 은 아래와 같은 절차로 생성 및 설정 할 수 있으며 포스팅에서는 4GB 용량으로 설정 하였습니다.

1) swap 파일의 생성
sudo fallocate -l 4GB /swapfile

2) 권한 변경
sudo chmod 600 /swapfile

3) Swap 영역으로 변경
sudo mkswap /swapfile

4) Swap을 사용하도록 설정
sudo swapon /swapfile

5) 영구적 사용
영구적으로 사용하고자 할 때에는 /etc/fstab 을 수정하여 마운트 내용을 설정 해야 합니다.

sudo vi /etc/fstab

## 아래 내용을 입력

/swapfile swap swap defaults 0 0

커널 파라미터 변경

swappiness 확인

ubuntu$ cat /proc/sys/vm/swappiness
60

현재 테스트 및 사용한 환경에서는 swappiness가 60 으로 설정되어 있습니다
(보통의 경우가 default가 60입니다)

현재 프리티어 사용중으로 메모리가 많지 않으니 최대한 swap 사용을 하지 않도록 수치를 낮추도록 하겠습니다.

그외 커널파미터는 네트워크 tcp send/receive buffer Asyc I/O  동시 요청 수 사용 가능한 파일 핸들의 사용 수 를 추가로 늘려 준 내역 입니다.


커널 파라미터 변경
ubuntu$ sudo vi /etc/sysctl.conf

vm.swappiness = 1
net.core.rmem_max=56777216
net.core.rmem_default=16777216
net.core.wmem_max=56777216
net.core.wmem_default=16777216
net.ipv4.tcp_window_scaling=1
net.core.netdev_max_backlog=2500
fs.aio-max-nr=1048576
fs.file-max = 6815744


파일 저장 후 커널 파라미터 적용
ubuntu$ sudo sysctl -p


swappiness 확인
ubuntu$ cat /proc/sys/vm/swappiness
1
            

user ulimit 설정 변경

limits.conf 파일을 수정하여 ulimit 을 설정 합니다.

ubuntu$ sudo vi /etc/security/limits.conf


apache hard nofile 65536
apache soft nofile 65536
apache soft nproc 16384
apache hard nproc 16384

nginx hard nofile 65536
nginx soft nofile 65536
nginx soft nproc 16384
nginx hard nproc 16384

mysql hard nofile 65536
mysql soft nofile 65536
mysql soft nproc 16384
mysql hard nproc 16384


* 유저명이나 ulimit 추가 내역은 수정/추가 하여도 됩니다.
* nproc : User당 사용할 수 있는 프로세스 최대 개수
* nofile : User당 오픈할 수 있는 파일 개수
                  

패키지 설치 관련

패키지 최신화

초기 설치 시 이후 패키지를 최신화 하려면 upgrade 를 실행하면 됩니다.
ubuntu$ sudo apt update
ubuntu$ sudo apt upgrade -y

다수의 패키지 등이 설치가 되기 때문에 패키지 별로 최신화 및 설치를 진행하려면 update 만 수행하고 upgrade 를 진행 하지 않으면 됩니다.


패키지 추가 설치

ubuntu$ sudo apt update

ubuntu$ sudo apt install vim unzip zip git \
tree build-essential openjdk-8-jdk rsync \
python3.8 python3.8-dev python3.8-dbg \
python3-pip software-properties-common \
rsyslog rdate cmake nano iputils-ping net-tools \
cron telnet -y


[software-properties-common]
–> 일반적으로 우분투 소프트웨어 센터에서 다운로드 받을수 있는 각종 패키지의 버전들은 최신의 것들이 아닙니다 
그렇기 때문에 PPA(Personal Package Archive)를 통해 최신 버전 들을 다운로드 할 수 있습니다.
PPA 사용하기 위한 필요 패키지 입니다


[참고] 리눅스 VM 컴퓨트 설치 후 SSH 보안 설정 및 보안 툴을 설치 않았다면 fail2ban 포스팅을 참조하시면 됩니다

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다