카테고리 : linux
-
PHP 7.2 설치(업그레이드) [CentOS 7 / remi RPM repository]
PHP를 CentOS에 설치하는 방법은 소스를 컴파일하거나 yum을 사용하는 방법이 주로 사용된다. 나의 경우는 예전엔 컴파일 방법을 주로 사용했었으나 RPM 기반으로 설치하는 것이 더 편리하기도 하고 성능 최적화에 유리하다는 소식을 접하고 yum을 주로 사용하고 있다(yum을 사용해서 PHP를 설치할 경우 CentOS에 포함된 PHP의 버전은 매우 낮기 때문에 외부 RPM repository를 사용하는 경우가 많다). PHP 최신 버전을 제공하는 외부 repository 중 유명한 곳은 webtatic과 remi 등이 있다. 이중
-
Let's Encrypt : ACME v2 protocol API 및 wildcard certificates 지원
Let's Encrypt는 2017년 12월 Looking Forward to 2018라는 글을 통해 ACME v2 protocol API와 와일드카드 SSL 인증서를 1월 4일까지 공개 테스트하고 2월 27일부터 정식 배포 하겠다고 밝혔다. 두가지 지원 사항 중 하나인 ACME는 위키피디아에서 아래와 같이 설명하고 있다. The Automatic Certificate Management Environment (ACME) protocol is a communications protocol for automating interacti
-
MariaDB 10.0에서 10.1로 업그레이드(yum)
MariaDB 최신 버전 설치(yum) - CentOS 7 이라는 글에서 MariaDB를 설치하는 방법에 대해 소개 했었다. 그 글에서는 처음부터 10.1을 설치하기를 권장했었는데 회사에서 사용하는 서버 중에 10.0을 사용하는 서버가 있어 이번에 업그레이드했던 내용을 간단히 남긴다. 본론에 들어가기에 앞서 10.1에서의 변경 사항이 궁금하다면 What is MariaDB 10.1?를 참고하자. MariaDB의 메뉴얼에 보면 Upgrading from MariaDB 10.0 to 10.1에서 업그레이드 과정 및 변경 사항을 자세히
-
리눅스에서 모든 빈 디렉토리 찾기 / 지우기
리눅스에서 지정한 디렉토리 하위의 모든 빈 디렉토리를 찾거나 지우려면 어떻게 하면 될까? find 명령을 사용하면 아주 간단히 해결할 수 있다. find . -empty -type d -delete -print 위 명령을 사용하면 현재 폴더 하위의 모든 빈 디렉토리를 찾아 출력하고 지운다. 빈 디렉토리를 찾기만 하려면 -delete를 제외하면 되고 반대로 출력없이 모두 지우려면 -print를 제외하면 된다. 폴더를 지정하려면 당연히 . 대신에 원하는 경로를 넣으면 되고 find의 다양한 옵션을 사용해서 원하는 조건을 추가해서 처리
-
nginx 504 Gateway Time-out 오류
nginx에서 504 Gateway Time-out 오류가 발생할 경우는 리버스 프록시에서의 응답이 지정 시간보다 늦어질 경우다. 접속이 지연되는 경우는 서버의 부하 문제나 WAS의 오류로 인한 것이니 nginx가 아닌 WAS 쪽에서 해결해야하는 것이 맞을 것이다. 간혹 특수한 경우에 WAS 쪽의 처리가 오랜 시간을 필요로 하는 경우 어쩔 수 없이 timeout을 늘려야 하는 경우가 있을 수 있다. 이런 경우라면 proxy_connect_timeout, proxy_send_timeout, proxy_read_timeout 등을 사용
-
linux에서 대량의 파일을 보다 빠르게 지우기
주기적으로 실행되는 스케쥴 중에 대량의 파일을 삭제해야 하는 작업이 있었다. 데이터 수집 등의 작업으로 누적된 로그/캐시 파일들을 작업 완료 후 삭제를 해야하는 작업이었다. 그런데 파일의 수가 워낙에 많다보니 지우는 작업에 소요되는 시간이 너무 길었다. 어차피 서비스 서버가 아니고 스케쥴로 처리되는 작업이니 시간이 조금 오래 걸려도 큰 문제될 것은 없었으나 그래도 시간을 조금이라도 줄여보고자 자료를 찾아보다 Efficiently delete large directory containing thousands of files라는 글을
-
chmod로 권한 변경시 디렉토리(또는 파일)만 적용하기
chmod로 디렉토리 또는 파일의 권한을 변경할 때 하위에 포함된 파일들까지 일괄 적용을 하기 위해 -R 옵션을 사용할 수 있다. 그런데 이 경우는 하위의 모든 디렉토리와 파일에 적용된다. 아래는 하위의 디렉토리만 또는 파일만 적용하도록 하는 방법을 안내한다. # 하위 디렉토리만 포함 find /path/to/base/dir -type d -exec chmod 755 {} + chmod 755 $(find /path/to/base/dir -type d) find /path/to/base/dir -type d -print0 | xar
-
SSH 무작위 로그인 시도 막기(With Fail2Ban on CentOS 6/7 + selinux)
linux 서버를 공개망에서 사용하면서 방화벽을 사용하지 않는 경우 ssh 로그인을 지속적으로 시도하는 로그를 볼 수 있다. 대부분 외국 IP 대역에서 지속적으로 ssh 로그인을 시도하는데 무작위 비밀번호를 대입하는 것이다. 당연히 방화벽을 설정하는 것이 당연하나 특수한 목적으로 인해 접속 IP 대역을 제한할 수 없는 경우도 있을 수 있다. 이런 경우에 보안을 조금이나마 강화하기 위해 사용할 수 있는 것이 fail2ban 이다. 우선 실제로 해당 서버에 어떤 IP들이 ssh 로그인을 시도했는지 아래의 명령으로 확인 할 수 있다(이하
-
yum 실행시 Error: xz compression not available 오류가 날 경우
yum을 사용하다 보면 아래와 같은 오류가 나는 경우가 있다. $ yum update Loaded plugins: fastestmirror Setting up Install Process Repository 'svn-wandisco' is missing name in configuration, using id Loading mirror speeds from cached hostfile * base: ftp.daumkakao.com * epel: ftp.riken.jp * extras: ftp.daumkakao.com * update
-
iptables을 이용한 port forwarding
사무실 내부에서 외부에서 접근 가능한 포트가 개방된 아이피가 한정되어 있어서 두개의 작업 서버를 공유기로 포트 포워딩해서 사용하고 있었다. 그런데 그중 한대의 서버로 매일 대량의 트래픽을 외부에서 밀어 넣는데 이 상황에서 계속 공유기가 죽는 문제가 발생했다(아마도 공유기가 너무 낡은 것이라 그런 것일지도). 간단히 괜찮은 공유기하나 구매하면 해결될 수도 있는 문제지만 귀찮아서 한대의 서버에 외부 회선을 연결하고 포트포워딩으로 필요한 포트만 다른 서버로 연결하기로 했다. 포트포워딩이 허용되어 있는지 확인 cat /etc/sysctl.
-
구형 애플 맥 미니 CentOS 7 서버로 재활용하기
회사에서 맥북 프로를 새로 구매하면서 맥 미니(2012년형)가 한대 남게 되었다. 사실은 다른 이유로 2대가 남게 되었는데 한대는 예비로 그냥 두고 한대를 서버로 사용하기로 했다. 그래서 설치 방법을 찾아보다 Installing CentOS 7 on an Apple Mac Mini를 찾았다. 그런데 이 글에서는 CentOS 7을 바로 설치할 수 없어 CentOS 6.5를 설치 후 7으로 업데이트하는 방법을 안내하고 있었다. 이 방법은 개인적인 취향상 선택하기 싫었다. 그래서 조금 더 찾다보니 Create a bootable Cent
-
SSH를 사용해서 mysqldump 하기
SSH 비밀번호 입력없이 로그인하기에 이어서 ssh를 이용해서 MySql 원격 서버의 데이터를 로컬로 dump 받는 방법을 소개하려고 한다. "굳이 이런 방법이 왜 필요한가?"에 대한 의문이 생길 수 있으니 상황부터 설명해야 할 것 같다. mysqldump를 사용하고자 할 경우 mysql client가 설치되어 있어야 한다. CentOS기준으로 mysql은 "mysql", mariadb 기준으로 보자면 "MariaDB-client" 패키지가 설치되어 있어야 한다. 그런데 이 패키지가 설치되지 않은 상태에서 mysqldump를 사용하
-
SSH 비밀번호 입력없이 로그인하기
ssh 사용시 매번 비밀번호를 입력하는 것은 귀찮은 일이다. 그럼에도 불구하고 ssh의 기본 기능에 비밀번호를 미리 입력하는 기능을 제공하지 않는 것은 보안 상의 이유 때문일 것이다. 하지만 비밀번호를 입력하는 귀찮음을 해소하는 것 외에도 스케쥴링 처리 스크립트 등에서 사용자의 비밀번호 입력없이 ssh 접속을 해야할 경우가 있다. 이런 경우에 대비해서 ssh에서는 클라이언트의 공개키를 원격 서버에 미리 등록 시켜두는 방식으로 비밀번호 없이 접속할 수 있는 방법을 제공한다. 사실 이 방법이 보안 상으로도 안전한 편이고 등록하는 과정도
-
linux buffer/cache 비우기
예전에 리눅스에서 swap 메모리 초기화에서 swap 메모리를 비우는 방법을 남겼다. 이번엔 swap이 아닌 "buff/cache"를 비우는 방법을 남기고자 한다. linux에서 top 또는 free 명령으로 메모리 상황을 보면 "buff/cache" 항목이 있다. 이 부분은 실제로 직접 사용하고 있는 메모리가 아니라 말그대로 버퍼와 캐시에 사용된 메모리를 뜻한다. 그렇다면 "굳이 왜 이것을 비우려고 하는가?"하는 의문이 생길 수 있다. 일반적으로 캐시는 느린 장치의 데이터를 빠른 장치에 임시 보관해두고 사용함으로써 성능을 높이는
-
tar를 이용한 증분 백업 / 복원 + atime-preserve
서버를 운영하면서 가장 중요한 부분을 꼽으라면 백업을 꼽을 것이다. 안정적인 서버의 운영도 중요한 문제지만 소중한 데이터를 보호하는 것은 더 중요한 문제이다. 백업의 방법은 다양하다. RAID를 이용한 백업, sync를 통한 원격 백업, 파일을 압축해서 보관하는 백업, 백업 장비를 이용한 백업 등 많은 종류의 방법이 존재한다. 하지만 나는 백업의 방법 보다 백업 정책이 더 중요하다고 생각한다. 그중에서도 가장 중요한 원칙은 백업본은 원본 데이터와 함께 두지 않는다는 것이다. 다시말해 백업본은 원격지로 보내서 보관하여 원본 데이터가
-
Yum Delta RPM 사용하기
최근부터 CentOS 7을 사용하면서 yum으로 update를 하면서 아래와 같은 오류가 자주 발생했다. 하지만 항상 나오는 것은 아니다. Error: Delta RPMs disabled because /usr/bin/applydeltarpm not installed. 이 메시지가 나오지만 실제로는 동작에는 이상이 없다. 하지만 계속 메시지가 나오니 보기도 싫고 다른 문제가 생길 수도 있을 것으로 생각되어 좀 찾아봤다. 일단 Delta RPM 이라고 하는 것은 RPM 패키지 버전별로 변경사항만 가지고 있는 것을 뜻한다. 다시 말해
-
selinux enforcing 후 로그인이 되지 않을 때 복구 방법(CentOS 7)
이 글은 특수한 상황에 대한 이야기다. 하지만 여러가지 경우에 대한 설명이 포함되어 있어 향후 비슷한 상황에 대한 대처를 위해 남겨둔다. 일단 상황은 이렇다. CentOS 7을 selinux가 disabled 상태로 운영하던 중 selinux를 enforcing 상태로 변경해서 재시작했다. 그후로 부팅은 되나 모든 계정으로 로그인을 할 수 없었다. 이 상황의 발생 원인을 먼저 설명하자면 selinux가 켜지면서 권한 문제로 shell이 /etc/passwd와 /etc/shadow에 접근할 수 없어 로그인을 할 수 없었던 것이다. 이
-
sftp-only 사용자 추가 (CentOS 7)
linux 서버를 운영하면서 sftp가 필요한 경우가 있다. 일반 계정이라면 sftp로 그냥 접속하면 되지만 특정 사용자에게 shell 접속은 차단하고 파일 업/다운로드만 제공해야 하는 상황이 있을 수 있다. 파일 전송을 주로 해야하는 서버가 아니라면 이런 경우를 위해 ftp 데몬을 구동하는 것도 부담스럽다. 이런 경우라면 sftp 전용 사용자를 추가하는 방법을 사용할 수 있다. 우선 아래의 과정을 보자. 미리 이야기 하지만 아래의 설정 과정은 앞으로 설명하는 요구 사항에 맞추어 작성된 것이다. 따라서 그룹 설정, home dire
-
mysql_secure_installation 자동화
이전 글 MariaDB 최신 버전 설치(yum) - CentOS 7에서 MariaDB를 설치하면서 mysql_secure_installation 명령을 자동화하는 부분을 언급했었다. 이 글에서는 이를 설명하려고 한다. 우선 바로 만들어둔 bash shell script를 보자. mysql_secure_installation_automation.sh #!/bin/bash # https://gist.github.com/Mins/4602864 yum -y install expect # Not required in actual script
-
MariaDB 최신 버전 설치(yum) - CentOS 7
CentOS 7에서의 MariaDB의 기본적인 설치는 아주 간단하다. yum epel 저장소가 추가된 상태에서 아래와 같이 설치가 가능하다(epel이 없어도 동일할 것으로 생각되나 이 글에서의 주요 내용이 아니기 때문에 테스트 해보지는 않았다). $ yum install -y mariadb mariadb-server $ systemctl enable mariadb.service $ systemctl start mariadb.service $ mysql_secure_installation 기본 설치는 끝이다. 이제부터 mariadb을
-
Nginx : 414 Request-URI Too Large 오류
Nginx를 사용하는 중에 아주 긴 URL의 요청이 들어올 경우 414 Request-URI Too Large 오류가 나는 경우가 있다. 이는 말 그대로 URL 요청이 제한된 길이보다 길기 때문에 오류가 발생하는 것이다. 일반적인 웹 서버들은 8kb를 최대 길이로 설정되어 있는 것이 보통이다. 실제로 Nginx의 경우도 기본은 8kb이다. 하지만 URL의 길이는 서버에서 받아주는 길이도 관련이 있지만 웹 브라우저에서도 제한이 있다. 예를들어 오래된 브라우저들은 2kb 가량의 제한이 있다. 하지만 최신 브라우저들은 8kb로 제한하는
-
Nginx(stable / mainline) 설치 - CentOS 6.5 / 7
Nginx는 위키피디아에서 아래와 같이 설명하고 있다. Nginx(엔진 x라 읽는다)는 웹 서버 소프트웨어로, 가벼움과 높은 성능을 목표로 한다. 웹 서버, 리버스 프록시 및 메일 프록시 기능을 가진다. Netcraft의 2011년 1월 웹서버 설문조사에 따르면, nginx는 전체 도메인에서 4번째(7.50%)로 많이 쓰이는 웹서버이며, 활성화된 웹 사이트에 대한 통계에서도 역시 4번째(8.23%)로 많이 사용된다[1]. Nginx는 요청에 응답하기 위해 비동기 이벤트 기반 구조를 가진다. 이것은 아파치 HTTP 서버의 스레드/프로
-
ANSI text를 HTML로 변환하기
지난 글 PHP를 CLI에서 사용시 ANSI Colors 적용하기에서 php cli에서 ANSI를 사용해서 출력하는 것에 대해 설명했었다. 이번엔 ANSI text를 HTML로 변환하는 것에 대해서 설명하려고 한다. 이게 왜 필요할까? ANSI는 shell에서만 색상이 적용되므로 해당 내용을 text 파일로 저장해서 다른 곳에서 열어보면 ANSI code가 그대로 보이거나 일반 text로 보인다. 따라서 결과물을 색상을 포함해서 다른 곳에 공유하기가 어렵다. 나의 경우는 ANSI를 html로 변환해서 chrome에서 열고 pdf로
-
CentOS 7 firewalld vs iptables
CentOS 7부터 방화벽으로 iptables를 사용하지 않고 firewalld를 사용한다. /etc/sysconfig/iptables 파일도 존재하지 않는다. 따라서 firewall-cmd를 사용해서 방화벽을 설정해야 한다(x windows에서는 firewall-config를 사용한다고하나 콘솔만 사용해봐서 firewall-config는 어떻게 생겼는지 모르겠다). Redhat Products & Servies의 4.11. 보안 및 액세스 제어에 아래와 같이 설명되어 있다. 4.11.1. 새로운 방화벽 (firewalld) Red
-
CentOS 7 minimal 설치
Minimal 설치 설치를 시작하면 아래와 같은 화면이 나온다. 그냥 Enter를 치면된다. 커서를 옮겨 "Install CentOS 7"을 선택한다. 언어를 한국어로 선택한다. 설치 대상을 선택해서 드라이브를 선택한다. 파티션을 직접 설정하고 싶다면 "파티션을 설정합니다."를 체크하고 완료한다. 직접 설정하기로 했다면 왼쪽 하단의 "+"를 누르면 아래와 같이 파티션과 용량을 선택할 수 있는 화면이 나온다. 파티션과 용량은 자신에게 맞게 설정하면 된다. 관련해서는 Centos 7 설치시 파티셔닝을 참고하길 바란다. 완료를 선택하면
-
Centos 7 설치시 파티셔닝
Linux 설치 과정에서 고민되는 것 중 하나가 파티션닝이다. 크게 중요하지 않은 상황이라면 자동으로 설정해주는 것을 그대로 사용하는 것이 편하긴하다. 설치 후에도 파티션을 변경할 수 있는 경우도 있으나 일반적으로 Linux를 서버로 사용하는 경우 동적으로 변경하는 상황은 흔치 않기 때문에 처음 설치시 신중하게 설정하는 것이 좋다. 파티셔닝은 서버의 사용 용도 등에 따라 파티션별 파일시스템의 종류와 용량이 많은 차이를 보일 수 있으므로 참고만 하고 자신이 직접 고민을 해보는 것이 좋을 것이다. 아래의 내용은 RED HAT ENTER
-
NIC I/F 번호(eth*)를 변경
NIC 교체 및 추가 시 MAC 정보와 H/W 정보가 변경되어 /etc/sysconfig/network-script/ifcfg-ethX 파일이 증가한다. 이때 기존의 I/F 번호를 변경하려면 /etc/udev/rules.d/70-persistent-net.rules의 기존 정보 삭제 및 신규 I/F의 NAME을 변경하고 Rebooting 하면 된다.
-
CentOS autofs
설치 yum install -y autofs 설정 # 서버 부팅시 자동 시작 /sbin/chkconfig --add autofs /sbin/chkconfig --level 35 autofs on mount 설정 vi /etc/auto.master /home/nfsusers /etc/auto.users --timeout 60 vi /etc/auto.users yyj -rw,vers=3,udp,nolock 192.168.11.99:/czdev/vagrant/work/web service autofs restart 관리 # 데몬 재시작
-
리눅스 명령어 모음(Centos 6)
아래의 내용은 개인적으로 간혹 사용이 필요한 내용을 기록해 두기 위한 것으로 잘못된 정보일 수 있으니 참고만 하기 바란다. 시스템 로그 삭제 /etc/init.d/rsyslog restart sl 인증서 + apache 시작시 비밀번호 입력 제거 openssl rsa -in key.pem -out key.nopw.pem ssh 접속자 강제 로그아웃 # 602 : userid pkill -KILL -u 602 bash script에서 실행경로 구하기 cd ${0%/*} 2>/dev/null echo $PWD/${0##*/} 서버 네트
-
리눅스에서 swap 메모리 초기화
리눅스에서 swap 메모리를 초기화하는 것은 아주 간단하다. 일시적 메모리 사용의 증가로 swap을 사용하게될 경우 메모리에 여유가 생겨도 swap 메모리는 자동으로 초기화되지 않는다. 이것을 수동으로 초기화하려면 아래의 명령을 입력하면 된다. 당연히 root 권한에서 실행해야 한다. swapoff -a && swapon -a swapoff 처리에 시간이 조금 오래 걸릴 수 있는데 서버가 멈춘 것은 아니므로 걱정하지 않아도 된다. swap 메모리에서 필요한 부분을 물리 메모리로 옮기는 처리중인 것이다.