모듈의 개념과 커널 컴파일의 필요성

모듈 - 별도로 보관했다가 필요할 때마다 호출하여 사용되는 코드 커널은 다른 의미에서도 중요하다. 최근에 출시된 하드웨어를 장착했을 때 기존의 커널은 지원을 하지 않지만, 최신 커널은 지원할 수도 있기 때문이다. 이럴 때는 http://www.kernel.org에서 최신 커널 소스를 다운로드해서 커널을 업그레이드해야 한다. 그 외에도 보안 문제로 인해 커널을 업그레이드하는 경우도 있따.

서비스와 소켓

Daemon 이라고도 부르는 서비스는 서버 프로세스를 말한다. 즉, 서비스는 웹 서버, 네임 서버, DB 서버 등의 프로세스를 지칭한다. 또는 웹 서버 데몬, 네임 서버 데몬 등으로 부르기도 한다. 서비스는 눈에 보이지 않지만, 현재 시스템에서 동작 중인 프로세스이므로 백그라운드 프로세스의 일종이라고도 할 수 있다. 서비스는 평상시에도 늘 가동하는 서버 프로세스이며 , 소켓은 필요할 때만 작동하는 서버 프로세스를 말한다. 서비스와 소켓은 systemd 라고 부르는 서비스 매니저 프로그램 으로 작동시키거나 관리한다. CentOs 6.x까지는 최상의 프로세스인 init 프로세스가 서비스를 직접 관리하는 방식이었으나, CentOS 7부터 systemd가 서비스를 대부분 관리한다. 서비스 - 시스템과 독자적으로 구동되어 제공하는 프로세스 - 예를 들어, 웹서버(httpd), DB 서버(mysqld), FTP(vsftpd) 서버 등이 있다. - 실행 및 종료는 "systemctl start/stop/rerstart 서비스이름"으로 사용된다. 예를 들어 웹 서버는 "systemctl start httpd"로 구동한다. - 서비스의 실행 스크립트 파일은 /usr/lib/systemd/system/ 디렉터리에  '서비스이름.service'라는 이름으로 확인할 수 있다. 예를 들어 웹 서비스는 httpd.service라는 이름의 파일로 존재한다. 소켓 - 서비스는 항상 가동되지만, 소켓은 외부에서 특정 서비스를 요청할 경우에 systemd가 구동시킨다. 그리고 요청이 끝나면 소켓도 종료된다. - 소켓으로 설정된 서비스를 요청할 때는 처음 연결되는 시간이 앞에서 설명한 서비스에 비교했을 때 약간 더 걸릴 수 있다. 왜냐하면 systemd가 서비스를 새로 구동하는 데 시간이 소요되기 때문이다. 이와 같은 소켓의 대표적인 예로 텔넷 서버를 들 수 있다. - 소켓과 관련된 스크립트 파일은 /...

프로세스

프로세스 - 하드디스크에 저장된 실행 코드(프로그램)가, 메모리에 로딩되어 활성화된 것 - 예를 들어 웹 브라우저 프로그램인 크롬은 하드디스크의 어딘가에 저장되어 있을 것이다. 이렇게 하드디스크에 저장된 파일을 '프로그램'이라고 부른다. 크롬을 실행해서 화면에 나타난 상태(화면뿐만이 아니라, 메모리에 로딩되었다가 더 정확한 표현이다)를 '프로세스'라고 부른다. 포그라운드 프로세스 - Foreground Process는 방금 얘기한 크롬 등과 같이 실행하면 화면에 나타나서 사용자와 상호작용을 하는 프로세스를 말한다. 화면에서 실행되는 것이 보이는 프로세스라고 생각하면 된다. 백그라운드 프로세스 - Background Process는 실행은 되었지만, 화면에는 나타나지 않고 뒤에서 실행되는 프로세스를 말한다. 예를 들어 바이러스 백신, 서버 데몬 등은 눈에는 보이지 않지만 실행되는 것이다. 프로세스 번호 - 메모리에 로딩되어 활성화된 프로세스를 구분하려면 각각의 고유 번호가 필요하다. 이렇게 각각의 프로세스에 할당된 고유 번호를 프로세스 번호라 부른다. 프로세스 번호가 필요한 이유는 메모리에서 활성화된 프로세스를 메모리에서 강제로 제거하려면 프로세스 번호를 사용해야 하기 때문이다. 작업 번호 - 현재 실행되는 백그라운드 프로세스의 순차 번호 부모 프로세스와 자식 프로세스 - 모든 프로세스느 혼자서 독립적으로 실행되는 것이 아니라, 부모 프로세스의 하위에 종속되어 실행된다. 예를 들어 크롬 같은 경우에는 X 윈도 프로세스가 구동된 상태에서 실행되어야 한다. 따라서 X윈도는 크롬의 부모 프로세스이며, 크롬은 X윈도의 자식 프로세스라고 부른다. 여기서 크롬은 그냥 드고 X 윈도만 강제 종료하면 크롬은 계속 실행될까? 당연히 크롬도 종료된다. 즉, 부모 프로세스를 종료하면 그에 종속된 자식 프로세스도 모두 종료된다. 프로세스와 관련된 주요 명령어 ps - 현재 프로세스의 상태를 확인하는 명령어...

파이프, 필터, 리다이렉션

파이프(pipe) - 2개의 프로그램을 연결해주는 연결 통로를 의미한다. - | 문자를 사용한다. [ex] # ls -l /etc | more 필터 - 필요한 것만 걸러주는 명령어이다. - 주로 파이프와 같이 사용된다. [ex] # ps -ef | grep bash -> bash라는 글자가 들어간 프로세스만 출력 #rpm -qa | grep yum -> 설치된 패키지 중에서 'yum'이라는 글자가 들어간 패키지를 출력 리다이렉션 - 표준 입출력의 방향을 바꿔준다. - 표준 입력은 키보드, 표준 출력은 모니터이지만 이를 파일로 처리하고 싶을 때 주로 사용한다. [ex] # ls -l > list.tx # ls -l >> list.txt # sort < list.txt # sort < list.txt > out.txt

네트워크 보안을 위한 SELinux

-SELinux(Security Enhanced Linux)는 보안에 취약한 리눅스를 보호하기 위해 탄생했다. 시스템에서 보안에 영향을 미치는 서비스, 권한 등을 제어할 수 있다. -SELinux 환경에서는 해커가 어떤 경로로 시스템 침입에 성공하든, 침입한 경로의 애플리케이션 사용 이상의 권한을 얻지 못한다. 예를 들어 FTP 서버의 경로로 침입하면 FTP와 관련된 디렉토리나 파일 외에는 다른 서버에는 접근할 수 없으므로 해킹으로 인한 피해를 FTP 서버만으로 제한할 수 있다. 즉, 만약의 사태가 발생해도 피해를 최소화할 수 있다. -SELinux의 사용 여부는 enforcing, permissive, disabled라는 3가지 레벨을 지원한다. - 설정 파일은 /etc/sysconfig/selinux 파일이다. CentOS 7을 설치하면 기본적으로 enforcing으로 설정되어 있다. - enforcing : 시스템 보안에 영향을 미치는 기능이 감지되면, 그 기능이 작동되지 않도록 시스템에서 막아준다. - permissive : 시스템 보안에 영향을 미치는 기능이 감지되면 허용은 하되 사용 내용이 로그에 남고, 화면상에도 출력된다. - disabled : SELinux를 사용하지 않는 것이어서 당연히 보안에는 취약해진다.

DNS 서버

DNS 서버의 역할은 URL 이름을 IP 주소로 변경해주는 것이다. 예를 들어 웹 브라우저에서 http://www.naver.com을 입력한다면 바로 네이버 홈페이지로 접속되는 것이 아니라 /etc/resolv.conf 파일에 설정된 DNS 서버에게 www.naver.com URL의 IP 주소를 물어본다. DNS 서버가 해당 URL에 해당하는 IP 주소를 알려주면 그때서야 비로소 알아낸 IP 주소의 컴퓨터로 접속하는 것이다. 이러한 과정을 거치는 이유는 네트워크상에 있는 컴퓨터를 구분할 때 www.naver.com 같은 URL이 아닌 IP 주소가 중복되지 않는 유일한 식별자이기 때문이다. 결론적으로 DNS 서버가 고장 나면 www.naver.com 같은 URL을 사용해서 웹 서버에 접속할 수 없다는 사실을 기억하자.

네트워크 설정과 관련된 주요 파일

nmtui 명령어를 실행하고 나서 변경되는 관련 파일들이다. 중요한 파일들이므로 꼭 기억해두자. /etc/sysconfig/network - 네트워크의 기본 정보가 설정되어 있는 파일로 네트워크 사용 여부가 써 있다. /etc/sysconfig/network-scripts/ifcfg-ens32 - ens32 장치에 설정된 네트워크 정보가 모두 들어 있는 파일이다. /etc/resolv.conf - DNS 서버의 정보와 호스트 이름이 들어 있는 파일이다. /etc/hosts - 현 컴퓨터의 호스트 이름과 FQDN이 들어 있는 파일이다. nmtui 명령어를 사용하지 않아도, 위 4개 파일을 직접 편집하면 동일한 효과를 낼 수 있다. IP 주소, 게이트웨이 주소 등의 정보를 변경한 후에는 'systemctl restart network' 명령어를 실행해야 시스템에 적용되지만, /etc/resolv.conf의 nameserver 부분을 수정한 후에는 'systemctl restart network' 명령을 실행할 필요가 없다. 그 이유는 웹 브라우저나 'nslookup' 명령을 사용해 URL을 조회하는 경우에 실시간으로 /etc/resolv.conf 파일을 열어서 확인하기 때문이다.