▶ httpd.conf : 전역 환경 설정

ServerRoot “/app/apache”
 : 웹서버의 설정 파일, 로그파일 등이 저장되는 최상위 디렉토리
Timeout 120  //120초 뒤에 연결 끊어짐
 : 서버와 클라이언트의 연결 시에 아무런 메시지가 없을 때에 오류로 처리되는 초단위 시간
MaxClients 150  //서버가 수용할 수 있는 소켓 개수

 : 접속 가능한 최대 client 수
Startservers 20   //클라이언트가 접속 안 해도 20개 띄워놔서 제공할 프로세스 세팅
 : 초기 서버 프로세스의 수
MinSpareServers/MaxSpareServers  
 : 대기 상태의 프로세스 수
ServerName [명칭]
 : DNS나 hosts 파일에 등록된 이름을 지정한다.
ServerAdmin root@localhost
 : 관리자의 메일 주소

 

** 웹에서는 아이디랑 패스워드 이미 한번 입력하면 그때마다 확인을 계속하므로 계속 새로운 로그인 작업이 일어난다.

웹브라우저에서 로그인 정보를 저장하는 곳이 쿠키이다. 

서버에서 로그인 정보를 저장하는 곳은 세션이다.

 

▶ httpd.conf : 기본 서버 구성

ServerTokens Major|Minor|Min|Prod|OS|Full
 : 클라이언트에 보내는 응답에 포함될 서버의 정보에 대한 설정

  (Full은 권하지 않음)
DocumentRoot “/app/apache/htdocs” 
 : 웹서버의 홈 디렉토리
DirectoryIndex index.html index.java index.php
 : 메인 페이지 파일명
ErrorLog logs/error_log
 : 웹서버에 문제가 발생 시에 에러를 기록하는 로그파일.
CustomLog logs/access_log combind
 : 외부에서 접근한 기록에 대한 로그파일
UserDir public_html  
 : 사용자의 개인 홈 디렉터리 지정

 

▶ httpd.conf : Directory 설정

<Directory “/app/apache/htdocs”> … </Directory>
• 웹서버는 디렉토리 단위로 설정
ex)
<Directory "/app/apache/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Order allow, deny
Allow from all
</Directory>

  ** document root는 반드시 지정해준다.

 

option 항목

• ALL : 가능한 모든 옵션을 다 사용한다.
• None : 아무런 옵션도 없다.
• Indexes : 메인 페이지가 없는 경우 파일 목록을 보여준다.  //파일 목록 보여주는 것은 보안상 좋지 않음
• FollowSymLinks : 디렉토리의 심볼릭 링크를 이용한다.
• ExecCGI : CGI를 실행한다.


AllowOverride 항목  //아파치 자체가 사용자 계정 관리하는 것

• 디렉토리에 대한 apache 레벨에서의 접근 제한
• 사용자 인증 파일인 .htaccess 파일 사용 여부
• 현재 인증은 apache 레벨에서 구현하지 않는다.

 

Order 항목(2.2)

• 접근 권한 적용 순서
ex)
Order deny, allow  //deny먼저 지정 후 allow를 지정 (기본 정책은 deny, 예외는 allow)
Deny from all
Allow from 192.168.123.
- 192.168.123. 으로 시작하는 IP를 제외하고 모든 접속을 막는다.

 

Require 설정

Require all [denied | granted] : 기본 설정
Require [not] ip ip_주소 : IP별 설정
Require all granted
Require not ip 192.168.123.0/24
- 192.168.123.0 네트워크를 제외하고 모두 접속 허용

 

각 사용자의 개인 홈 디렉터리에 대한 설정 예

<Directory "/home/*/public_html">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<Directory "/home/*/public_html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>


더보기

실습

개인 홈페이지 만들고 개인 홈페이지 접속

개인 홈페이지 httpd.conf가 없음 (/httpd/extra 디렉토리에 있음 찾아서 쓰기)

 

가상 호스트 설정 (ip기반) 실습

실습 내용

www.st04.sec  > 192.168.10.133

www.st04.itc  >192.168.10.132

서로 다른 웹페이지가 열리게 설정할 것이다. 

 

각각 어디서든지 DNS 서버 지정하면 두 개의 웹페이지가 열리게 할 수 있다.

DNS server 192.168.10.131

webserver : 192.168.10.133, 192.168.10.132

 

< 작업 수행 과정 >

1) 가상 인터페이스 추가하여 ip 세팅

2) DNS 서버 도메인 추가

     www.st04.sec  > 192.168.10.133

     www.st04.itc  >192.168.10.132

3) 아파치 서버에서 서로 다른 홈페이지가 열리도록 설정

    www.st04.sec  > 192.168.10.133 디렉토리를 /home/httpd/html/133

    www.st04.itc  >192.168.10.132 디렉토리를 /home/httpd/html/132

 

1) ip 추가

ens32:0 파일을 하나 만들어서 수정할 것이다.

 

ens32:0 을 수정한다.

 

네트워크를 재시작하고 ip가 추가된 것을 확인한다.

 

2) DNS 서버 도메인 추가

     www.st04.sec  > 192.168.10.133

     www.st04.itc  >192.168.10.132

 

/etc/named.conf 파일에 st04.itc 설정을 추가한다.

 

# /var/named/st04.zone

 

# /var/named/st04_itc.zone

 

# /var/named/* 모두 그룹 소유자를 named로 변경한다.

 

named.service를 재시작한다.

 

host 명령을 이용해 확인한다.

 

3) 아파치 서버에서 서로 다른 홈페이지가 열리도록 설정

    www.st04.sec  > 192.168.10.133 디렉토리를 /home/httpd/html/133

    www.st04.itc  >192.168.10.132 디렉토리를 /home/httpd/html/132

 

 

# vi /app/apache/conf/httpd.conf

<VirtualHost 192.168.10.132>
 DocumentRoot /home/httpd/html/132
 ServerName 192.168.10.132
 <Directory "/home/httpd/html/132">
 Options Indexes FollowSymLinks
 Order allow,deny
 Allow from all
 </Directory>
</VirtualHost>

<VirtualHost 192.168.10.133>
 DocumentRoot /home/httpd/html/133
 ServerName 192.168.10.133
 <Directory "/home/httpd/html/133">
 Options Indexes FollowSymLinks
 Order allow,deny
 Allow from all
 </Directory>
</VirtualHost>

 

아파치 서비스를 재시작해준다.

 

각각 www.st04.sec/www.st04.itc/ 에 들어가면 잘 된 것을 확인할 수 있다. 

 

다른 페이지가 열리는지 확인이 어렵기 때문에 다음과 같은 작업을 수행한다. 

 

index.html 파일이 각 디렉토리 별로 없기 때문에 각 디렉토리에 index.html 파일을 만들어준다.

복사하는 명령을 이용해서 만든다.

 

각 index.html 파일 내용을 변경한다.

 

아파치 서비스를 재시작한다.

 

www.st04.sec/www.st04.itc/ 에 잘 설정된 것을 확인할 수 있다.

실습환경

webmaster (webmaster)

- 계정 : web 페이지 전체 관리자

- uid: 1601 (gid: 1600)

- home dir : /home/webmaster

- 다큐먼트 루트 DROOT : /home/httpd/html

- /home/webmaster 를 chroot 적용 (자기 홈 디렉토리 나가지 못하게)

- /home/webmaster/httpd/ 이렇게 마운트하기

- host 명 : www ( www.st04.sec/ )로 로 접속

 

호스트 명으로 브라우저에서 접속

host 명 : www ( www.st04.sec/ or https://www.st04.sec )로 로 접속

192.168.10.131 컴퓨터에서

# vi /var/named/st04.zone 에 www 호스트를 등록한다.

 

클라이언트 DNS 서버 주소를 192.168.10.131로 변경한다.

 

 

# vi /app/apache/conf/httpd.conf

ServerName localhost 라 지정한다.

 

아파치 서버를 재시작한다.

# /app/apache/bin/apachectl restart 

 

크롬 브라우저에서 www.st04.sec/ 로 접속이 되는 것을 확인할 수 있다.

재부팅시에도 아파치 서비스가 실행되도록 다음과 같이 추가해준다.

/etc/rc.d/rc.local 에 /app/apache/bin/apachectl start 추가한다.

 

httpd.conf 의 Document Root 설정

1) Web page 관리자 webmaster 생성

- 계정 : web 페이지 전체 관리자

- uid: 1601 (gid: 1600)

 

home dir : /home/webmaster

웹마스터 계정이 생성된 것을 확인할 수 있다.

 

2) 다큐먼트 루트 DROOT 지정할 디렉토리 생성 : /home/httpd/html

/home/httpd/html이 잘 생성된 것을 확인할 수 있다.

 

소유자를 webmaster 그룹 소유자도 webmaster로 변경한다.

 

3) 웹서버의 홈 디렉토리 /home/httpd/html로 설정한다.

# vi /app/apache/conf/httpd.conf

 

4) /home/webmaster 를 chroot 적용한다. (자기 홈 디렉토리 나가지 못하게)

# vi /etc/vsftpd/vsftpd.conf

 

chroot_list 에 webmaster 사용자를 추가한다.

# vi /etc/vsftpd/chroot_list

 

5) webmaster 계정만 ftp 접근 가능하도록 userlist를 이용해 사용자를 제한한다.

# vi /etc/vsftpd/vsftpd.conf

 

user_list 파일에 webmaster 사용자를 추가한다.

# vi /etc/vsftpd/user_list

 

6) webmaster는 chroot가 적용되어 있어서 외부 디렉토리로 이동을 못하므로 mount를 한다. 

- /home/webmaster/httpd/ 이렇게 마운트하기

마운트 하기 전에 webmaster에서 마운트 될 /home/webmaster/httpd 디렉토리를 생성한다.

 

webmaster은 chroot가 적용되어 있기 때문에 /home/httpd를 /home/webmaster/httpd 에 마운트 한다.

 

재부팅시에도 마운트가 잘 되기 위해 rc.local 파일에 마운트를 추가한다.

/etc/rc.d/rc.local 에 mount --bind /home/httpd /home/webmaster/httpd 추가

 

/etc/rc.d/rc.local 에 권한을 준다.

 

7) 변경된 내용을 적용하기 위해 vsftpd와 아파치 서비스 재시작한다.

# systemctl restart vsftpd

# /app/apache/bin/apachectl restart

 

8) 클라이언트에서 ftp로 webmaster 계정으로 접속한다.

클라이언트 192.168.10.130 컴퓨터에서 ftp 서버로 접속한다.

 

webmaster를 이용해 파일 업로드

/app/apache/htdocs/index.html 파일을 /home/httpd/html 아래로 복사한다.

 

권한을 준다.

 

index.html의 그룹 소유자와 권한을 변경한다.

 

클라이언트 192.168.10.130 컴퓨터에서 ftp서버로 접속후 cd /httpd/html로 이동

 

C:\Users\st04\sql 여기에 a.txt라는 파일을 생성 아무곳에서나 생성

 

C:\Class 여기에 hello 파일을 생성한다.

 

put을 이용해 a.txt가 있는 경로에서 a.txt를 index.html로 업로드한다.

 

put을 이용해 hello.txt가 있는 경로에서 hello.txt를 index.html로 업로드한다.

 

크롬 브라우저에서 www.st04.sec/ 로 접속하면 a.txt 파일 내용이 뜬다.

 

크롬 브라우저에서 www.st04.sec/ 로 접속하면 hello.txt 파일 내용이 뜬다.

 

192.168.10.138 컴퓨터에서 실행한다.

 

virtual Edit에 들어가 iso 파일을 넣어준다.

 

마운트 할 디렉토리 /dvd를 생성한다.

iso 파일이 들어있는 /dev/cdrom 을 /dvd에 마운트한다. 

 

잘 마운트 된 것을 확인할 수 있다.

 

/etc/yum.repos.d 디렉토리에 있는 파일을 모두 삭제한다.

 

/etc/yum.repos.d/local.repo 를 생성한다.

[local]
name=localRepo
baseurl=file:///dvd
enabled=1
gpgcheck=0

 

아래와 같은 명령어로 레파지토리를 생성한다.

 

#yum list 로 로컬 레파지토리가 생성된 것을 확인할 수 있다.

위와 같이 로컬 레파지토리를 확인할 수 있다.

▶ 단일 행 함수에서 사용하는 날짜 출력 형식

 

▶ 단일 행 함수에서 사용하는 숫자 출력 형식

 

▶ 변환 함수

출력포멧 지정할때 TO_CHAR

날짜 형식 입력할때 TO_DATE 꼭 입력하기

 

 

예제 1. 현재 날짜를 다양한 형식으로 출력해보자

SELECT TO_CHAR(sysdate, 'YYYY/MM/DD') 날짜,
TO_CHAR(sysdate, 'YYYY/MM/DD:HH24:MI:SS') 날짜,
TO_CHAR(sysdate, 'YY/MM/DD:HH:MI:SS AM') 날짜
FROM dual;

날짜                    날짜                    날짜
----------------------- ----------------------- -----------------------
2021/11/15              2021/11/15:16:23:55     21/11/15:04:23:55 오후


SELECT TO_CHAR(sysdate, 'DD Month YYYY') ToDay FROM DUAL;

TODAY
---------------
15 11월 2021


SELECT TO_CHAR(sysdate, 'DAY Mon YY') ToDay FROM DUAL;

TODAY
---------------
월요일 11월 21


SELECT TO_CHAR(sysdate, 'DY Mon YY') ToDay FROM DUAL;

TODAY
---------------
월 11월 21


SELECT TO_CHAR(sysdate, '"오늘은 "YYYY"년 "MM"월 "DD"일 입니다."') 날짜
FROM DUAL;


날짜
-----------------------
오늘은 2021년 11월 15일
 입니다.

 

예제 2. 10번 부서 사원의 입사일을 다음의 형식으로 검색한다.
'XXX 사원의 입사일은 XXXX년 XX월 XX일입니다.'

SELECT ename||' 사원의 입사일은 '||
TO_CHAR(hdate, 'YYYY"년 "MM"월 "DD"일 입니다."') 입사일
FROM emp
WHERE dno = '10';

입사일
------------------------------------------------------
문시현 사원의 입사일은 1991년 02월 01일 입니다.
남궁연호 사원의 입사일은 1993년 12월 13일 입니다.
김선유 사원의 입사일은 1998년 10월 17일 입니다.
권나현 사원의 입사일은 2015년 05월 21일 입니다.
김진성 사원의 입사일은 2008년 03월 13일 입니다.

 

예제 3. 다양한 형식으로 숫자를 출력해 보자

SELECT TO_CHAR(12345.678, '999,999.99999') num FROM dual;

NUM
----------------------------
  12,345.67800
  
  
SELECT TO_CHAR(12345.678, '099,999.999') num FROM dual;

NUM
------------------------
 012,345.678
 
 
 SELECT TO_CHAR(12345.678, '9,9999.9') num FROM dual; //소수 이하 자리수를 부족하게 지정하면 반올림 된다.

NUM
------------------
 1,2345.7
 
 
 SELECT TO_CHAR(12345.678, '9,999.9') num FROM dual;

NUM
----------------
########


SELECT TO_CHAR(1234, '$999,999') num FROM dual;

NUM
------------------
   $1,234
   
   
SELECT TO_CHAR(1234, 'L999,999') num FROM dual;

NUM
------------------------------------
          ₩1,234
          

SELECT TO_CHAR(-1234, '999,999MI') num FROM dual;

NUM
----------------
  1,234-
  
  
SELECT TO_CHAR(123456789, '9.999EEEE') num FROM dual;

NUM
----------------------
  1.235E+08

 

예제 3. 10번 부서 사원의 보너스가 급여의 몇 퍼센트 인지 검색한다.
- 급여는 월간 급여이고 보너스는 연간 보너스이다.
- 보너스가 NULL인 경우 0으로 환원해서 검색한다.

SELECT eno 사번, ename 이름,
TO_CHAR(NVL(comm,0)/(sal*12)*100, '90.99')||'%' 급여_비율
FROM emp
WHERE dno='10';

사번    이름       급여_비율
------- ---------- --------------
1001    문시현       0.96%
2001    남궁연호     0.42%
3001    김선유       0.78%
0269    권나현       6.09%
0401    김진성       2.60%

 

예제 4. 1992년 이전에 입사한 사원의 정보를 검색해 보자

SELECT eno 사번, ename 이름, hdate 입사일
FROM emp
WHERE hdate < TO_DATE('19920101','YYYYMMDD');

사번    이름       입사일
------- ---------- ----------
0001    안영희     1991/01/01
0201    안영숙     1991/02/01
0202    손하늘     1991/12/01
0302    박선경     1991/03/02
1001    문시현     1991/02/01

 

실습

1. 학생의 평균 평점을 다음 형식에 따라 소수점 이하 두 자리까지 검색한다.
  'XXX 학생의 평균 평점은 x.xx입니다.'

SELECT sname||' 학생의 평균 평점은 '||TO_CHAR(avr, '9.99')||'입니다.' "학생들의 평균평점"
FROM student;

학생들의 평균평점
----------------------------------------------------------------------------------------------------
정동상 학생의 평균 평점은   .95입니다.
유태지 학생의 평균 평점은  3.28입니다.
정욱상 학생의 평균 평점은  1.44입니다.
정욱주 학생의 평균 평점은   .95입니다.
정남윤 학생의 평균 평점은  3.23입니다.
한현석 학생의 평균 평점은  2.45입니다.
김용서 학생의 평균 평점은  1.48입니다.


SELECT sname||' 학생의 평균 평점은 '||TO_CHAR(avr, '90.99')||'입니다.' "학생들의 평균평점" 
FROM student;
// 앞에 0 출력해주기위해

학생들의 평균평점
----------------------------------------------------------------------------------------------------
정동상 학생의 평균 평점은   0.95입니다.
유태지 학생의 평균 평점은   3.28입니다.
정욱상 학생의 평균 평점은   1.44입니다.
정욱주 학생의 평균 평점은   0.95입니다.
정남윤 학생의 평균 평점은   3.23입니다.
한현석 학생의 평균 평점은   2.45입니다.
김용서 학생의 평균 평점은   1.48입니다.


2. 교수의 부임 일을 다음 형식으로 검색한다.
  'XXX 교수의 부임일은 YYYY년 MM월 DD일입니다.'

SELECT pname||' 교수의 부임일은 '||TO_CHAR(hiredate, 'YYYY"년 "MM"월 "DD"일 입니다."') "교수 부임일"
FROM professor;

교수 부임일
----------------------------------------------------------------------------------------------------
송강 교수의 부임일은 2002년 08월 12일 입니다.
시진영 교수의 부임일은 1991년 02월 01일 입니다.
장청아 교수의 부임일은 2003년 05월 20일 입니다.
이초아 교수의 부임일은 2010년 07월 06일 입니다.
문규식 교수의 부임일은 2005년 02월 11일 입니다.
이규진 교수의 부임일은 1998년 10월 07일 입니다.
이준영 교수의 부임일은 1991년 10월 04일 입니다.


3. 교수 중에 3월에 부임한 교수의 명단을 검색한다.

SELECT pname "3월에 부임한 교수이름", hiredate 부임일
FROM professor
WHERE TO_CHAR(hiredate, 'MM')= '03';

3월에 부임한 교수이름          부임일
------------------------------ ----------
하영진                         2004/03/02


4. 화학과 1학년 학생들의 4.5 환산 평점을 다음 형식에 따라 소수점 이하 두 자리까지 검색한다.
'XXX 학생의 4.5 환산 평점은 x.xx입니다.'

SELECT major 학과, syear 학년, 
sname||' 학생의 4.5 환산 평점은 '||TO_CHAR(avr*4.5/4, '90.99')||'입니다.' "4.5 환산 평점"
FROM student
WHERE major='화학'
AND syear = 1;


학과          학년   4.5 환산 평점
------- ---------- ----------------------------------------------------
화학             1  김람석 학생의 4.5 환산 평점은   4.01입니다.
화학             1  남궁경아 학생의 4.5 환산 평점은   2.66입니다.

 

▶ 숫자 함수

숫자 함수는 숫자를 인자로 사용하고 결과 값도 숫자를 반환하는 함수이다.

예제 1. 다양한 숫자 함수를 이용한 결과를 확인한다.

SELECT ROUND(98.765), TRUNC(98.765),
ROUND(98.765,2), TRUNC(98.765,2)
FROM dual;

ROUND(98.765) TRUNC(98.765) ROUND(98.765,2) TRUNC(98.765,2)
------------- ------------- --------------- ---------------
           99            98           98.77           98.76
           

SELECT MOD(19,3), MOD(-19,3)
FROM dual;

 MOD(19,3) MOD(-19,3)
---------- ----------
         1         -1
         

SELECT CEIL(3.5), FLOOR(3.5)
FROM dual;

 CEIL(3.5) FLOOR(3.5)
---------- ----------
         4          3

 

예제 2. 10번 부서의 년봉을 계산한다. 단 100 단위 미만은 절삭한다.

SELECT eno, ename, TRUNC(sal*12+NVL(comm,0),-2) 년봉
FROM emp
WHERE dno='10';

ENO     ENAME            년봉
------- ---------- ----------
1001    문시현          54500
2001    남궁연호        47600
3001    김선유          38700
0269    권나현          33100
0401    김진성          39400

 

 

▶ 날짜 함수와 날짜 연산의 이해

예제 3. 현재 날짜를 검색하고 날짜 출력 양식을 수정해 보자.

ALTER SESSION SET nls_date_format = 'YYYY/MM/DD:HH24:MI:SS';
SELECT sysdate FROM dual;

SYSDATE
-------------------
2021/11/15:16:47:44


ALTER SESSION SET nls_date_format = 'YYYY/MM/DD';
SELECT sysdate FROM dual;

SYSDATE
----------
2021/11/15

 

예제 4. 오늘 날짜, 입사 일자, 입사일로부터 오늘까지 기간, 입사일 이후 100째 되는날 등을 검색하고 날짜 연산의 결과를 살펴보자.

SELECT sysdate 오늘, hdate 입사일,
TRUNC(sysdate)-TRUNC(hdate)+1 근무일, hdate+99 "100일"
FROM emp;

오늘       입사일         근무일 100일
---------- ---------- ---------- ----------
2021/11/15 1991/01/01      11277 1991/04/10
2021/11/15 1991/02/01      11246 1991/05/11
2021/11/15 1991/12/01      10943 1992/03/09
2021/11/15 1992/02/01      10881 1992/05/10
2021/11/15 1991/03/02      11217 1991/06/09
2021/11/15 1991/02/01      11246 1991/05/11
2021/11/15 1992/03/03      10850 1992/06/10

 

※ 날짜 함수

 

예제 5. 숫자와 날짜를 반올림하거나 잘라내고 출력해본다.

SELECT sysdate, ROUND(sysdate,'YY') 년,
ROUND(sysdate,'MM') 월,
ROUND(sysdate,'DD') 일
FROM dual;

SYSDATE    년         월         일
---------- ---------- ---------- ----------
2021/11/15 2022/01/01 2021/11/01 2021/11/16

SELECT sysdate, TRUNC(sysdate,'YY') 년,
TRUNC(sysdate,'MM') 월,
TRUNC(sysdate,'DD') 일
FROM dual;

SYSDATE    년         월         일
---------- ---------- ---------- ----------
2021/11/15 2021/01/01 2021/11/01 2021/11/15

 

예제 6. 문시현이 오늘까지 일한 일수를 검색한다.

SELECT ename, TRUNC(sysdate)-TRUNC(hdate)+1 DAY
FROM emp
WHERE ename='문시현';

ENAME             DAY
---------- ----------
문시현          11246

 

예제 7. 20번 부서 직원들이 현재까지 근무한 개월 수를 검색한다.

SELECT eno, ename, TRUNC(MONTHS_BETWEEN(sysdate,hdate)) 근무_개월
FROM emp
WHERE dno = '20';

ENO     ENAME       근무_개월
------- ---------- ----------
1002    김주란            356
2002    제갈민            306
3002    권아현            249
0120    김경현            266

 

예제 8. 20번 부서원들이 입사 100일째 되는 날과 10년째 되는 날을 검색한다.

SELECT eno, ename, hdate 입사일,
hdate+99 "100일", ADD_MONTHS(hdate,120) "10년"
FROM emp
WHERE dno = '20';

ENO     ENAME      입사일     100일      10년
------- ---------- ---------- ---------- ----------
1002    김주란     1992/03/03 1992/06/10 2002/03/03
2002    제갈민     1996/04/30 1996/08/07 2006/04/30
3002    권아현     2001/01/29 2001/05/08 2011/01/29
0120    김경현     1999/09/05 1999/12/13 2009/09/05

 

예제 9. 20번 부서원들이 입사한 이후 첫 번째 일요일을 검색한다.

SELECT eno, ename, hdate, NEXT_DAY(hdate,'일요일') Sunday
FROM emp
WHERE dno = '20';

ENO     ENAME      HDATE      SUNDAY
------- ---------- ---------- ----------
1002    김주란     1992/03/03 1992/03/08
2002    제갈민     1996/04/30 1996/05/05
3002    권아현     2001/01/29 2001/02/04
0120    김경현     1999/09/05 1999/09/12

 

예제 10. 20번 부서원들의 입사한 달의 마지막 날짜와 입사한 달에 근무 일수를 검색한다.

SELECT eno, ename, hdate, LAST_DAY(hdate) 마지막날,
LAST_DAY(TRUNC(hdate))-TRUNC(hdate)+1 "마지막달 근무일수"
FROM emp
WHERE dno = '20';

ENO     ENAME      HDATE      마지막날   마지막달 근무일수
------- ---------- ---------- ---------- -----------------
1002    김주란     1992/03/03 1992/03/31                29
2002    제갈민     1996/04/30 1996/04/30                 1
3002    권아현     2001/01/29 2001/01/31                 3
0120    김경현     1999/09/05 1999/09/30                26

 

실습 (모두 단일 행 함수를 이용한다.)

1. 교수들이 부임한 달에 근무한 일수는 몇 일인지 검색한다.

SELECT pno 교수번호, pname 교수이름, hiredate 부임일자, 
	LAST_DAY(TRUNC(hiredate))-TRUNC(hiredate)+1 근무일수
FROM professor;

교수번호  교수이름   부임일자     근무일수
--------- ---------- ---------- ----------
1001      송강       2002/08/12         20
1004      시진영     1991/02/01         28
1006      장청아     2003/05/20         12
1007      이초아     2010/07/06         26
1008      문규식     2005/02/11         18
1010      이규진     1998/10/07         25
1009      이준영     1991/10/04         28


2. 교수들의 오늘까지 근무한 주가 몇 주인지 검색한다.

SELECT pno 교수번호, pname 교수이름, hiredate 부임일자, 
	TRUNC((TRUNC(sysdate)-TRUNC(hiredate)+1)/7,0) 근무주수 // 근무일수/7일 한 후 버림
FROM professor;

교수번호  교수이름   부임일자     근무주수
--------- ---------- ---------- ----------
1001      송강       2002/08/12       1005
1004      시진영     1991/02/01       1606
1006      장청아     2003/05/20        965
1007      이초아     2010/07/06        593
1008      문규식     2005/02/11        874
1010      이규진     1998/10/07       1205
1009      이준영     1991/10/04       1571


3. 1991년에서 1995년 사이에 부임한 교수를 검색한다.

SELECT pno 교수번호, pname 교수이름, hiredate 부임일자
FROM professor
WHERE hiredate BETWEEN '1991/01/01' AND '1995/12/31';

교수번호  교수이름   부임일자
--------- ---------- ----------
1004      시진영     1991/02/01
1009      이준영     1991/10/04
1036      성현수     1993/07/13
1031      김서령     1991/10/09


4. 학생들의 4.5 환산 평점을 검색한다. (단 소수 이하 둘째 자리까지)

SELECT sno, sname, avr "4.0 평점", TRUNC(avr*4.5/4, 2) "4.5 평점"
FROM student;

SNO     SNAME        4.0 평점   4.5 평점
------- ---------- ---------- ----------
915301  정동상            .95       1.06
905301  유태지           3.28       3.69
905302  정욱상           1.44       1.62
915303  정욱주            .95       1.06
923903  정남윤           3.23       3.63
923904  한현석           2.45       2.75
933901  김용서           1.48       1.66


5. 사원들이 일한 날짜에 대해서만 급여를 받는다면 급여가 현재와 동일하다는 조건에서 입사한 달에 급여는 얼마나 지급되었을지 검색한다.

수정중------------

SELECT eno 사번, ename 이름, sal 급여, hdate 입사일, (LAST_DAY(TRUNC(hdate))-TRUNC(hdate)+1)"입사한달 급여"
FROM emp;

//(LAST_DAY(TRUNC(hdate))-TRUNC(hdate)+1) 입사한 달 일수


6. 사원들의 오늘까지 근무 기간이 몇 년 몇 개월 몇 일인지 검색한다.

수정중------------

SELECT eno 사번, ename 이름, hdate 입사일, 
  '근무기간: '||TRUNC((MONTHS_BETWEEN(sysdate, hdate))/12)||'년 '||
  TRUNC(MONTHS_BETWEEN(sysdate, hdate))-TRUNC((MONTHS_BETWEEN(sysdate, hdate))/12)*12||'개월 '||
  ||'일'
FROM emp;

 

• HTTP : Hyper text transfer protocol
• Web application layer protocol
• Client/server model
  - Client : browser는 웹용 client app, 질의를 전달하고 요구한 web page를 보여주는 기능을 담당
  - Server : Web server로 client의 질의에 응답하고 여러 web object를 client에 전송한다.
• HTTP 1.0 : RFC 1945
• HTTP 1.1 : RFC 2068

Apache
• 공식 홈페이지: www.apache.org
• 1995년 NCSA httpd 1.3 을 기반으로 탄생
• GNU GPL 라이센스를 통해 무료 배포
• 가장 높은 웹 서버 소프트웨어 시장 점유율
• 현재 2.2.X 버전이 발표
• 빠른 버그패치와 공개로 보안성이 뛰어남
• 거의 모든 플랫폼을 지원

 

사전과정

아래 패키지를 설치한다.

yum install -y gcc gcc-c++ cmake apr apr-util zlib-devel wget net-gools expat-devel

 

CentOS7에서는 레파지토리가 있어서 바로 설치하면 되지만 SULinux 는 레파지토리가 없어 레파지토리 생성 후 다운로드한다. 아래 local repository 생성한다.

 

리눅스 local repository 생성

192.168.10.138 컴퓨터에서 실행한다. 더보기 virtual Edit에 들어가 iso 파일을 넣어준다. 마운트 할 디렉토리 /dvd를 생성한다. iso 파일이 들어있는 /dev/cdrom 을 /dvd에 마운트한다. 잘 마운트 된 것을 확..

lemonandgrapefruit.tistory.com

 

아파치 서버 설치 과정 (아래 과정으로 설치!!)

① httpd-2.2.34.tar.gz 버전을 /usr/local/ 에 다운 (ftp 192.168.10.11에 접속해 다운 /dev/apm에 있음)
② # cd /usr/local/
③ # tar xvfz httpd-2.2.34.tar.gz
④ # cd ./httpd-2.2.34
⑤ # ./configure --prefix=/app/apache --enable-so
⑥ # make
⑦ # make install

 

주요 구성 파일
• 실행 데몬 : /app/apache/bin/httpd
• 관리 스크립트 : /app/apache/bin/apachectl
• 설정 파일 : /app/apache/conf/httpd.conf
• 초기 서비스 파일 : /app/apache/htdocs/index.html

 

컴파일 옵션에 따라 달라질 수 있다.

 

추가 설정
/app/apache/conf/httpd.conf에 [ ServerName localhost ]를 추가

vi /app/apache/conf/httpd.conf

 

Apache 서버 구동

# /app/apache/bin/apachectl start (stop | restart)

크롬에서 192.168.10.133 으로 접속하면 잘 접속되는 것을 확인할 수 있다.

 

httpd.conf 파일의 구문 점검
# /app/apache/bin/httpd -t
• httpd.conf 파일의 문법상의 오류를 찾아준다.
• “Syntax OK” : 오류 없음

 

3개의 섹션으로 구성
• 전역 환경 설정 부분
• 기본 서버 구성
• 가상 호스트 부분

 

단일 행 함수의 종류
- 문자 함수
- 숫자 함수
- 날짜 함수
- 변환 함수
- 일반 함수

 

▶ 문자 함수

* 대소문자 변환 함수

 

예제 1. ERP 부서가 있는 지역을 검색한다.

SELECT loc ERP_부서_지역
FROM dept
WHERE LOWER(dname)='erp';

ERP_부서_지역
------------------
서울

 

 

예제 2. 'XX 부서는 XX에 위치합니다.' 형식으로 부서 정보를 검색한다.

SELECT INITCAP(dname) || ' 부서는 ' || loc || '에 위치합니다.' 부서_위치
FROM dept;

부서_위치
-------------------------------------
총무 부서는 서울에 위치합니다.
회계 부서는 서울에 위치합니다.
Erp 부서는 서울에 위치합니다.
Isp 부서는 부산에 위치합니다.
Itea 부서는 광주에 위치합니다.
Crm 부서는 대전에 위치합니다.
Pos 부서는 에 위치합니다.

 

* TRIM(ename) : ename 컬럼의 앞 뒤ㅣ 공백 제거

 

 

예제 3. 부서의 명과 위치를 하나의 컬럼으로 검색한다.

SELECT CONCAT(dname,' '|| loc) CONCAT
FROM dept;

CONCAT
----------------
총무 서울
회계 서울
ERP 서울
ISP 부산
ITEA 광주
CRM 대전
POS

 

예제 4. 부서명과 문자열의 길이를 출력한다.

SELECT dname, LENGTH(dname), LENGTHB(dname)
FROM dept;

DNAME   LENGTH(DNAME) LENGTHB(DNAME)
------- ------------- --------------
총무                2              6
회계                2              6
ERP                 3              3
ISP                 3              3
ITEA                4              4
CRM                 3              3
POS                 3              3

 

예제 5. substr 함수를 이용해서 컬럼에 일부 내용만을 검색한다.

SELECT ename, SUBSTR(ename,2),
SUBSTR(ename,-2),
SUBSTR(ename,1,2),
SUBSTR(ename,-2,2)
FROM emp;

ENAME      SUBSTR(ENAME,2)  SUBSTR(ENAME,-2) SUBSTR(ENAME,1,2 SUBSTR(ENAME,-2,
---------- ---------------- ---------------- ---------------- ----------------
안영희     영희               영희             안영             영희

 

예제 6. 다양한 방법으로 'a'가 나오는 위치를 출력한다.

SELECT INSTR('database','a'),
	INSTR('database','a',3),
	INSTR('database','a',1,3)
FROM dual;

INSTR('DATABASE','A') INSTR('DATABASE','A',3) INSTR('DATABASE','A',1,3)
--------------------- ----------------------- -------------------------
                    2                       4                         6

 

예제 7. TRIM 함수를 이용 다양한 방법으로 문자열을 검색한다.

SELECT TRIM('남' from '남기남'),
TRIM(leading '남' from '남기남'),
TRIM(trailing '남' from '남기남'),
TRIM(' 남기남 ')
FROM dual;

TRIM(' TRIM(LEADING TRIM(TRAILIN TRIM('남기남')
------ ------------ ------------ ------------------
기     기남         남기         남기남

 

예제 8. 이름과 급여를 각각 10 컬럼으로 검색한다.

SELECT RPAD(ename, 10, '*'), LPAD(sal, 10, '*')
FROM emp;

RPAD(ENAME,10,'*')  LPAD(SAL,10,'*')
------------------  -------------------
안영희****           안영숙****
******4800           ******3900

 

예제 9. 부서명의 마지막 글자를 제외하고 검색한다.

SELECT dname, SUBSTR(dname, 1, LENGTH(dname)-1) dname
FROM dept;

DNAME   DNAME
------- -------
총무    총
회계    회
ERP     ER
ISP     IS
ITEA    ITE
CRM     CR
POS     PO

 

 

* 문자 치환 함수

 

 

예제 10. 형식이 비슷한 TRANSLATE와 REPLACE를 동일한 치환을 통해 비교해 보자

SELECT TRANSLATE('World of Warcraft', 'Wo', '--') Translate,
REPLACE('World of Warcraft', 'Wo', '--') Replace
FROM dual;

TRANSLATE                          REPLACE
---------------------------------- ----------------------------------
--rld -f -arcraft                  --rld of Warcraft

 

실습 (모두 단일 행 함수를 이용한다.)

1. 이름이 두 글자인 학생의 이름을 검색한다.

SELECT sno 학번, sname 이름
FROM student
WHERE LENGTH(sname) = 2;

학번    이름
------- ----------
925301  김환
945604  권현
938204  최현


2. '강' 씨 성을 가진 학생의 이름을 검색한다.

SELECT sno 학번, sname 이름
FROM student
WHERE SUBSTR(sname, 1, 1) = '강';

학번    이름
------- ----------
915605  강은혜
915601  강태용
925602  강아영


3. 교수의 지위를 한글자로 검색한다.(ex. 조교수 → 조)

SELECT pno 교수번호, pname 이름, SUBSTR(orders, 1, 1) 지위
FROM professor;

교수번호  이름       지위
--------- ---------- -------
1001      송강       정
1004      시진영     부
1006      장청아     부
1007      이초아     조
1008      문규식     조
1010      이규진     정
1009      이준영     정


4. 일반 과목을 기초 과목으로 변경해서 모든 과목을 검색한다. (ex. 일반화학 → 기초화학)

SELECT cno 과목번호, REPLACE(cname, '일반', '기초') 과목이름
FROM course;

과목번호  과목이름
--------- ------------
1211      기초화학실험
1212      기초화학
1213      유기화학
1214      무기화학
1216      환경화학
1217      고분자화학
1218      생화학

과목번호  과목이름
--------- ------------
1220      기초물리
1223      자기학
1226      양자물리학
1227      이학수학
1228      위상수학
2357      유기물리학
2358      식물학


5. 만일 입력 실수로 student 테이블의 sname 컬럼에 데이터가 입력될 때 문자열 마지막에 공백이 추가 되었다면 검색할 때 이를 제외하고 검색하는 SELECT문을 작성한다.

SELECT sno 학번, TRIM(trailing FROM sname) 이름, 
LENGTH(sname) 공백제거전, LENGTH(TRIM(trailing FROM sname)) 공백제거후
FROM student;

학번    이름       공백제거전 공백제거후
------- ---------- ---------- ----------
915301  정동상              3          3
905301  유태지              3          3
905302  정욱상              3          3
915303  정욱주              3          3
923903  정남윤              3          3
923904  한현석              3          3
933901  김용서              3          3


6. 직원의 연봉을 10자리로 검색한다. 단 공백은 임의의 채움 문자로 채워 넣는다.

SELECT eno 사번, ename 이름, LPAD(sal*12+NVL(comm,0), 10, '#') 연봉
FROM emp;

사번    이름       연봉
------- ---------- ---------------
0201    안영숙     #####48800
0202    손하늘     #####43100
0301    이승철     #####40800
0302    박선경     #####39600
1001    문시현     #####54520
1002    김주란     #####49530


7. 학생의 이름을 검색한다. 단 성이 '심'인 학생은 성을 '사마' 로 바꾸어 검색한다.

SELECT sno 학번, sname 원래이름, REPLACE(sname, '심', '사마') 변경이름
FROM student;

학번    원래이름   변경이름
------- ---------- ----------
925603  최지현     최지현
925604  김가원     김가원
935601  독고현아   독고현아
935602  윤희주     윤희주
935604  권석현     권석현
935605  한지우     한지우
945601  심정용     사마정용

학번    원래이름   변경이름
------- ---------- ----------
913904  이호란     이호란
923901  서윤훈     서윤훈
923902  김호야     김호야
914503  김대현     김대현
914504  심빈경     사마빈경
948201  이창지     이창지
948202  김성지     김성지

 

집합 연산자

집합 연산자의 종류

 

SELECT ...
[UNION ALL | UNION | INTERSECT | MINUS]
SELECT ...

 

* 카디널리티 (튜플 수 : 열)

* 데이터베이스 성능 : 마지막 데이터를 읽는 시간

 

※ 데이터 검색시 데이터 타입이 다를 경우 NULL을 검색조건에 넣어준다.

SELECT eno, ename, NULL hiredate, comm, sal
FROM emp
UNION
SELECT pno, pname, hiredate, NULL,NULL
FROM professor
ORDER BY hiredate;

ENO     ENAME      HIREDATE         COMM        SAL
------- ---------- ---------- ---------- ----------
1030    김동평     2002/02/15
1001    송강       2002/08/12
1006    장청아     2003/05/20
1038    하영진     2004/03/02
1008    문규식     2005/02/11
1033    박삭광     2005/07/14
1029    주동평     2006/01/26

ENO     ENAME      HIREDATE         COMM        SAL
------- ---------- ---------- ---------- ----------
1016    호연작     2009/10/21
1007    이초아     2010/07/06
1017    최무송     2011/01/24
0001    안영희                         0       4800
0120    김경현                      2500       4000
0201    안영숙                      2000       3900
0202    손하늘                       980       3510

 

예제 1. 2000년 이후에 입사한 사원과 부임한 교수의 명단을 검색한다.

union all - 중복 포함

SELECT pno 번호, pname 이름, hiredate 입사일_부임일
FROM professor
WHERE hiredate >= '2000/01/01'
UNION ALL
SELECT eno, ename, hdate
FROM emp
WHERE hdate >= '2000/01/01';

번호             이름       입사일_부
---------------- ---------- ----------
1001             송강       2002/08/12
1006             장청아     2003/05/20
1007             이초아     2010/07/06
1008             문규식     2005/02/11
1012             이영준     2000/05/18
1016             호연작     2009/10/21
1027             임충원     2001/06/03

 

union - 중복 제거

SELECT pno 번호, pname 이름, hiredate 입사일_부임일
FROM professor
WHERE hiredate > '2000/01/01'
UNION
SELECT eno, ename, hdate
FROM emp
WHERE hdate > '2000/01/01';

번호             이름       입사일_부
---------------- ---------- ----------
0269             권나현     2015/05/21
0309             김선유     2011/01/03
0401             김진성     2008/03/13
0702             김민지     2017/01/09
0801             천유정     2000/10/09
1001             송강       2002/08/12
1006             장청아     2003/05/20

 

예제 2. 제갈씨 성을 가진 사원 중에 지원 업무를 하지 않는 사원을 검색한다.

SELECT eno, ename, job
FROM emp
WHERE ename LIKE '제갈%'
MINUS
SELECT eno, ename, job
FROM emp
WHERE job = '지원';

ENO     ENAME      JOB
------- ---------- -------
2002    제갈민     개발

 

예제 3. 화학, 물리학과 학생들 중에 학점이 3.0 이상인 학생을 검색한다.

SELECT sno 학번, sname 이름, major 학과, avr 성적 
FROM student
WHERE major IN ('화학','물리')
INTERSECT
SELECT sno, sname, major, avr FROM student
WHERE avr >= 3;

학번    이름       학과          성적
------- ---------- ------- ----------
905301  유태지     화학          3.28
914502  문수보     물리          3.33
914504  심빈경     물리          3.33
924501  권석복     물리             4
924505  서찬호     물리             3
925301  김환       화학          3.58
934504  갑서진     물리          3.22

 

실습

1. 화학과 학생과 교수를 검색한다. (집합 연산자를 이용한다.)

SELECT sno 번호, sname 이름, major 학과
FROM student
WHERE major = '화학'
UNION
SELECT pno, pname, section
FROM professor
WHERE section = '화학';

번호    이름       학과
------- ---------- -------
1001    송강       화학
1004    시진영     화학
1006    장청아     화학
1007    이초아     화학
1008    문규식     화학
905301  유태지     화학
905302  정욱상     화학


2. 정교수의 명단과 모델링이 업무인 직원의 이름, 입사일(부임일)을 검색한다.

SELECT pno 번호, pname 이름, hiredate 입사일, orders 직위_업무
FROM professor
WHERE orders = '정교수'
UNION
SELECT  eno, ename, hdate, job
FROM emp
WHERE job = '모델링';

번호    이름       입사일     직위_업무
------- ---------- ---------- ---------
1001    문시현     1991/02/01 모델링
1001    송강       2002/08/12 정교수
1002    김주란     1992/03/03 모델링
1003    양선호     1995/02/21 모델링
1009    이준영     1991/10/04 정교수
1010    이규진     1998/10/07 정교수
1021    왕사진     1997/02/17 정교수

번호    이름       입사일     직위_업무
------- ---------- ---------- ---------
1029    주동평     2006/01/26 정교수
1030    김동평     2002/02/15 정교수
1033    박삭광     2005/07/14 정교수
1035    장관용     1985/07/28 정교수

FTP 사용자 제한

user_list를 이용한 사용자 제한 설정

- userlist_file(/etc/vsftpd/user_list)에 등록된 계정에 대한 접속 제어는 userlist_enable과 userlist_deny에 따라 결정.

userlist_enable=YES => /etc/vsftpd/user_list를 활성화

userlist_enable=NO => /etc/vsftpd/user_list를 비활성화

userlist_deny=YES => /etc/vsftpd/user_list에 등록된 사용자를 거부목록으로 사용

userlist_deny=NO => /etc/vsftpd/user_list에 등록된 사용자를 거부목록으로 사용하지않음

- userlist_enable의 default는 NO지만 yum 명령어를 통해 설치된 경우 YES로 설정

 

CASE 1 : userlist_enable = YES, userlist_deny=YES

CASE 2 : userlist_enable = YES, userlist_deny=NO

CASE 3 : userlist_enable = NO, userlist_deny=YES

CASE 4 : userlist_enable = NO, userlist_deny=NO

 

CASE 1 : userlist_enable = YES, userlist_deny=YES

1) /etc/vsftpd/vsftpd.conf 파일에 userlist_enable=YES와 userlist_deny=YES 설정

 

2) /etc/vsftpd/user_list에 계정 st만 추가(te는 추가하지 않는다.)

 

3) 변경된 내용을 적용하기 위해 ftp 서비스를 재시작

 

4) 등록된 계정 st로 ftp 접속 불가능

 

5) 등록하지 않은 te로 ftp 접속 가능

 

▶ user_list 파일에 등록된 사용자는 접속 불가능

 user_list 파일에 등록되지 않은 사용자는 접속 가능

 

CASE 2 : userlist_enable = YES, userlist_deny=NO

1) /etc/vsftpd/vsftpd.conf 파일에 userlist_enable=YES와 userlist_deny=NO 설정

 

2) /etc/vsftpd/user_list에 계정 st만 추가(te는 추가하지 않는다.)

 

3) 변경된 내용을 적용하기 위해 ftp 서비스를 재시작

 

4) 등록된 계정 st로 ftp 접속 가능

5) 등록하지 않은 te로 ftp 접속 불가능

 

▶ user_list 파일에 등록된 사용자는 접속 가능

 user_list 파일에 등록되지 않은 사용자는 접속 불가능

 

 

CASE 3 : userlist_enable = NO, userlist_deny=YES

1) /etc/vsftpd/vsftpd.conf 파일에 userlist_enable=YES와 userlist_deny=YES 설정

 

2) /etc/vsftpd/user_list에 계정 st만 추가(te는 추가하지 않는다.)

 

3) ftp 서비스를 재시작

 

4) 등록된 계정 st로 ftp 접속 가능

 

5) 등록하지 않은 te로 ftp 접속 가능

 

▶ user_list 파일에 등록된 사용자는 접속 가능

 user_list 파일에 등록되지 않은 사용자는 접속 가능

 

CASE 4 : userlist_enable = NO, userlist_deny=NO

1) /etc/vsftpd/vsftpd.conf 파일에 userlist_enable=YES와 userlist_deny=YES 설정

 

2) /etc/vsftpd/user_list에 계정 st만 추가(te는 추가하지 않는다.)

 

3) 변경된 내용을 적용하기 위해 ftp 서비스를 재시작

 

4) 등록된 계정 st로 ftp 접속 가능

 

5) 등록하지 않은 te로 ftp 접속 가능

 

▶ user_list 파일에 등록된 사용자는 접속 가능

 user_list 파일에 등록되지 않은 사용자는 접속 가능

 

결과

  userlist_enable userlist_deny 의미
CASE 1 YES YES user_list파일에 등록된 사용자 접속 불가능
CASE 2 YES NO user_list파일에 등록된 사용자만 접속 가능
CASE 3 NO YES userlist_enable이 No로 설정시
userlist_deny설정은 의미 X, userlist_file은 사용 X
→ user_enable로 인해 userlist_file이 비활성화
CASE 4 NO NO

 

ftpusers를 이용한 사용자 제한 설정

- PAM(pluggable Authentication Module)에 의한 접속 제어는 userlist를 이용한 방법과 유사

- /etc/pam.d/vsftpd 파일에 접속 제한 방식을 설정하고 접속이 제한된 계정의 목록은 ftpusers 파일을 이용

- vsftpd 서버의 PAM 제어를 위한 서비스명을 등록한다. 등록된 이름으로 /etc/pam.d/에 설정파일이 생성

pam_service_name = vsftpd ( /etc/vsftpd/vsftpd.conf 파일안)

 

/etc/vsftpd/vsftpd.conf

 

- /etc/pam.d/vsftpd 파일 설정에 따라 제한 설정이 달라진다. 이때 sense=deny를 sense=allow 라 변경하면

ftpuser 파일에 등록된 사용자만 ftp 서버 접속이 허용된다.

 

/etc/pam.d/vsftpd
: sense [deny | allow] 설정에 따라 /etc/vsftpd/ftpusers설정이 바뀐다.
• Deny : ftpusers에 등록된 계정 ftp 접속 불가능
• Allow : ftpusers에 등록된 계정 ftp 접속 허용


1) sense = deny인 경우

 

/etc/vsftpd/ftpusers 에 있는 계정은 허용 불가능

 

ftpusers에 등록된 계정 st는 ftp 접속 불가능

 

ftpusers에 등록되지 않은 계정 te는 ftp 접속 허용

 

2) sense = allow인 경우

 

/etc/vsftpd/ftpusers 에 있는 계정만 허용 가능

 

ftpusers에 등록되지 않은 계정 te는 ftp 접속 불가능

 

IP 별로 접속 제한

standalone 인 경우만 사용


listen=YES  > standalone 사용
tcp_wrappers=YES  > 접근제어 사용 여부
  - /etc/hosts.deny, /etc/hosts.allow 파일에 정의
  - hosts.allow 파일의 보안 등급이 높다.
  - vsftpd : 192.168.11.11, 192.168.10.
     (마지막에 .은 패턴을 지정 / 10번대 주소 모두 지정)


local_max_rate=1024 # byte/sec
anon_max_rate=1024

 


1) hosts.deny 를 이용한 지정 ip 거부

vi /etc/vsftpd/vsftpd.conf 파일에서 수정한다.

listen=YES

listen_ipv6=NO

tcp_wrappers=YES

 

/etc/hosts.deny에서 192.168.10.130 ip주소 거부 설정

vsftpd:192.168.10.130

 

192.168.10.130 컴퓨터에서 ftp 접속이 거부된다.

 

2) hosts.allow, hosts.deny 에 같은 지정된 ip 넣는 경우

allow ip - 192.168.10.130

deny ip - 192.168.10.130

 

/etc/hosts.allow에서 192.168.10.130 ip주소 허용 설정

 

/etc/hosts.deny에서 192.168.10.130 ip주소 거부 설정

 

192.168.10.130 컴퓨터에서  ftp 접속

접속이 되는 것을 확인할 수 있다.

 

deny가 먼저 적용되고 allow가 나중에 적용된다.

allow 의 우선순위가 deny 보다 더 높아 접근이 가능해진다.

 

3) hosts.allow 지정된 ip, hosts.deny 에 지정된 ip 가 들어가는 주소대역 넣는 경우

allow ip - 192.168.10.130

deny ip - 192.168.10. (10번대 IP 전체) 

 

/etc/hosts.allow에서 192.168.10.130 ip주소 허용 설정

 

/etc/hosts.deny에서 192.168.10. 번대 ip주소 거부 설정

 

192.168.10.130 컴퓨터에서 ftp 접속

192.168.10.130 은 잘 접속된다.

 

192.168.10.131 컴퓨터에서 ftp 접속

허용하지 않는다.

+ Recent posts