Nginx - HTTPS and Certificate SSL
Nginx를 HTTPS를 사용할 수 있도록 사설 인증서와 그리고 공인 인증서를 이용해 SSL을 활성화 하는 과정을 정리했다.
Nginx 설치와 서버, 프락시 등의 사용 방법에 대해서는 Nginx on Ubuntu/Debian 문서를 참조한다.
Nginx - HTTPS and Certificate SSL
Nginx를 HTTPS를 사용할 수 있도록 사설 인증서와 그리고 공인 인증서를 이용해 SSL을 활성화 하는 과정을 정리했다.
Nginx 설치와 서버, 프락시 등의 사용 방법에 대해서는 Nginx on Ubuntu/Debian 문서를 참조한다.
Ubuntu/Debian Basic Security settings
리눅스 시스템을 설치후 기본적인 보안 설정과 도구를 사용하는 과정을 정리했다.
사용자 로그인에 제약을 두고, 원격 접속에 대해서 방화벽과 sshd 보안을 강화한다.
일반적인 리눅스 배포본의 방화벽인 ufw` 를 사용해서 리눅스에 방화벽을 구축하는 방법을 기술하고 있다.
- 2019-12-10: 정리
- 2017-09-10: Log, export 추가서
{:.right-history}
여기서 사용, 테스트한 리눅스 배포본은 Ubuntu 14.04, 15.04, 16.04 계열에서 동작하리라 믿는다. 실제 Raspbian Weezy, Jessie, Armbian Ubuntu 16.04, Debian Jessie 에서 사용중이다.
2023-10 add pysical volume to vg
2018-09-19 when umount, device busy!
2018-06-23 mount 명령
{: history-right}
LVM2 를 사용해 물리 disk를 논리 disk로 분할/합병/관리 하는 과정을 조금 정리한 것이다.
SBC보드인 Odorid C2에 USB Memory를 사용해서 리눅스의 LVM을 이용하고 있다. 여기서는 LVM 설정에 대해서만 다루고 있다.
Single board computer 종류의 보드는 주 디스크로 SD Card, eMMC 를 사용하고, USB 메모리 등은 디바이스 장치로 /dev/sd* 이름으로 접근할 수 있다.
Nginx - Install, WebDAV, Proxy on Ubuntu/Debian
nginx를 사용해서 일반 웹 서비스, SSL, WebDav 서비스와 다른 외부 웹 서비스와 연동하는 설정을 해보자.
node.js 애플리케이션을 연동한다.우분투/데비안 계열에서 apt-get install 명령으로 설치한다.
1 | # apt update && apt dist-upgrade && apt upgrade |
업그레이드 중
1 | The following packages have been kept back: linux-image-c2 |
기존 리눅스 이미지를 지우고 업그리이드 중 에러가 나서 이미지 업그레이드가 안되었으므로, 이전 버전 이미지를 찾아 삭제해 주면 다시 업그레이드가 된다.
1 | # apt --installed list |grep linux |
이전 버전 이미지를 지운다. 업그레이드 후 uname 확인
1 | root@odroid64:~# apt autoremove linux-image-3.14.65-73 |
debian 계열에서 hostname을 변경하려면 hostnamectl 을 사용한다.
1 | $ sudo -s |
CLI에서 설정을 할 수 있다.
1 | # dpkg-reconfigure tzdata |
timedatectl timedatectl 명령으로
1 | $ timedatectl list-timezones |
혹은 손으로 직접 수정한다면, Timezone은 /etc/localtime 이라는 바이너리로 저장되므로
명령행에서 지원하는 timezone을 복사할 수 도 있다.
1 | $ sudo cp /usr/share/zoneinfo/Europe/London /etc/localtime |
odroid의 ubuntu 16.04는 기본에디터로 joe가 설치되어 있다. vim 으로 변경한다.
1 | # update-alternatives --config editor |
bash-completion 이 빠져 있으면
1 | $ sudo apt install bash-completion |
apt-get 명령은 자동완성이 되지만 apt 명령은 안된다면
1 | $ sudo apt install --reinstall bash-completion |
dig, nslookup 같은 명령이 있는 패키지.
1 | $ sudo apt install dnsutils |
fsck로 마지막 체크한 시간 확인은 tune2fs 명령을 이용
1 | $sudo tune2fs -l /dev/sdbX | grep Last\ c |
마운트 횟수
1 | tune2fs -l /dev/sdbX | grep Mount |
1 | tune2fs -l /dev/sdbX | grep Max |
참조: https://linuxconfig.org/how-to-force-fsck-to-check-filesystem-after-system-reboot-on-linux
루트 파티션을 강제로 fsck 하게 하려면 루트 파티션에 forcefsck 파일을 생성해 둔다.
1 | $sudo touch /forcefsck |
forcefsck 파일은 단 한번만 부팅시 루트 파일시스템을 체크한다. 만약 지속적으로 파일 시스템을 체크하도록 하려면 tune2fs 를 사용해서 ‘Maximum mount count’ 파라미터를 사용하도록 한다.
아래 명령은 부팅시마다 루트 파티션을 체크하게 된다.
1 | tune2fs -c 10 /dev/sdb1 |
이렇게 하면 fsck Maxium mount 값을 양의 값으로 지정하게 된다. 그리고 10번째 부팅시 체크하도록 하려면 -c 10 을 준다.
1 | tune2fs -c 10 /dev/sdb1 |
swap 파일로 만들려면
1 | $ sudo dd if=/dev/zero of=/data/swap4G bs=1G count=4 |
1 | sudo mkswap /dev/sda1 |
터미널 컬러 처리
1 | grc netstat |
lastb 명령은 /var/log/wtmp, /var/log/btmp 에 있는 로그인 기록에서 최근 로그인한 모든 목록을 출력한다. 다음은 최근 20개 목록을 출력한다.
1 | $ sudo lastb -n 20 |
https://www.guyrutenberg.com/2014/09/26/view-failed-login-attempts-lastb/
-w 로 사용자 이름을 출력하고 첫번째 열만 자른 후 정렬한 후, uniq 명령으로 중복되는 이름을 제거한 후 출력한다.
1 | $ sudo lastb -w | cut -d " " -f 1 | sort | uniq | less |
이중에서 접속한 IP와 횟수를 출력한다.
1 | $ sudo lastb -f /var/log/btmp.1 -w -i | awk '{print $3}' | sort | uniq --count | sort -nr | less |
사용자 홈 디렉토리에 ~/.bashrc 파일에 앨리어스를 만든다.
1 | alias python='/usr/bin/python3.4' |
다시 로그인 하거나 .bashrc를 컴파일해서 사용한다.
1 | $ . ~/.bashrc |
1 | $ update-alternatives --list python |
여기서 python2.7과 python3.5 를 update-alternative 로
1 | $ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1 |
1 | $ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 2 |
파이썬 관련 대체 프로그램 목록을 보면,
1 | $ update-alternatives --list python |
삭제를 하려면
1 | $sudo update-alternatives --remove python /usr/bin/python2.7 |
2018-07-10: UART 정보 추가
2017-07-24: exFAT 추가
{:.right-history}
{: width=”600”}
SBC, PC 등의 머신에서 SD Card 사용에 필요한 사항을 정리했다.
2018-08-30: 전체 내용 편집
2017-10-30: swap 추가, timezone 수정
{:.right-history}
SD Card는 Secure Digital의 약자로 Flash memory(비휘발성) 카드 포맷이다.
자세한 내용은 Wikipedia: SD Card 를 확인하자.
리눅스 ( 아마 Armbian 서버에서 사용하려고 했었던 것 같다?!)에서 Cloud drive를 사용하고자 한다.
Odroid C2 그리고 Orange-pi 시스템에서 사용할, 데스크탑 환경의 Armbian Xenial에서 사용하기 위해 클라우드 드라이브를 사용할 목적으로 사용했었다.
Google drive는 grive 패키지로 제공되고 있다. 최근 (아마 2016년 이후) Google의 REST API가 바뀌어 grive2 패키지를 사용해야 한다. 패키지 제공이 되지 않으면 소스 빌드해서 사용했다.
Debian/Ubuntu/Linux Mint 에서 다음 라이브러리가 필요하다:
다음 같이 cmake 와 필요한 라이브러리를 apt로 설치한다.
1 | sudo apt-get install git cmake build-essential libgcrypt11-dev libyajl-dev \ |
소스 다운로드:
1 | git clone https://github.com/vitalif/grive2 |
CMake 로는 다음 같이 빌드 환경을 구성한다
1 | mkdir build |
그리고 Make 로 다음 같이 빌드한다:
1 | make -j4 |
그리고 설치한다:
1 | sudo make install |
소스는 git pull 로 최신 소스를 얻고 다시 빌드한다:
1 | cd /path/to/yourGriveSourceCodeDir/grive2 |
인증
1 | $ grive -a |
OneDrive, for Linux를 설치해서 사용한다.
https://github.com/skilion/onedrive 와 같이 다운로드해서 설치하거나 apt로 unstable apt로 설치할 수 있다.
git-hub 가이드에 따라,
1 | sudo apt-get install libcurl-dev |
그런데 Armbian 에서 llibcurl-dev 패키지를 요구해서,
1 | $ sudo apt-get install libcurl-dev |
그래서 libcurl-dev을 설치했다
1 | $ sudo apt-get install libcurl4-openssl-dev |
1 | $ cat ~/.config/onedrive/config |
사용은
1 | $ onedrive -h |
Linux 에서 짬짬히 자주 쓰이는 명령을 설정을 정리.
비슷한 문서:
우분투 부트로더인 GRUB가 잘못되어 복구하려면 해당 배포본의 Live CD, Live USb 등으로 부팅해서 ‘Try Ubuntu’ 에서 터미널을 통해 복구 절차를 시작한다.
https://help.ubuntu.com/community/Grub2
https://wiki.ubuntu.com/Grub2#Recover
fsck(for file system consistency check) 명령은 파일 시스템을 조사하여 손상된 파일을 출력해 주며 사용자에게 그것을 복구할 것인지를 질의
fsck 수행은 시스템마다 약간의 차이가 있지만 대부분 다음과 같은 5개 항목에 대하여 검사
1 | $ sudo fsck –t ext2 /dev/hdb |
1 | $ sudo fsck –a |
1 | $ sudo fsck -r <drive> |
You can also force fsck at boot time by passing fsck.mode=force, as a kernel parameter. This will check every filesystem you have on the machine.
Create a file called forcefsck:
1 | # touch /forcefsck |
Now, reboot the system:
1 | # reboot |
Frce fsck on next boot using shutdown command (may not work on many modern distros)
The -F option force fsck on reboot, login as root and type the following command to reboot and run fsck:
1 | # shutdown -rF now |
By default, fsck checks a filesystem every 30 boots (counted individually for each partition). To change the frequency of checking, run:
1 | $ sudo tune2fs -c 20 /dev/sda1 |
리눅스테어 외부 USB 디스크를 exFAT로 포맷하고 사용한다면, exfat-fuse와 exfat-utils를 설치해 준다.
1 | $ sudo apt install exfat-fuse exfat-utils |
그리고 대부분 최신 리눅스 데스크탑은 USB 디스크를 더블클릭하면 자동마운트 해준다.
터미널에서는
1 | $ sudo mkdir /media/my_usb |
디스크에 데이터를 쓸려면 디스크의 기본 블록 크기인 512B 보다 큰게 좋다. 또한 쓰기 속도를 증가시키기 위해서 디스크의 물리적 지형에 맞는 크기를 사용하는 것이 좋다. fdisk 같은 유틸리티로 정보를 확인할 수 있고 혹은 sysfs 정보를 확인할 수 있다.
1 | /sys/block/sdX/size |
dd에 데이터를 쓸려면 디스크의 기본 블록 크기인 512B 보다 커야 한다. 또한 쓰기 속도를 증가시키기 위해서 디스크의 물리적 지형에 맞는 크기를 사용하는 것이 좋다.
1 | $ sudo dd bs=8k if=/dev/urandom of=/dev/rdisk2 |
fdisk 정보로 확인
1 | $ sudo fdisk -l /dev/sdb |
fdisk 결과의 Sector size는 전체 용량과 섹터 크기를 계산하면 논릭적인 섹터의 크기를 확인할 수 있다.
1 | echo $((64021856256/125042688)) |
Sector size (logical/physical): 512 bytes / 512 bytes 에서 물리 크기를 확인할 수 있다.
dd 를 사용해서 1024 바이트를 1000000 블록에 걸쳐 쓰기를 수행한다 - 1GB
1 | $ time sudo dd bs=1024 count=1000000 if=/dev/zero of=1GB_file |
dd 를 사용해서 1GB 크기 파일을 1024 바이트씩 읽기를 한다.
1 | $ time sudo dd bs=1024 if=1GB_file of=/dev/null |
Sending an INFO signal to a running dd process makes it print I/O statistics to standard error and then resume copying. In the example below, dd is run in the background to copy 10 million blocks. The kill command makes it output intermediate I/O statistics, and when dd completes normally or is killed by the SIGINT signal, it outputs the final statistics.
1 | $ dd if=/dev/zero of=/dev/null count=10MB & pid=$! |
On systems lacking the INFO signal dd responds to the USR1 signal instead, unless the POSIXLY_CORRECT environment variable is set.
You can also try the status=progress option:
1 | [~]$ dd if=/dev/zero of=/dev/null count=10MB status=progress |
1 | $ sudo dpkg-reconfigure tzdata |
키맵 이용해서 다음 명령:
1 $setxkbmap -layout us -option ctrl:nocaps
1
2
3 sudo vi /etc/default/keyboard
XKBOPTIONS="ctrl:nocaps"
1 sudo dpkg-reconfigure keyboard-configuration
실수로 바이너리 파일을 cat 하거나 하여 글자들이 깨질때.. 터미널 리셋하는 방법
1 | $ reset |
1 | cat /etc/os-release # Raspbian |
1 | lscpu |
1 | cat /proc/cpuinfo |
BIOS안의 시스템 정보
1 | # dmidecode |
memory
1 | $ free -m |
1 | $cat /etc/issue |
Ubuntu 에서
1 | $subo lsb_release -a |
1 | $ dpkg --print-architecture // |
1 | $ uname -a |
1 | $ arch // uname -m 과 동일 |
32bit 64bit 체크
1 | $ getconf LONG_BIT // 시스템 구성 질의 |
1 | $ file /bin/ls |
1 | $ uname -m // machine inf |
http://www.joinc.co.kr/w/Site/Tip/Rsync
rsync -avzh source destination
-a : 심볼릭 링크, 속성, 퍼미션, 소유권 등 보존
-v : 자세한 정보출력
-z : 전송시 압축
-r : 하위디렉토리포함
-e ssh : ssh를 이용한 rsync 동기화
–stats : 결과출력
1 | rsync -av source/ destination/ |
이 옵션을 이용해서 대상 파일을 추가하거나 제외 할 수 있다.
1 | $ rsync -avz --exclude 'data' id@192.168.56.101:/home/backups ./ |
별표(*)도 사용할 수 있다.
1 | $ rsync -avz --exclude '*.cache' id@192.168.56.101:/home/backups ./ |
수정/변경된 내용만 동기화한다.
rsync -avzh moniwiki/ /tmp/backups/
-h, –human-readable : output numbers in a human-readable format
-u : –update update only (don’t overwrite newer files)
–delete : 서버동기화후 원본에서 파일이 삭제되면 백업에서도 파일을 삭제
–remove-source-files :
1 | $ rsync -av /home/ /backup/home/ # 원본 증분 백업 |
목적지에 파일이나 디렉토리가 존재할 경우 삭제하고 싶을 때 --delete 옵션을 사용한다.
1 | rsync -avz --delete id@192.168.56.101:/home/backups ./ |
--remove-source-files를 이용하면, 전송이 끝난 후 원본파일을 삭제한다.
1 | $rsync --remove-source-files -zvh backup.tar /tmp/backups/ |
rsync 에는 ssh 를 이용하여 원격서버에 접속하여 동기화를 하는 기능이 있습니다.
1 | rsync -azrtv --delete --stats -e "ssh -i /root/.ssh/개인키" 원본서버계정@원본서버주소:원본경로/ /백업경로/ |
1 | find . -type f -mtime -3 | rsync -avz --files-from=- /soucepc /data/backup |
/var/log/faillog 는 계정의 로그인 실폐 횟수 정보를 바이너리 파일로 저장한다. 다음 C struct 구조의 정보가 바이너리로 저장되고 있다:
1 | struct faillog { |
직접 읽을 수 없기 때문에 faillog 명령을 사용한다.
1 | $ faillog -u pi # pi 계정 |
최근 3일의 로그인 실패를 찾으려면 :
1 | $ faillog -t 3 -u pi |
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-ubuntu-14-04
1 | $ sudo apt-get install gnome-panel tightvncserver |
첫 실행을 해서 기본 Config 등의 구성을 하도록 하면 되는데, sudo 없이 계정 권한으로 실행하여도 된다. 계정 권한으로 실행을 하면 해당 계정으로 환경 설정을 한다.
1 | $ vncserver |
실행할 때에 해상도를 미리 정해줘야 한다.
1 | $ vncserver -geometry 1024x768 |
기본 창 관리자 변경
기본 생성된 xstartup 파일에는 내가 원하는 대로 환경 설정이 되어 있지 않다. 가장 먼저 실행된 vnc4server를 종료부터 하고 xstartup 파일을 수정하자.
1 | $ vncserver -kill :1 |