소스설치
-소스 설치는 어렵기 때문에 연습량이 많아야 하고 개발에 대한 많은 이해가 필요
-실무에서 사용
예전엔 아파치 웹서버 소스코드만 가지고 설치가 가능했는데
요새는 apr이 분리되어 소스코드만 가지고 설치할 수 없음
설치법
- 설치할 소스코드들을 서버로 다운로드 후 압축해제
- 서버에 컴파일러와 각종 라이브러리를 설치
- 컴파일하는 순서가 중요
압축해제시
tar.gz(tar xzf), tar.bz2(tar xjf), tar.xz(tar xJf)
=> tar형태로 묶인 파일들을 tarball타르볼이라고 부름
실습 vmware : Rocky Linux 8
환경설정 : configure 파일 (쉘 스크립트 실행파일)
./configure 명령어로 실행
ex)
./configure --prefix=/usr/local/apache
./configure --prefix=/usr/local/APM
./configure --prefix=/usr/opt/Server
--prefix : 설치 디렉터리를 지정하는 옵션
(+복습
명령어 검색 순서
alias -> 내부 명령어 -> 외부 명령어(PATH))
컴파일하기 위한 조건이 충족되면 Makefile 생성
하나라도 미충족시 에러가 나면서 생성되지 않음
ex) checking for APR... no
=> APR 라이브러리가 없을 때
make 명령어로 Makefile 내용을 보고 컴파일
큰 프로젝트 소스코드들은 여러 개의 파일로 되어 있고
어떻게 컴파일하고 설치할 것인지에 대한 정보는 Makefile에 기록되어 있음
컴파일에 성공하면 하나 이상의 실행파일이 생성됨
ex) [/설치디렉터리]# make install
삭제 명령어: make clean 혹은 make distclean
(컴파일한 바이너리 코드 삭제)
다운로드 주소 : https://dlcdn.apache.org/httpd/httpd-2.4.59.tar.gz
yum -y install wget
=> wget이 없으면 설치
wget https://dlcdn.apache.org/httpd/httpd-2.4.59.tar.gz
=> wget으로 다운로드 주소에 접근하여 다운로드
sha256sum httpd-2.4.59.tar.gz
=> sha256으로 파일 무결성 체크
tar xzf httpd-2.4.59.tar.gz
cd 폴더명
=> tar 명령어로 tar.gz 파일 압축해제하고 cd로 이동
APR(Apache Portable Runtime)?
아파치 소프트웨어에서 사용되는 라이브러리
다양한 운영체제에서 일관된 API를 제공하여 소프트웨어 개발을 단순화함
플랫폼에 독립적
https://apr.apache.org/ 사이트에서 다운로드 받아야 한다
wget https://dlcdn.apache.org//apr/apr-1.7.4.tar.gz
tar xzf apr-1.7.4.tar.gz
./configure --prefix=/usr/local/apr
dnf -y install gcc
=> gcc 설치
dnf -y install make
make install
=> make 명령어를 사용하기 위해 make 패키지를 설치하고, make install로 컴파일
이제 다시 /httpd-2.4.59/ 폴더로 이동해서 httpd 환경설정 진행
./configure --prefix=/usr/local/apache
ARP Util
APR의 부가 라이브러리. 여러가지 유틸리티 함수와 데이터 구조 제공
네트워크 프로그래밍, 데이터베이스 액세스, 메모리 관리, 문자열 조작 등에 사용된다.
사이트 : https://apr.apache.org/download.cgi
wget https://dlcdn.apache.org//apr/apr-util-1.6.3.tar.gz
tar xzf apr-util-1.6.3.tar.gz
cd apr-util-1.6.3
=> APR-Util 다운로드 받고 cd로 이동
./configure --help
--with-apr=PATH prefix for installed APR or the full path to
=> ./configure 설명 참고하여 --with-apr=<apr이 설치된 경로> 로 설치
( --with-apr 옵션 없이 .configure 하면 에러난다 )
./configure --with-apr=/usr/local/apr
make install
리눅스에서 개발에 관련된 라이브러리는 패키지명-devel로 되어 있음
expat, expat-devel은 XML parset 라이브러리가 필요하므로 패키지 설치
yum -y install expat-devel
=> expat-devel설치시 의존성 구조 때문에 expat도 같이 설치됨
다시 /httpd-2.4.59/ 폴더로 이동해서 httpd 환경설정 진행
./configure --prefix=/usr/local/apache
PCRE(Perl Compatible Regular Expressions)
Perl 언어의 정규 표현식 구문을 따르는 라이브러리
주로 아파치 웹 서버의 모듈 간 통신이나 URL 경로 매칭에 사용
mod_rewrite 모듈은 URL 리다이렉션, 리라이팅을 위해 PCRE 사용
mod_security 보안 모듈에서도 PCRE 사용하여 웹 애플리케이션 보안 강화
현재는 PCRE2 라는 이름으로 변경됨
PCRE 공식 사이트
https://www.pcre.org/
https://github.com/PhilipHazel/pcre2/releases
wget https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.43/pcre2-10.43.tar.gz
tar xzf pcre2-10.43.tar.gz
cd pcre2-10.43/
=> wget으로 다운로드 받고 tar로 압축풀고 cd로 이동
ChangeLog
- 변경사항에 대한 로그 기록
INSTALL
- 프로젝트 빌드, 설치하는 방법에 대한 설명
README
- 프로젝트에 대한 소개와 사용방법에 대한 안내
./configure --help
./configure --prefix=/usr/local/pcre
make install
다시 /httpd-2.4.59/ 폴더로 이동해서 httpd 환경설정 진행
./configure --prefix=/usr/local/apache
cp -a ../apr-1.7.4/ srclib/apr
cp -a ../apr-util-1.6.3 srclib/apr-util
=> apr과 apr-util을 srclib 폴더에 복사한다 srclib에 있어야 인식함
사용할 옵션
--prefix=PREFIX install architecture-independent files in PREFIX
--enable-mods-shared=MODULE-LIST
--enable-so DSO capability. This module will be automatically
--with-pcre=PATH Use external PCRE library
--with-apr=PATH prefix for installed APR or the full path to
--with-apr-util=PATH prefix for installed APU or the full path to
--with-included-apr Use bundled copies of APR/APR-Util
./configure --prefix=/usr/local/apache \
--enable-so \
--enable-mods-shared=all \
--with-included-apr \
--with-pcre=/usr/local/pcre/
=> prefix 경로 ( 아키텍쳐에 독립적인 파일을 PREFIX에 설치 )
--enable so ( mod_so가 제공하는 DSO 기능을 사용 )
--enable-mods-shared=all ( 동적공유모듈로 컴파일할 모듈 목록을 지정. all은 모두 )
--with-included-apr apr폴더를 srclib에 넣어주었기 때문에 인식함
--with-pcre 설치경로를 넣어준다
PATH=$PATH:/usr/local/pcre/bin/ <- pcre2-config가 있는 위치
PATH에 pcre2-config가 있는 경로를 넣어준다
make install
/usr/local/apache/bin/httpd -t
/usr/local/apache/bin/apachectl start
=> 아파치 웹서비스 시작
ps aux | grep httpd
netstat -nltp
=> Listen 포트 확인
firewall-cmd --permanent --add-service={http,https}
firewall-cmd --reload
firewall-cmd --list-services
=> 방화벽에 http, httpd 추가
=> 알 수 없는 오류... list에 있는데 왜 인식을 못하니... --permanent 제외했더니 되긴했음
실습 : 소스 컴파일을 이용한 프로그램 설치
netcat
네트워크 툴
TCP/IP 및 UDP 프로토콜 사용하여 네트워크 통신을 수행하는 커맨드 라인 유틸리티
해킹시 많이 사용하고 리다이렉션, 포트 스캐닝, 서비스 및 네트워크 테스트, 데이터 송수신, 쉘 백도어 등 다양한 용도로 사용
netcat 다운로드 사이트 : http://netcat.sourceforge.net/
wget http://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz
tar xzf netcat-0.7.1.tar.gz
cd netcat-0.7.1/
./configure
( prefix를 설정하지 않아도 /usr/local/bin 밑으로 생긴다 )
make install
=> 컴파일 완료
PATH에 /usr/local/bin이 포함되어 있으므로, 바로 nc와 netcat 명령어를 쓸 수 있다.
rm -rfv netcat-0.7.1* /usr/local/bin/{nc,netcat}
=> 삭제후 다시 다른 방법으로 설치해본다
실습: netcat 설치 스크립트 작성하기
쉘 스크립트
: alias, 내부/외부 명령어, 쉘문법 등을 넣어 실행파일 형태로 되어 있음
install /dev/null netcatInstall.sh
vi netcatInstall.sh
#!/bin/sh
dnf -y install wget gcc make
wget http://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz
tar xzf netcat-0.7.1.tar.gz
cd netcat-0.7.1/
./configure
make
make install
쉘 스크립트를 실행하면
fork() 함수에 의해 프로세스가 복사되면서 동작한다.
./netcatInstall.sh
ll /usr/local/bin/
=> 실행후 설치확인
nc
옵션
-l : listen 포트
-p : port 번호
-e : exec 실행파일
-v : verbose
실습 : OpenSSH 소스 설치
소스 컴파일
- 장점 : 편의에 맞게 구축 가능
- 단점 : 컴파일 에러 발생 가능성이 크고, 구축/유지보수가 어려움
공식사이트 : http://www.openssh.com
Releases > 원하는 미러사이트 선택 > 다운로드
소스 설치시 간략한 과정
1. 환경설정
./configure
Makefile 생성
2. 컴파일
make
3. 설치
make install
wget --no-check-certificate https://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/openssh-9.5p1.tar.gz
./configure --help
사용 옵션
--prefix: 설치 디렉터리
--with-ssl-dir: openssl 디렉터리
--with-privsep-user: 사용자
--with-zlib: 압축 라이브러리
--with-pam: pam 인증 모듈
dnf -y install gcc make pam-devel zlib-devel openssl-devel
=> 필요한 패키지들 전부 설치
tar xzf openssh-9.5p1.tar.gz
cd openssh-9.5p1/
./configure \
--prefix=/usr/local/openssh \
--with-ssl-dir \
--with-privsep-user=sshd \
--with-zlib \
--with-pam
문제없으면
make
make install
컴파일, 설치.
* yum 또는 dnf로 openssh 패키지가 삭제되면
소스로 컴파일하여 설치한 새로운 sshd 서비스가 실행되기 전까지 ssh 접속해서는 안된다
멀리 떨어진 곳에서 접속하다 문제생기면 복구불가능
dnf -y remove openssh openssh-server openssh-clients
rpm -qa | grep openssh
rm -rf /etc/ssh
=> openssh 설정파일까지 완전삭제
cd contrib/redhat/
cp sshd.pam /etc/pam.d/sshd
cp sshd.init /etc/init.d/sshd
chkconfig --add sshd
chkconfig --list sshd
=> pam 설정파일과 데몬 시작 스크립트 복사
ln -s /usr/local/openssh/etc /etc/ssh
ln -s /usr/local/openssh/bin/* /usr/bin
ln -s /usr/local/openssh/sbin/* /usr/sbin
ln -s /usr/local/openssh/libexec/* /usr/sbin
=> /usr/local/openssh 자체가 인식이 안되므로 심볼릭 링크 파일 생성
/etc/init.d/sshd start
netstat -nltp
=> ssh 서비스 시작, 포트 뜬 것 확인.
reboot 하여도
tcp6 0 0 :::22 :::* LISTEN 879/sshd: /usr/sbin
잘 떠있다.
* 소스로 설치하면 root 접속이 막혀 있기 때문에,
linuxadmin(미리 생성해둔 관리자 계정)으로 접속하여 su - 으로 계정을 변경하는 식으로 사용한다.
실습 OpenSSH 업그레이드하기
wget --no-check-certificate https://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/openssh-9.7p1.tar.gz
tar xzf openssh-9.7p1.tar.gz
cd openssh-9.7p1
./configure \
--prefix=/usr/local/openssh \
--with-ssl-dir \
--with-privsep-user=sshd \
--with-zlib \
--with-pam
configure
make
/etc/init.d/sshd stop
rm -rf /usr/local/openssh/
make install
make install 하기 전에 이전 버전 sshd를 중지하고 삭제한다
그 후 make install로 업그레이드 설치한다
make 옵션
-cc : gcc의 심볼릭 링크
-D : define
-L : 라이브러리 디렉터리 위치 지정
-l : 라이브러리명 지정
-o : 실행파일 옵션
-c : 컴파일
ssh -V
OpenSSH_9.7p1, OpenSSL 1.1.1k FIPS 25 Mar 2021
버전을 확인해보면 업그레이드 되어 있다
cd contrib/redhat/
cp sshd.pam /etc/pam.d/sshd
cp sshd.init /etc/init.d/sshd
chkconfig --add sshd
chkconfig --list sshd
/etc/init.d/sshd start
netstat -nltp
=> 포트 활성화 체크
vi version.h
#define SSH_VERSION "Hello"
수정한뒤에
make
make install하고 ssh -V 하면 Hello로 변경되어 있다
실습 : dnf로 openssh 패키지를 재설치한다
이때, 복사한 /etc/pam.d/sshd 를 반드시 삭제
/etc/init.d/sshd stop
현재 sshd 서비스 중지
rm -rf /usr/local/openssh/
=> 삭제
심볼릭 링크들은 어차피 dnf 설치시 덮어쓰므로 내버려둬도 된다
dnf search openssh 로 조회한뒤 참고하여
dnf -y install openssh openssh-server openssh-clients
패키지 설치
ssh -V
OpenSSH_8.0p1, OpenSSL 1.1.1k FIPS 25 Mar 2021
rpm -qf /etc/pam.d/sshd
openssh-server-8.0p1-19.el8_9.2.x86_64
=> /etc/pam.d/sshd는 어느 패키지에 속하는지 확인
rm -f /etc/pam.d/sshd
=> 삭제
dnf -y reinstall openssh-server
=> reinstall로 재설치
이후 로그인 성공.
실습 : OpenSSH 스크립트로 설치
install /dev/null opensshInstall.sh
vi opensshInstall.sh
--with-selinux : SELinux 활성화 ( 로그인 시 접속이 끊어지는 이슈가 있어 일단 빼기로 함 )
--with-privsep-path=/var/empty/sshd/ : 프로세스 분리 디렉터리 지정
--sysconfdir=/etc/ssh : 설정파일 지정
--with-zlib : 통신시 압축라이브러리 사용
rm -rf /etc/ssh
rm -f /etc/pam.d/sshd
// 꼭 두 군데 다 지워줘야 깔끔하게 잘 설치됨
wget --no-check-certificate https://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/openssh-9.7p1.tar.gz
tar xzf openssh-9.7p1.tar.gz
cd openssh-9.7p1
./configure --prefix=/usr/local/openssh \
--with-ssl-dir \
--with-privsep-user=sshd \
--with-zlib \
--with-pam \
--sysconfdir=/etc/ssh \
--with-privsep-path=/var/empty/sshd/
make
make install
systemctl stop sshd
dnf -y remove openssh openssh-server openssh-clients
cd contrib/redhat/
cp sshd.pam /etc/pam.d/sshd
cp sshd.init /etc/init.d/sshd
chkconfig --add sshd
ln -s /usr/local/openssh/etc /etc/ssh
ln -s /usr/local/openssh/bin/* /usr/bin
ln -s /usr/local/openssh/sbin/* /usr/sbin
ln -s /usr/local/openssh/libexec/* /usr/sbin
/etc/init.d/sshd start
ssh -V
//wget으로 다운로드, tar xzf로 압축해제, cd로 이동
//./configure 옵션 넣어서 실행 후 make 컴파일, make install 설치
//기존 sshd 중지
//기존 openssh dnf로 remove
//redhat 디렉터리로 이동하여, 설치한 pam설정과 데몬 설정파일을 복사 붙여넣기
//chkconfig로 체크
//심볼릭링크를 걸어주고
//sshd start한 뒤 ssh -V 버전 확인