본문 바로가기
리눅스

리눅스2 7차시

by 뭔가해보겠습니다 2024. 4. 27.

소스설치
-소스 설치는 어렵기 때문에 연습량이 많아야 하고 개발에 대한 많은 이해가 필요
-실무에서 사용

예전엔 아파치 웹서버 소스코드만 가지고 설치가 가능했는데
요새는 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://httpd.apache.org/download.cgi#apache24

다운로드 주소 : 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로 이동

 

Makefile이 없으므로 만들어줘야 함
APR not found

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

여기도 Makefile이 없다

./configure --prefix=/usr/local/apr

이번엔 gcc가 없어서 에러가 난다

dnf -y install gcc

=> gcc 설치

gcc 설치 후 다시 시도하자 Makefile이 생겼다.

dnf -y install make

make install

=> make 명령어를 사용하기 위해 make 패키지를 설치하고, make install로 컴파일

 

이제 다시 /httpd-2.4.59/ 폴더로 이동해서 httpd 환경설정 진행

./configure --prefix=/usr/local/apache

 

재시도 : APR-util not found

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

expat.h 가 없어서 에러가 난다

 

리눅스에서 개발에 관련된 라이브러리는 패키지명-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 라이브러리 없어서 오류

 

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로 이동

 

pcre 폴더 ls

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 설치경로를 넣어준다

 

pcre 경로를 찾지 못해서 에러가 난다

PATH=$PATH:/usr/local/pcre/bin/             <- pcre2-config가 있는 위치

PATH에 pcre2-config가 있는 경로를 넣어준다

configure 성공

 

make install

에러 없이 컴파일 완료
/usr/local에 apache 폴더가 생겼다.
PATH에 등록 필요

/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 추가

 

Warning: NOT_ENABLED: cockpit

=> 알 수 없는 오류... 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 - 으로 계정을 변경하는 식으로 사용한다.

PermitRootLogin yes여야 root 로그인 가능

 

 

 

실습 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

 

로그인 denied : 9.7버전 pam이므로

 

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 버전 확인

 

'리눅스' 카테고리의 다른 글

리눅스2 8차시  (0) 2024.04.28
리눅스2 6차시  (0) 2024.04.21
리눅스2 5차시  (0) 2024.04.20
centos7 vmware 고정ip static 설정  (0) 2024.04.15
리눅스2 4차시  (0) 2024.04.14