[root@pro root]# hdparm -c /dev/hda 

/dev/hda: 
IO_support = 1 (32-bit) 

3.1pro의 경우는 우선 위와 같이 32-bit모드로 되어 있으므로 입출력모드는 별다른 처리가 필요없습니다. 


[root@pro root]# hdparm -d 0 /dev/hda 

/dev/hda: 
setting using_dma to 0 (off) 
using_dma = 0 (off) 

[root@pro root]# hdparm -t /dev/hda 

/dev/hda: 
Timing buffered disk reads: 64 MB in 13.62 sec0nds = 4.70 MB/sec 
[root@pro root]# hdparm -d 1 /dev/hda 

/dev/hda: 
setting using_dma to 1 (on) 
using_dma = 1 (on) 
[root@pro root]# hdparm -t /dev/hda 

/dev/hda: 
Timing buffered disk reads: 64 MB in 3.63 sec0nds = 17.63 MB/sec 

위와 같이 DMA 기능을 사용하지 않는 경우와 사용하는 경우 확인해보았을때 
위와 같이 4배이상 차이가 납니다. 

기본적으로 
[root@pro root]# hdparm -d /dev/hda 

/dev/hda: 
using_dma = 1 (on) 
위와 같이 설정되어 있으므로 별다른 조치가 필요없습니다. 

질문의 답변에 해당하는 명령어는 
# hdparm -t /dev/hda 
입니다. 

지금까지 하드디스크의 IO모드 및 DMA사용여부의 체크 및 테스트 방법에 대하여 알아보았습니다

1. Pg_hba.conf  파일에서 접속 허용  "host, DB, 사용자, 아이피(호스트), 접속형식"  등을 설정한다.


# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               trust
# IPv4 local connections:
host    all         all         127.0.0.1/32          trust
# IPv6 local connections:
host    all         all         ::1/128               trust
# export connection
host    Test      Test       192.168.6.195/32        password
host    Test      Test       192.168.6.195/32        password


=> 대략적인 뜻은 Test디비에 접근할 수 있는 것은 Test아이디로 192.168.6.195에서 접속한 것만 password를 입력 받고 허가해준다. 라는 뜻이다.




2. postgresql.con  파일 수정. --> 포트 및 host 설정.


#---------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#---------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'  # what IP interface(s) to listen on;
                                # defaults to localhost, '*' = any
port = 5432
max_connections = 100

 

=> 대략적인 설명은 5432포트로 들어오는 모든 요청에 응답하도록 설정하는 것이다.



% 유저를 추가하는 방법은 다음과 같다.

psql Test;

Test # > CREATE USER "Test" PASSWORD='qlqjs123';

=> 기본적으로 name에 해당하는 문자열은 대소문자를 구분해서 입력을 해도 모두 소문자로 인식한다.  대소문자를 가려서 입력하고 싶을때는 " (큰따옴표)로 묶어줘야만 한다.

ex) test , Test TEST ==> test

    "Test"  => Test

   "TEST" => TEST


1. 백업

 

pg_dump 와 pg_dumpall 프로그램을 이용해서 실행을 한다.

 

사용법)

  pg_dump [옵션] [해당디비이름] > 저장할 파일명 | 하나의 데이타베이스만 백업하고자 할때

  pg_dumpall [옵션] > 저장할 파일명                      | 전체 디비를 백업하고자 할때

 

주요옵션의 종류

-C(대문자): 데이타베이스의 생성부분까지 백업을 하라는 옵션

-a : 데이타만 백업 (copy to)

-d : 데이타만 백업 / 복구 (insert 쿼리로 덤프)

-s : 스키마만 백업 / 복구

 

==>

 

데이타만을 백업하고자 할때는

pg_dump -d test > test.dmp (작은단위 디비의 경우에만 사용)

pg_dump -a test > test.dmp

정도의 실행이면되고.

 

 

스키마만 백업해서 다른 컴퓨터에 같은 디비를 만들고자 할때는

pg_dump -Cs test > test_schema.sql

를 사용하면 된다.

 

 

보통 백업이라하면 만약에 경우 새로 생성하는 것을 대비하는 것이기 때문에 -C옵션은 필수이다

동일한 디비를 다른 머신에서 구축하고자 할때는 -s 옵션으로 그 뼈대만을 백업해서 작업하면

불필요한 데이타의 이동은 피할 수 있다.

 

cf .  pg_dump -s 로 만든 백업 파일엔 create 관련 sql이 빠져있고

       pg_dump -Cs 는 create가 들어 있다.  -Cs는 아무것도 없는 곳(database)에 복구할 목적으로

                     -s는 database가 존재하는 곳에 복구하기 위한 백업이다.

 

 

2. 복구

 

1) 스키마 복구 / 복원

 

복구는 여러가지 방식이 있지만 가장 쉬운 방식을 설명하겟다.

 

psql [아무디비이름/존재하는것] < test_schema.sql

 

(아마도 vim test_schema.sql 해본사람이면 알겠지만 dump의 내용은 sql 문으로 구성되어 있다.

 위와 같이 실행하면 그 sql을 순서대로 실행하는 것과 같은 역할을 한다.

 아무 디비에 대해서 실행을 해도 새로운 디비를 생성하고 만드는 sql 이기 때문에 상관이 없다.

 디비가 없다면  createdb aaa 로 더미 디비를 생성한다. )

 

을 실행하면 sql이 실행되면서 관련 응답이 나오게 되고 특별한 이상이 없이 끝나면

 

복구는 완료 된다.

1. 프롬프트 설명

'=>' SQL명령 대기 상태

'->' 연속된 명령의 입력 대기 상태 ';'로 마무리시 실행

 

2. 커맨드

\? : 도움말 / 각 커맨드의 간단한 설명이 출력됨

\q : 종료

\d : DB내에 존재하는 TABLE , INDEX,VIEW 등의 목록을 출력해준다.

  -> Wd [table_name] : 테이블의 구조를 출력 ;

\dt : DB내에 존재하는 table리스트만 출력

\dT : DB의 테이블에 들어갈 수 있는 데이타형을 출력;

\e : 최근 사용한 명령(버퍼에 들어있는)을 VI편집기로 편집해준다.=>편집후 자동실행

\h [명령어] : SQL 명령어에대한 간단 설명을 제공

\df : SQL 지원함수 목록을 출력



PostgreSQL 사용법


1. 데이타 베이스 구축 명령


1) create

CREATE TABLE  student {
 std_id CHAR(8),
 std_name VARCHAR(15),
 std_addr VARCHAR(50),
 std_tel  VARCHAR(15),
 std_birthday DATE
};
-----------------------------------------------------------
\d ==> database 내에 존재하는 table과, index의 목록을 출력

\d student ==> student table의 정의 상태를 출력
==========================================================

CREATE TABLE student2 {
 std_id CHAR(8) PRIMARY KEY,
 std_sex CHAR(1) DEFAULT 'M' CHECK (std_sex='M' OR std_sex='F'),
 std_name VARCHAR(15) NOT NULL,
 std_addr VARCHAR(50) NOT NULL,
 std_tel  VARCHAR(15),
 std_handphone VARCHAR(15),
 std_birthday DATE NOT NULL 
};
----------------------------------------------------------
 std_id CHAR(8) PRIMARY KEY,
       => std_id 를 primary key로 설정하였기 때문에 primary key인 컬럼에 대한 
          index가 자동으로 생성되어 지고, 그 index의 name은 student2_pkey가 된다.
(테이블 생성시 출력 메시지)
NOTICE: CREATE TABLE/PRIMARY KEY will create implict index 'student2_pkey' for table 'student2'

 std_sex CHAR(1) DEFAULT 'M' CHECK (std_sex='M' OR std_sex='F'),
 ==> std_sex에는 M과 F외에는 입력될 수 없도록 컬럼값을 설정하였다.
            이외의 값이 입력하려고 하면 입력이 되지 않는다.
========================================================


2) insert

INSERT INTO student (std_id, std_name) values ('990001','홍길동');
INSERT INTO student (std_id, std_name) values ('990001','홍길동');
INSERT INTO student (std_id, std_name,std_addr,std_tel,std_handphone,std_birthday)
             values ('990001','홍길동','서울시XXXXXXX 1층','02-2222-2222','010-2222-2222','1980-06-16');
INSERT INTO student (std_name) values ('홍길동');
-----------------------------------------------------------------
student 의 경우에는 오류 없이 들어간다.
하지만 생성된 4개의 데이타는 서로를 나눌 수 있는 유일한 값(PK)가 없기때문에
추후에 데이타 수정시 4개의 데이타를 구분할 방법이 없다.
student2는 pk인 std_id가 같은 데이타에 대해서는 나중에 들어온 데이타를 허용
하지 않는다 따라서 위 4개의 쿼리를 실행한 결과는 1개의 행만 존재한다.
=========================================================================


3) ALTER
: 데이타베이스 구조를 바꾸는데 사용 
=> ALTER TABLE : 컬럼추가하기,컬럼이름바꾸기,테이블이름바꾸기

ALTER TABLE student ADD COLUMN stu_sex CHAR(1);
--------------------------------
student 테이블에 stu_sex라는 컬럼을 추가
=>DEFAULT나 NOT NULL등이 적용되지 않으므로 참고해서 사용해야한다.
  (다 NULL로 저장된다)
================================

ALTER TABLE student RENAME std_sex TO stu_gender;
ALTER TABLE student2 RENAME TO student3;
---------------------------------------------
컬럼명의 변경과 테이블명의 변경의 방법
(테이블명 변경시 테이블 생성시 PRIMARY KEY설정으로 자동 생성된 INDEX는
자동으로 변경되지 않는다.
=============================================


4) DROP 
   DROP TABLE [테이블명];
DROP TABLE student;
=>테이블 삭제




2. 데이타 구축 명령


1)INSERT
INSERT INTO [TABLE_NAME] {COLUMN,....} VALUES {COLUMN_VALUE,...};
INSERT INTO [TABLE_NAME] VALUES {COLUMN_VALUES,....,END_CLOUMN_VALUES};


2)UPDATE
UPDATE [TABLE_NAME] SET [COLUMN_NAME]=[NEW_VALUE] WHERE [COLUMN_NAME]=[OLD_VALUE];
: WHERE절에 쓸 수 있는 비교 방법에는 AND, OR, LIKE 가 있다.
LIKE는 ' 와 ' 사이에들어있는 문자열로 검색하는 것으로서 %가 전체 문자를 대신하고
?가 한글자를 대신한다.  예) '%하%' => 하를 포함하는 모든 값 을 의미한다.

3)DELETE
DELETE FROM [TABLE_NAME] ; 테이블 전체 삭제
DELETE FROM [TABLE_NAME] WHERE [조건]: 조건에 맞는 항목 삭제
=> WHERE 조건을 잘못 입력하면 전체 테이블에 영향이 갈 수 있으므로 조건의
기준은 PK값을 가진 COLUMN을 기준으로 하는 것이 가장 안전하다.





3. 사용자 명령


1) SELECT

SELECT [COLUMN_NAME|각종표현식] FROM [TABLE_NAME] WHERE [조건];

SELECT * FROM student WHRER std_id > 1000;

SELECT COUNT(num),SUM(num),AVG(num),MAX(num),MIN(num) FROM student2;
       num의 개수,num의합,num의평균,num의최대값,num의최소값을 출력한다.


SELECT DISTINCT * FROM A;
(모든 칼럼이 중복되는 항목은 하나만 출력)
SELECT DISTINCT ON num * FROM A;
(num 칼럼이 중복되는 항목은 하나만 출력)

SELECT * FROM A GROUP BY num;

HAVING

ORDER BY [DESC|ASC=DEFAULT]

UNION, INTERSECT, EXCEPT;
합집합, 교집합, 차집합


JOIN  두개의 테이블을 하나의 값을 기준으로 재정렬,가상 테이블을 생성한다.

CREATE VIEW product_temp AS SELECT a,b,c FROM AA;
(자주 JOIN을 실시 할 내용은 VIEW만들어서 그때 그때 새로 만드는 것이 
아니라 만들어진 VIEW테이블을 이용해서 사용하게끔 하면 빠른 수행속도를
보장할 수 있다.)

wget 으로 ftp 서버에서 필요한 자료 받기

 

ex)  wget  ftp://ID:PASS@site.com/data.tgz

 

      요렇게 해서  data.tgz을 받을 수 가 있답니다.~~~

RPM 파일에 들어있는 파일 목록 보기

 

RPM(Reahat Package Manager)은 리눅스에서 프로그램을 설치하고, 관리하는 프로그램이다. 가끔 *.RPM 파일에 들어있는 파일의 목록을 보고 싶은 경우가 생긴다. 이 때는 다음과 같은 명령을 사용하면 된다.

"$rpm -qpl filename.rpm" 

참고: 
-q 옵션: 쿼리 모드 
-p 옵션: 쿼리 (uninstalled) 패키지 
-l 옵션: 패키지의 파일 목록을 디스플레이 

rpm -qlv rpm파일이름 
ex) rpm -qlv rpm

 

* 특정 파일이 어느 패키지에 들어 있는지? 
rpm -qf 절대경로 
ex) rpm -qf /bin/ls 


* 경로를 모를 경우 
rpm -qf $(which 명령어) 

PAM (Pluggable Authentication Module)
- 사용자 인증을 모듈화 하고 관리자가 응용프로그램들의 사용자 인증 방법을 선택하고 설정할 수 있다.
즉, 사용자를 인증하고 사용자의 서비스에 대한 액세스를 제어하는 모듈이다.

/etc/pam.d - 어플리케이션별 pam설정 파일 위치 디렉토리
/lib/security pam 모듈 디렉토리

기본 형식
[module-type] [control-flag] [module-path] [module-arguments]

module-type : PAM 이 어떤 타입의 인증이 사용될 기성인가를 지정한다. 
- auth : 사용자인증에 사용하며 올바른 패스워드인지 문도 확인하는 절차를 가진다.
- account : 사용자의 접근 허가 여부를 확인하며, 계정만료, 특정 시간대에 접근이 허용되었는지 여부를 확인한다.
- password : 패스워드를 설정하고 확인한다.
- session : 사용자가 인증 받기 전후에 필요한 홈 디렉토리 마운트, 메일박스 생성 등의 유저섹션을 구성하기 위해 부가적인 작업을 수행한다.

control-flag : PAM에서 사용되는 모듈들이 결과에 따라 어떠한 동작을 취해야 하는지를 지시한다.
- required : 인증이 거부되기 전에 PAM이 이 서비스에 등록된 다른 모든 모듈들을 요규함에도 불고하고 실패할 경우 인증을 거부하도록 한다.
- requisite : 이 모듈을 이용하는 인증이 실패할 경우, 즉시 인증을 거부하도록 한다. 
- sufficient : 이전에 요청되어진 모듈이 실패하더라도 이 모듈에 의해서 인증이 성공할 경우,  PAM은 인증을 승인한다.
- optional : 이 모듈이 성공 또는 실패하는지는 그 모듈이 서비스에 대한 형식에 유일한 모듈일 경우에 해당한다.(성공 여부는 상관없음)

module-path : PAM에게 어떤 모둘을 사용할 것인지 그리고 그것을 어디서 찾을 지를 알려준다. 대부분 구성은 로그인 구성 파일의 경우와 마찬가지로 모듈의 이름만 가지고 있다. 이와 같은 경우, PAM은 기본 PAM 모듈의 디렉토리에서 (/lib/security) 모듈을 찾는다.

module-arguments : 모듈에게 전달되는 인수를 나타낸다. 각각의 모듈들은 각각의 인수를 가지고 있다.

 

1. pam_nologin.so & pam_securetty.so
- /etc/nologin 파일이 존재하면 root 만 로그인이 가능하고 일반 사용자는 로그인이 거부된다.

 
[root@server3 pam.d]# vi /etc/pam.d/login 
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
- /etc/securetty 파일에 기록된 내용과 비교하여 root 사용자가 로그인 가능한 콘솔을 확인한다.

auth       include      system-auth
account    required     pam_nologin.so 
- 이 설정으로 인해 /etc/nologin 파일이 있으면 사용자들의 접근이 거부된다. 

account    include      system-auth
password   include      system-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    include      system-auth
session    required     pam_loginuid.so
session    optional     pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open
session    optional     pam_keyinit.so force revoke


[root@server3 pam.d]# touch /etc/nologin 
- /etc/nologin 파일이 생성되면 root 사용자만 로그인이 가능하다. /etc/nologin 파일의 내용과는 상관없이 파일의 생성 유무만 판단한다.


[root@server3 pam.d]# ls -l /etc/nologin

-rw-r--r-- 1 root root 0  1월 29 11:47 /etc/nologin

 

2. pam_listfile.so
- 임의의 파일에 대해 서비스를 허가 하거나 거부하는 방법을 제공한다.

[root@server3 ~]# vi /etc/pam.d/vsftpd 
#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required     pam_shells.so
auth       include      system-auth
account    include      system-auth
session    include      system-auth
session    required     pam_loginuid.so

참고
- item=user / tty / rhost / ruser / group / shell
아이템을 지정한다. 사용자, 터미널, 원격사용자, 그룹, 쉘 등을 사용할 수 있다.
- sense=deny / allow
센스를 지정한다. allow 또는 deny 값을 넣을 수 있다.
- file=/etc/vsftpd/ftpusers
아이템에 맞는 임의의 파일을 지정한다.
- onerr=succeed / fail
sense 값에 반대로 적어둔다.

 

3. ssh 접속 제한

 


root 계정에 ssh 로그인 금지하기
[root@server3 pam.d]# vi /etc/ssh/sshd_config 
36 # Authentication:
37 
38 #LoginGraceTime 2m
39 #PermitRootLogin yes
40 PermitRootLogin no - ssh 사용시 root로의 접속은 막고 일반 사용사의 접속은 가능하다.(#ssh 10.10.33.2 -l test2)
                                        하지만 접속을 막기 원하는 일반 사용자는 선택할수 없다.    
41 #StrictModes yes
42 #MaxAuthTries 6

-------------------------------------------------------------------

PAM을 사용한 루트 계정 로그인 금지하기

[root@server3 pam.d]# vi /etc/pam.d/sshd
#%PAM-1.0
auth required pam_listfile.so item=user sense=deny file=/etc/ssh/sshusers onerr=succeed 
- 이부분을 추가해주고 /etc/ssh/sshusers를 생성해준다.(파일 경로나 이름은 마음대로 설정하면 된다.)

auth       include      system-auth
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth
session    optional     pam_keyinit.so force revoke
session    include      system-auth
session    required     pam_loginuid.so

[root@server3 pam.d]# vi /etc/ssh/sshusers - 파일을 새로 만들어 준다.
test2 - ssh 접속을 제한할 사용자를 입력해준다. 이렇게 해주면 ssh 접속을 원하지 않는 일반 사용자의 접속을 선택해서 막을 수 있다.


 
root 계정에 ssh 로그인 금지하기
[root@server3 pam.d]# vi /etc/ssh/sshd_config 
36 # Authentication:
37 
38 #LoginGraceTime 2m
39 #PermitRootLogin yes
40 PermitRootLogin no - ssh 사용시 root로의 접속은 막고 일반 사용사의 접속은 가능하다.(#ssh 10.10.33.2 -l test2)
                                        하지만 접속을 막기 원하는 일반 사용자는 선택할수 없다.    
41 #StrictModes yes
42 #MaxAuthTries 6

-------------------------------------------------------------------

PAM을 사용한 루트 계정 로그인 금지하기

[root@server3 pam.d]# vi /etc/pam.d/sshd
#%PAM-1.0
auth required pam_listfile.so item=user sense=deny file=/etc/ssh/sshusers onerr=succeed 
- 이부분을 추가해주고 /etc/ssh/sshusers를 생성해준다.(파일 경로나 이름은 마음대로 설정하면 된다.)

auth       include      system-auth
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth
session    optional     pam_keyinit.so force revoke
session    include      system-auth
session    required     pam_loginuid.so

[root@server3 pam.d]# vi /etc/ssh/sshusers - 파일을 새로 만들어 준다.
test2 - ssh 접속을 제한할 사용자를 입력해준다. 이렇게 해주면 ssh 접속을 원하지 않는 일반 사용자의 접속을 선택해서 막을

4. pam_rootok.so
- root가 암호 입력없이 해당 서비스에 접근을 허용할 때 사용한다.

 

 

[root@server3 ~]# vi /etc/pam.d/su
#%PAM-1.0

auth            sufficient      pam_rootok.so - 이부분을주석처리하면 root도 su명령어 사용시 패스워드를 입력해야 한다.

# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth           sufficient      pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
#auth           required        pam_wheel.so use_uid
auth            include         system-auth
account         sufficient      pam_succeed_if.so uid = 0 use_uid quiet
account         include         system-auth
password        include         system-auth
session         include         system-auth
session         optional        pam_xauth.so

5. pam_time.so
- 특정 서비스에 대해 시간대 별로 접근 제어를 한다.


[root@server3 ~]# vi /etc/pam.d/login
#%PAM-1.0
account    required     pam_time.so  - /etc/pam.d/login 파일에 모듈 내용을 추가한다.
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       include      system-auth
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    include      system-auth
session    required     pam_loginuid.so
session    optional     pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open
session    optional     pam_keyinit.so force revoke

[root@server3 ~]# vi /etc/security/time.conf - pam_time.so 모듈 환경설정 파일이다.

#service;ttys;users;times - 형식에 맞게 추가해준다.
login;tty* & !ttyp*;!root;Al0900-1800 - root 사용자를 제외한 모든 사용자는 매일 09시 부터 18시 까지만 콘솔 로그인이 가능하다.


참고
service : 규칙이 적용될 서비스의 이름을 지정한다. login, sshd 등
tty  : 규칙을 적용할 터미널의 이름을 지정한다. tty*, ttyp*(pts:원격접속터미널)
users : 적용할 사용자 이름을 지정한다.
times : 언제 이 규칙을 적용할 것인가를 지정한다.
(Al : 매일, Mo : 월, Th : 화, We : 수, Th : 목, Fr : 금, Sa : 토, Su : 일, Wk : 주중, Wd : 주말)

!root : root를 제외한 모든 사용자
Al0900-1800 : Al : 매일, 0900-1800 : 09시 부터 18시까지의 시간


예) ssh 일반 사용자, 주중, 09-18 에만 접속가능하게...
[root@server3 ~]# vi /etc/pam.d/sshd
#%PAM-1.0
account    required     pam_time.so
auth required pam_listfile.so item=user sense=deny file=/etc/ssh/sshusers onerr=succeed
auth       include      system-auth
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth
session    optional     pam_keyinit.so force revoke
session    include      system-auth
session    required     pam_loginuid.so

[root@server3 ~]# vi /etc/security/time.conf 
sshd;tty* & ttyp*;!root;Wk0900-1600


6. pam_limits.so
- 특정 서비스에 대해 자원을 제한 하거나 제어를 한다. 프로세스 수 및 메모리의 양을 제어하여 로콜에서의 컴파일이나 서비스 거부 공격등을 방지할 수 있다.
- 이 설정이 활성화 되어 있으면 가상 콘솔창에서 로그인 이 거부될 수 있다. 

[root@server3 ~]# vi /etc/pam.d/login
#%PAM-1.0
account    required     pam_limits.so - 모듈의 내용을 추가한다.
account    required     pam_time.so
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       include      system-auth
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    include      system-auth
session    required     pam_loginuid.so
session    optional     pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open
session    optional     pam_keyinit.so force revoke

[root@server3 ~]# vi /etc/security/limits.conf 
#Each line describes a limit for a user in the form:
#
#<domain>      <type>      <item>         <value> - 형식에 맞게 추가해준다.
test1            hard    maxlogins       3 - test1 사용자는 동시 접속을 3개로 제한한다. 


참고
domain : 사용자 명 또는 와일드카드 *, @group 등을 사용할 수 있다.
type : soft, hard 값을 사용하며, soft limit 는 일반 유저가 변경할 수 있지만, hard limit는 root 사용자만 변경할 수 있다.
item : 아이템을 사용하여 제한한다. (core : 코어파일, data : 데이터, fsize : 파일, rss : 메모리 사이즈, nproc : 프로세스 개수, maxlogins:  동시접속 개수)
value : 제한 값을 지정한다.

 


7. 기타

 
[root@server3 ~]# vi /etc/profile or .bash_profile 
TMOUT=3600
HISTSIZE=50

참고
TMOUT
 : 계정의 접속시간을 제한하는 경우에 추가해준다. 기본 단위는 초(sec)이다.
HISTSIZE : 히스토리 값에 대해서 보안을 강화하기 위하여 변경해준다.

-------------------------------------------------------------------

[root@server3 ~]# vi /etc/security
console
#vc/1
#vc/2 
- 접속을 허용할 터미널만 설정하고 나머지는 주석처리하여 root 사용자의 터미널 접속을 제한한다.

[root@server3 ~]# vi /etc/profile or .bash_profile 
TMOUT=3600
HISTSIZE=50

참고
TMOUT
 : 계정의 접속시간을 제한하는 경우에 추가해준다. 기본 단위는 초(sec)이다.
HISTSIZE : 히스토리 값에 대해서 보안을 강화하기 위하여 변경해준다.

-------------------------------------------------------------------

[root@server3 ~]# vi /etc/security
console
#vc/1
#vc/2 
- 접속을 허용할 터미널만 설정하고 나머지는 주석처리하여 root 사용자의 터미널 접속을 제한한다.



html>
<body>
<script type="text/javascript">
document.location.href="http://aaa.domain.com:81";
</script>
</body>
</html>

 

-----------------------------------------------------------------------------

 

<frameset rows="*" border="0">
<frame name="MAIN" scrolling="auto" marginwidth="0" marginheight="0" src="http://aaa.domain.com:81">
</frameset>

특정 유저 소유의 모든 오브젝트들을 다른 유저 소속으로 바꾸고 싶다면 아래명으로 간단히 처리할수 있습니다.


postgres=# REASSIGN    OWNED   BY    현OWNER    TO     새OWNER;





 [ 기타  참고 자료 ]

cell_006=# ALTER DATABASE  cell_006  owner to segio;   -->  cell_006 데이타베이스의  사용자를 segio로 변경한다.
 
template1=# CREATE DATABASE cell_001 OWNER user_000;  -->  데이타 베이스 생성 시 사용자를 지정하는 방법.
 

# PostgreSQL상의postgres 유저 패스워드 설정

[root@latest]# su - postgres ← postgres 로 변경

-bash-3.00$ psql template1 ← psql 명령어로 PostgreSQL에 접속
Welcome to psql 7.4.2, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit

template1=# alter user postgres with password '패스워드'; ← PostgreSQL상의 postgres 유저 패스워드 설정
ALTER USER ← 패스워드 변경 완료

template1=# \q ← psql 종료


'배워서 남주자 > Data Base' 카테고리의 다른 글

[oracle] Listener 관련  (0) 2018.03.28
[Postgresql] 접속 제어  (0) 2018.03.23
[Postgresql] 백업 / 복구  (0) 2018.03.23
[postgresql] 초간단 명령어 설명.  (0) 2018.03.23
[MySQL & MariaDB] 설치 후 이것/저것  (0) 2018.03.23

[ 서비스 관리]
CentOS 6이전 버전의 리눅스는 /etc/rc.d/init.d/ 디렉토리에 서비스 관리 스크립트가 존재했다.
하지만 CentOS 7부터는 서비스 관리 스크립트들은 몇몇 서비스를 제외하고 각 서비스 유닛(Unit)으로 변경되었다.
서비스 유닛은 .service 으로 끝나는 파일이며,  systemctl 에 의해 제어된다. 
예전 버전의 서비스를 제어하기 위한  service 명령어 와  systemctl 의 사용법을 비교하면 다음과 같다.





* systemctl은 <TAB>키를 사용한 자동완성 기능을 지능적으로 제공 한다. 예를 들면 systemctl start <TAB>키를 누르면 시작되지 않은 유닛들을 기준으로 자동완성 또는 유닛 리스트를 보여주고, systemctl stop <TAB>키를 누르면 시작된 유닛들을 기준으로 자동완성 또는 유닛 리스트를 보여준다.
* systemctl은 service와 달리 정해진 서비스 명령어외의 사용자 명령어는 제공하지 않는다. 예를 들면 Apache의 설정내역을 테스트하기 위한 configtest 등의 명령은 호환되지 않는다.
부팅 시 서비스 자동시작 여부를 설정하기 위해 사용하는 chkconfig와 systemctl의 명령을 비교해 보자.



[자동 시작 서비스 관리]------------------------------------------------------------------
시스템 부팅 시 자동 시작되는 서비스 리스트를 다음과 같이 확인해 보자.
  
~ ]# systemctl     list-unit-files    --type  service   |   grep enabled
abrt-ccpp.service                           enabled
abrt-oops.service                           enabled
abrt-vmcore.service                         enabled
abrt-xorg.service                           enabled
abrtd.service                               enabled
accounts-daemon.service                     enabled
atd.service                                 enabled
...
  
systemctl을 사용하여 서비스 유닛 중 활성화(enabled)된 서비스 유닛을 나열해 보았다. 각 서비스 유닛을 확인하여 비활성화(disable)로 변경하는 것이 보안 및 시스템 성능 면에서도 필요한 부분이다.
프린트 관련 서비스 cups를 시스템 부팅 시 비활성화 되도록 해보자.
 
 ~ ]# systemctl   disable   cups.service
rm '/etc/systemd/system/multi-user.target.wants/cups.path'
rm '/etc/systemd/system/sockets.target.wants/cups.socket'
rm '/etc/systemd/system/printer.target.wants/cups.service'
  
cups서비스를 비활성화 하면, 관련된 파일이 위와 같이 삭제된다.
다시 cups서비스를 활성화 시켜보자.
  
~ ]# systemctl   enable   cups.service
ln -s '/usr/lib/systemd/system/cups.service' '/etc/systemd/system/printer.target.wants/cups.service'
ln -s '/usr/lib/systemd/system/cups.socket' '/etc/systemd/system/sockets.target.wants/cups.socket'
ln -s '/usr/lib/systemd/system/cups.path' '/etc/systemd/system/multi-user.target.wants/cups.path'
  
cups서비스를 활성화 하면, 관련된 파일을 심볼릭 링크를 건다.


[서비스 시작/상태확인/재시작/종료] ---------------------------------------------------------
서비스를 시작, 재시작, 종료를 다음과 같이해 보도록 하자. 먼저 시작되지 않은 서비스를 조회해 보자.
  
~ ]# systemctl   list-units   --type   service   -a   |  grep   -w    inactive
abrt-vmcore.service           loaded inactive dead    Harvest vmcores for ABRT
alsa-restore.service          loaded inactive dead    Restore Sound Card State
alsa-store.service            loaded inactive dead    Store Sound Card State
...
  
systemctl을 사용하여 서비스 유닛 중 중지된 서비스를 나열해 보았다. 
정지된 서비스 중 파일 및 디렉토리 원격 동기화를 위해 사용하는 rsyncd 서비스를 시작시켜 보자.
 
 ~ ]# systemctl   start   rsyncd
 위와 같이 입력하면 rsyncd 서비스가 시작된 것이다.  서비스 상태를 확인해 보자.
  
]# systemctl status rsyncd
rsyncd.service - fast remote file copy program daemon
   Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; disabled)
   Active: active (running) since 일 2015-04-12 14:00:20 KST; 48s ago
 Main PID: 6379 (rsync)
   CGroup: /system.slice/rsyncd.service
           └─6379 /usr/bin/rsync --daemon --no-detach
 4월 12 14:00:20 localhost.localdomain systemd[1]: Starting fast remote file copy program .....
 ...
 
systemctl의 status명령을 사용하여 위와 같이 서비스 상태를 확인하였다. 서비스에 대한 간단한 설명, 시스템 부팅 시 자동시작 유무, 서비스 데몬 시작일, PID, CGroup, 최근 로그를 확인할 수 있다.
서비스 재시작은 다음과 같이 입력한다.
 
~ ]# systemctl   restart   rsyncd

그리고 서비스를 종료하는 방법은 다음과 같다.
 
~ ]# systemctl stop rsyncd


[ Target(런레벨) 관리] ---------------------------------------------------------------------
CentOS 6이전 버전은 시스템 초기화를 위해 사용하는 0부터 6까지 런 레벨(run level)이 존재했다. 예를 들면 런 레벨 0은 종료, 런 레벨 3은 Text 모드, 런 레벨 5은 Xwindows를 사용한 GUI환경, 런 레벨 6은 리부팅으로 사용되었다. 하지만, CentOS 7에서 사용하는 systemd는 이 런 레벨을 타겟(target) 유닛으로 변경하였다. 기존 버전의 런 레벨과 systemd의 타겟 유닛은 다음 표와 같이 대응된다.


런 레벨 2,3,4는 동일하게 TUI 멀티유저 환경이다. 
예전에 제공하던 runlevel명령어와 telinit 명령어는 호환을 가지며 다음과 같이 대응된다.


현재 런 레벨을 확인하기 위해 다음 명령어를 입력한다.
~ ]# runlevel
N 5
 
예전방식의 런 레벨 5를 확인할 수 있다. systemctl을 사용하여 확인해 보자.
~ ]# systemctl   get-default
graphical.target
 
앞에서 정리한 표와 같이 런 레벨 5와 graphical.target은 동일한 것으로 볼 수 있다.

시스템의 기본 타겟을 변경해 보자.

~ ]# systemctl   set-default   multi-user.target
rm '/etc/systemd/system/default.target'
ln -s '/usr/lib/systemd/system/multi-user.target' '/etc/systemd/system/default.target'
  
systemctl set-default를 사용하여 multi-user 타겟으로 변경하였다. multi-user 타겟은 예전의 런 레벨 3이다. multi-user 타겟으로 전환해 보자.
 
 ~ ]# systemctl   isolate   multi-user.target
 
 systemctl isolate를 이용하여 multi-user 타겟으로 전환하였다.
변경된 런 레벨을 확인하기 위해 다음 명령어를 입력한다.
 
 ~ ]# runlevel
5 3
  
런 레벨 5에서 3으로 변경된 것을 확인할 수 있다.
systemctl을 사용하여 확인해 보자.
  
~ ]# systemctl get-default
multi-user.target
  
multi-user 타겟으로 변경된 것을 확인할 수 있다.



[기타 마무리 ] ---------------------------------------------------------------------
1. initd 에서  systemd 로 변경.
    - runlevel 확인을 위해  기존 /etc/inittab 을 열어보거나 runlevel 명령을 사용했으나 이제는
      systemctl  get-default  명령으로  확인해야 한다.   기존의 runlevel 3에 해당하던   
      /etc/rc.d/rc3.d 에  해당하던  정보가  /etc/systemd/system 으로 변경되어 실행되는 데몬들의
      항목을 확인할 수 있다.
                  [root@colt357-server etc]# runlevel
                   N 3     
                  [root@colt357-server system]# systemctl  get-default
                   multi-user.target  
             (*  ps,  runlevel 5 는  graphical.target  참조. )

2. runlevel 변경하기 
    -  /etc/systemd/system  경로의  심볼릭 링크로 걸려있는  default.target 으로 결려있는 대상을 
       변경하고자하는  target 으로 변경한다.
drwxr-xr-x. 2 root root   56  1월 11 16:09 basic.target.wants
lrwxrwxrwx. 1 root root   41  1월 11 16:09 dbus-org.fedoraproject.FirewallD1.service -> /usr/lib/systemd/system/firewalld.service
lrwxrwxrwx. 1 root root   46  1월 11 16:09 dbus-org.freedesktop.NetworkManager.service -> /usr/lib/systemd/system/NetworkManager.service
lrwxrwxrwx. 1 root root   57  1월 11 16:09 dbus-org.freedesktop.nm-dispatcher.service -> /usr/lib/systemd/system/NetworkManager-dispatcher.service
lrwxrwxrwx. 1 root root   37  1월 11 16:12 default.target -> /lib/systemd/system/multi-user.target
drwxr-xr-x. 2 root root   87  1월 11 16:09 default.target.wants
drwxr-xr-x. 2 root root   38  1월 11 16:09 dev-virtio\x2dports-org.qemu.guest_agent.0.device.wants
drwxr-xr-x. 2 root root   32  1월 11 16:09 getty.target.wants
drwxr-xr-x. 2 root root 4096  1월 11 16:12 multi-user.target.wants
drwxr-xr-x. 2 root root   31  1월 11 16:09 remote-fs.target.wants
drwxr-xr-x. 2 root root  115  1월 11 16:09 sockets.target.wants
drwxr-xr-x. 2 root root   26  1월 11 16:09 sssd.service.d
drwxr-xr-x. 2 root root  169  1월 11 16:09 sysinit.target.wants
drwxr-xr-x. 2 root root   44  1월 11 16:09 system-update.target.wants















+ Recent posts