리그캣의 개발놀이터

서버 구축 및 관리 - 기말고사 정리 본문

프로그래밍 기본/서버 구축 및 관리

서버 구축 및 관리 - 기말고사 정리

리그캣 2018. 1. 25. 19:42

기말고사(필기&실기)

범위(sum5~15)

가상호스트, CGI, 웹 서비스, 웹 로그 기록, 웹 페이지 인증, SSL HTTPS, PHP, MySQL, dbdump, MySQL Scripts, Tomcat&JSP, Servlet 등

내용

수업 중 구현한 서비스(과제 및 퀴즈 등) 기초 내용 질문과 응용 (예, user id, 파일명, 디렉토리, DB명, DB 테이블 생성/수정, 웹
출력 변경하여 구현), 각 페이지의 머릿글은 문제 번호와 제목으로 하고, 각 배경색은 반드시 모두 다르게 함.


개인정리

email 설정(/etc/mail/*, /etc/mail/sendmail.cf)

  • yum install mailx  ⇐ /bin/mail 명령이 없는 경우 설치

  • yum update sendmail ⇐ sendmail update

  • cd /etc/mail

  • ‘sendmail.cf’ 수정

  • “0 DemonPortOption=Port=smtp, Addr=127.0.0.1, Name=MTA” ==>“0 DemonPortOption=Port=smtp, Name=MTA” 로 수정
    외부접속 허용하게 바꿈

Unix에서 메일 주고 받기

  • 메일보내기

    • mail email_address

    • Subject:  본문내용 입력 후 맨 마지막 . 로 맞춤

  • 메일 읽기

    • 메일 서버로 들어온 모든 메일은 /var/spool/mail 디렉토리에 저장된다.

    • mail ⇐ 메일 읽기 명령

    • &1 ⇐ 1번 메일 읽음, &s em ⇐ ‘em’ 파일로 저장 , &h ⇐ 제목줄 보기 , &d ⇐ current mail 삭제
      &? ⇐ 도움말 보기, &r ⇐ 답장

Samba(/etc/samba/smb.conf)

리눅스의 디렉토리를 윈도우즈(네트워크환경)와 공유, 즉 삼바서비스로 공유된 디렉토리를 윈도우즈 네트워크 환경에서 볼 수 있음.

  • install samba

    • yum -y install samba

  • file /etc/samba/smb.conf에서 아래 부분 수정

    • workgroup = grup이름

    • server string = is103 # 각장  is. 번호

    • hosts allow = 특정 호스트만 접속을 허용함.

  • 다른 계정 추가하고자 할때

    • (addusers uname ⇐ /etc/apsswd 수정됨
      passwd uname)

    • smbpasswd - a uname ⇐ 삼바의 암호는 계정 암호와 다르게 설정

    • smbpasswd -a uname
      SMB passwd: 암호 재입력
      Retype passwd : 암호 재입력

  • service smb restart

  • 방화벽 설정확인(/etc/sysconfig/iptables)

HTTP Web Server 설정

  • install apache web server

    • dnf -y install httpd

  • test run

    • service httpd start

  • MySQL DB & PHP 설치

    • dnf -y install mariadb-server

    • php 설치 안나올듯

    • php -v , mysql -V 버전확인명령어

  • phpinfo.php test page

    • vi infotest.php 파일 생성

      • <?php phpinfo(); ?>

    • service httpd restart ⇐ 웹 서버 다시 시작

  • Server Web Home Page(/var/www/html/index.html)

    • cd /var/www/html

      • vi ‘index.html’

  • httpd configure file(etc/httpd/conf/httpd.conf)

    • /etc/httpd/conf/httpd.conf 수정

      • cd /etc/httpd/conf

      • ServerName is103.skuniv.ac.kr:80

      • DirectoryIndex index.html index.htm index.shtml index.php

      • AddDefaultCharset UTF-8

    • /etc/httpd/conf.d/userdir.conf

  • 일반 사용자의 웹 페이지 환경 설정(/etc/httpd/conf.d/userdir.conf) 및 테스트 페이지

    • su testuser

    • mkdir public_html

    • vi index.html

    • /etc/httpd/conf.d/welcome.conf : DocumentRoot index 파일이 없을 때 보여주는 환경 설정

  • CGI(Common Gateway Interface) 실행

    • CGI란 웹 서버에서 실행 가능한 모든 프로그램은 웹(클라이언트)를 통해서도 실행 가능하다.
      서버에서 실행한 프로그램 결과를 웹으로 보여주기 위하여 httpd 헤더에 두 줄 출력이 먼저 나와야 한다.
      첫 줄은 MIME(Multipurpose Internet Mail Extensions) 형식으로 나오r고 어쩌구저쩌구

    • CGI는 누구나 접속 가능한 클라이언트에서 서버에 직접 프로그램을 실행하는 기법이므로 서버의 보안에
      매우 민감하다. 따라서 실행 가능한 특정한 디렉토리와 확장자 및 권한, 등 여러 보안 규칙들이 적용된다.

    • /etc/httpd/conf.d/userdir.conf 수정

 <Directory /home/*/public_html/>

 ...

 </Directory> 다음에 아래와 같이 <Directory /home/*/public_html/cgi-bin> 설정

  

 <Directory /home/*/public_html/cgi-bin> <== cgi-bin 디렉토리 설정

     AllowOverride FileInfo AuthConfig Limit

     Options ExecCGI <== 반드시 Options에 "ExecCGI"가 있어야 함.

     <Limit GET POST OPTIONS>

         Order allow,deny

         Allow from all

     </Limit>

     <LimitExcept GET POST OPTIONS>

         Order deny,allow

         Deny from all

     </LimitExcept>

 </Directory>



    • cd ~id/public_html

    • mkdir cgi-bin

    • chmod g-w cgi-bin ⇐ suexec 정책에 따라 그룹에 쓰기 허가권이 금지된다.

    • cd cgi-bin

    • cat > test.c

    • gcc -o test.cgi test.c

    • ./test.cgi

Content-Type:test/html

Hello!! CGI test program.

  • g++ -o addcpp.cgi addcpp.cpp

  • chmod g-w addcpp.cgi

가상 호스트 이름과 TCP Wrapper

  • 가상호스트(/etc/httpd/conf/httpd.conf)

  • <VirtualHost localhost:80>
    ServerAdmin root@localhost
    ServerName is103.skuniv.ac.kr
    DocumentRoot /var/www/html
    ScriptAlias /cgi…..

  • /etc/hosts 파일 내에도 vis103.skuniv.ac.kr 있어야 한다.
    localhost is103 is103.skuniv.ac.kr
    localhost vis103 vis103.skuniv.ac.kr

  • 가상 호스트의 웹 접속 기록은 /var/log/httpd/vaccess_log,  오류 기록 파일은 verror_log 이다.

  • TCP Wrapper(/etc/hosts, hosts.allow, hosts.deny)

    • /etc/hosts.allow

    • /etc/hosts.deny

웹 디렉토리 접근 인증

  • 해당 디렉토리 (/home/id/public_html/Protected)

    • “.htaccess” file을 아래와 같이 만든다.


  AuthUserFile /home/id/.htpasswd

  AuthGroupFile /dev/null

  AuthName Seokyeong_University <== 주의 단어에 빈칸(space)이 있으면 안됨.

  AuthType Basic

  <Limit GET POST>

    require user cosec

  </Limit>


  • 아래 명령으로 .htpasswd 파일 만듬

    • /usr/bin/htpasswd -c /home/id/.htpasswd cosec

    • 비밀번호 입력 창이 나옴.

  • /etc/httpd/conf/httpd.conf 확인(.htaccess 파일을 웹에서 볼 수 없도록 해야함.)

    • AccessFileName .htaccess

  • httpd.conf 환경 파일 수정 : 접근을 제한하고자 하는 디렉토리 환경 설정

<Directory /home/id/public_html/Protected>

     Options MultiViews Indexes Includes ExecCGI

     AllowOverride AuthConfig FileInfo Limit Options   <== "AuthConfig"가 반드시 필요

  </Directory>

  • service httpd restart ⇐ httpd 데몬을 다시 시작

HTTPS(Secure HTTP, Web SSL 통신) 설정

  • 인증서 만드는 방법 2가지: 자가-사인 인증서와 인증 기간 (CA) 인증서

    • 자가-사인 인증서(self-signed certificate), 무료

      • CSR(인증요청서)을 이용하여 openssl로 직접 인증서를 만든다

      • 이렇게 해서 준비된 private key 파일과 인증서 파일을 아파치에서 사용한다.

    • 인증기관(CA) 인증서 만들기, 상용

      • openssl로 private key와 CSR 파일을 만들고, 그중 내가 만든 CSR을 CA 기관에 보내면
        인증서를 CA에서 만들어 준다

  • 개인키 생성(무료 openssl을 이용한 self-signed certificate 사용)

    • cd /etc/pki/tls/certs

    • make is103.skuniv.ac.kr.key

  • 위 암호 구문을 설정하면 “service httpd restart” 할 때 마다 암호구문 물어봄
    개인키에서 암호구문 제거를 위하여 아래 명령문 실행

    • openssl rsa -in is103.skuniv.ac.kr.key -out is103.skuniv.ac.kr.key

  • 서버 공개키 생성

    • make is103.skuniv.ac.kr.csr

  • crt 인증서 생성(self-signed certificate, cer 키 변형)

    • Configure HTTPD for SSL

  • Install mod_ssl, openssl

    • dnf install mod_ssl

  • /etc/httpd/conf.d/ssl.conf 편집

  • https 로그 기록 파일

    • /var/log/httpd/ssl_access_log & ssl_error_log

  • https SSL  가상 호스트 설정

MySQL(MariaDB)

  • MySQL DB & PHP 설치(PHP가 설치 안되어 있을 때)

    • dnf -y install mariadb-server php-mysqlnd

    • systemctl start mariadb.service

  • Database 구성 : Databases > Tables > fields & records

  • MySQL 데몬 처음 시작

    • service mariadb start

    • 스스로 초기 mysql db 생성 : /var/lib/mysql/*

    • systemctl start mariadb

    • /var/lib/mysql ⇐ 실제 mysql db가 저장되는 위치

  • MySQL root user 암호 설정/변경

    • mysqladmin -u root password

    • mysql -p 명령으로만 mysql 시스템에 들어갈 수 있다.

  • Mysql  DB 위치

    • /var/lib/mysql

  • 일반 사용자 계정(seoky) 만들기

    • mysql -p

    • show databases;

    • create database seoky

    • show databases;

    • create user ‘seoky’@’localhost’ identified by ‘user-password’;

    • grant all privileges on seoky.* to seoky@’localhost’;

    • set password for ‘seoky’@’localhost’ = password(‘newpassword’);

    • flush privileges;

    • quit

    • drop user ‘user’@’localhost’; ⇐ 권한 삭제

  • MySQL 일반 사용자 암호 바꾸기

    • mysql -p

      • set password=password(“new password”);

      • flush privileges;

      • quit;

  • MySQL root user가 일반 사용자 암호 바꾸기

    • mysql -u root -p

      • use mysql;

      • update user set Password=password(“new password”) where User=”id”;

      • flush privileges;

      • quit

  • MySQL 계정 만들기(다른 방법 - mysql db 수정)

    • mysqladmin -p create db-name ⇐ db-name 데이터 베이스 생성

    • cat > mkuser.sql

use mysql;

INSERT INTO user

 VALUES('localhost','user-name',PASSWORD('user-passwd'),

        'N','N','N','N','N','N','N','N','N','N','N','N','N','N',

        'N','N','N','N','N','N','N','N','N','N','N','N','N','N',

        '','','','','',0,0,0,0,'','','N','N','',0.0);


INSERT INTO db

 VALUES('localhost','db-name','user-name',

        'Y','Y','Y','Y','Y','Y','N','N','N','Y',

        'Y','Y','Y','Y','Y','Y','Y','Y','N');

create database db-name;

FLUSH PRIVILEGES;

^D


  $ mysql -p < mkuser.sql


  $ mysql -u user-name -p

  password: user-ppasswd

  mysql> use db-name;

  mysql> show tables;

  mysql> show databases;

  mysql> quit

  • 테이블 만들기/수정/읽기

    • mysql -useoky -p

    • show databases;

* MySQL을 설치하면 기본적으로 로컬(localhost)에서만 접속이 가능하도록 되어 있다.

혼자 지역적으로만 사용하는것이 아닌, 하나의 계정으로 여러 곳에서 사용할 경우 사용권한

부여으로 'localhost' 대신 '%' 을 사용하여 외부에서 해당 계정에 대해서 외부에서 접근이

가능하도록 한다.

MySQL(Maria) DB관리

  • mysql > delete from users where id=’jang’;

  • 텍스트 자료 가져오기(입력)

    • vi users.dat

  • table 구성 보기

    • mysql > show columns from test(테이블명);

  • Table 특정 내용의 선택적 보기

    • 특정 레코드 보기

      • select * from test where id=2;

      • select * from tbl_name WHERE col2=val2;

  • 특정 필드 보기

    • select name from test;

  • Table 내용을 정렬하여 보기

    • select * from test by order id;

    • select * from test by order id desc; ⇐ 역순

  • Table 특정 내용 편집

    • update test set id=1 where name =’Leesanghae’;

  • Table에 필드 추가하기

    • alter table tbname add fldname char(50);

  • Table 이름 바꾸기

    • alter table oldname rename newname;

  • Table 삭제

    • drop table tablename;

  • database 삭제

    • drop database dbname;

  • mysql 나가기

    • quit

  • database 생성(허가권 있는 관리자)

    • mysqladmin -u root -p create dbname ⇐ mysql 관리자만 생성

  • DB dump 저장:

    • mysqldump php0xx -p > dbphp0xx.sql

    • mysqldump --opt php0xx -p > php0xxdb.sql

    • 혹은 모든 DB저장시에는 ‘-A’ 선택자 사용

    • mysqldump -A -p > dbdump.sql ⇐ 모든 데이터 베이스 저장

  • DB 복구

    • mysql -p < inp0xx.sql

    • mysql -p dbname < inp0xx.sql

  • MySQL 상태 보기

    • mysql > status

MySQL DB관리

  • PHP와 MySQL 연동 작업 순서

    • MySQL Database 연결: mysqli_connect(“localhost”,”id”,”pw”);

    • Database 선택 : mysqli_select_db(link_id,dbname);

    • MySQL 질의어 실행 : $result = mysql_query(link_id,”mysql commnet”);

  • MySQL 서버 연결

    • int mysqli_connect(host,id,password)

    • link_id = mysql_connect(‘localhost’,’id’,’pw’);

  • 제로보드 admin 암호를 잊었을 때

    • mysql -p

    • mysql > use id;

    • mysql > update xe_member set password=password(‘새암호’) where user_id=”admin”;

    • mysql > quit

    • 새로운 암호로 로그인

JSP 개요

  • JSP는 ASP나 PHP와 같이 서버에서 실행되는 스크립트 언어이며, JSP 태그와 Java 코드를 끼워 넣어 servlet 엔진을 통하여 실행되며, Java 언어를 사용할 수 있다.

  • Installation

  • tomcat은 JSP container , 즉 JSP Servlet(서버 실행)을 실행하는 엔진

  • tomcat 서비스 시작

    • service tomcat start

    • systemctl enable tomcat.service

  • 이후 /etc/tomcat/tomcat.conf 설정 파일 수정 한 후,

    • service tomcat restart

  • /var/lib/tomcat/webapps/ROOT/index.jsp ⇐ 톰캣 고양이 초기 화면 경로

  • jsp 기본 포트 번호 확인 /etc/tomcat/server.xml

  • nmap is103 방화벽 검사

  • 주요 환경변수명과 디랙토리

    • 주요 디렉토리
      /etc/sysconfig/tomcat

    • Web Page
      /var/lib/tomcat/webapps/
      /var/lib/tomcat/webapps/ROOT

  • JSP 프로그램 실행

    • JSP Document_Root : /var/lib/tomcat/webapps/ROOT/index.jsp

    • 일반 directory : /var/lib/tomcat/webapps/user/

Tomcat JSP JDBC 데이터 베이스 연동

  • Java JDK 설치

    • java -version

    • dnf install -y java*

  • jshell test

    • jshell

  • JDBC 설치

    • dnf install mysql-connector-java


Comments