2007년 3월 29일 목요일

그녀...



왠지 평범해 보이지 않은 소녀였습니다.
겉으로는 강한척 하지만,
무언가 부족한 듯 쓸쓸해 보이는...

그녀에게 뭔가를 주고 싶었습니다.
환하게 웃게 해주고 싶었고,
세상의 많은 것을 보여주고 싶었습니다.

그런 그녀가 이제 많이 행복해 보입니다.
제가 그녀를 기쁘게 할 수 있다는 것.
그 또한 저를 기쁘게 했습니다.

그녀를 사랑합니다.
그녀를 영원히 사랑할 것입니다.
저희 사랑은 지금...진행중입니다.


영화『ing』중에서

vsftp 설정

1. 설치  vsftpd는 앞의 설치 강좌데로 설치했다면, 이미 설치되었을 것입니다.
하지만 설치가 되었는지 확인할 필요가 있습니다.  확인하는 법은 다음과 같습니다.

[root@study ~]# rpm -qa | grep vsftpd
vsftpd-2.0.1-5
위와같은 결과가 나왔다면 배포판과 함께 이미 설치된 것입니다.
만약 위의 결과와 같이 나오지 않아도, 걱정하실 필요 없이 다음에 설명하는 방법으로 설치한다면 쉽게 설치 가능합니다.


2. vsftpd 설치  금번 강좌를 따라서 설치하고 2. Fedora Core 3 설치후 기본 셋팅강 좌를 보셨다면, yum을 사용하여 쉽게 업데이트 할 수있는 방법이 있습니다. 다음과 같은 방법으로 설치도 가능합니다.

[root@study ~]# yum install vsftpd
Setting up Install Process
Setting up Repos
base 100% |=========================| 1.1 kB 00:00
updates-released 100% |=========================| 951 B 00:00
Reading repository metadata in from local files
base : ################################################## 2622/2622
updates-re: ################################################## 910/910
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for vsftpd to pack into transaction set.
vsftpd-2.0.1-5.i386.rpm 100% |=========================| 12 kB 00:00
---> Package vsftpd.i386 0:2.0.1-5 set to be updated
--> Running transaction check

Dependencies Resolved
Transaction Listing:
Install: vsftpd.i386 0:2.0.1-5 - base
Total download size: 119 k
Is this ok [y/N]: y
Downloading Packages:
(1/1): vsftpd-2.0.1-5.i38 100% |=========================| 119 kB 00:02
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: vsftpd 100 % done 1/1

Installed: vsftpd.i386 0:2.0.1-5
Complete!

설치가 되어 있지않다면, 위와 같이 설치하겠냐고 묻게 됩니다.. "y"를 눌러 설치 하시기 바랍니다.


3. FTP 서비스 운영 ( 시작, 종료, 재시작, 자동시작설정)
  설치가 끝났다면, ftp서비스를 위해서 vsftpd를 시작합니다.

[root@study ~]# /etc/rc.d/init.d/vsftpd start
vsftpd에 대한 vsftpd을 시작합니다: [ 확인 ]

이렇게 시작되었다면, ftp 프로그램을 사용하여 접속 테스트를 해 보도록 하겠습니다.

[root@study ~]# ftp localhost
Connected to study.superuser.co.kr.
220 (vsFTPd 2.0.1)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): study
331 Please specify the password.
Password: 비밀번호
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,158,1)
150 Here comes the directory listing.
226 Directory send OK.

위와같이 바로 접속되며, 사용자계정 및 비밀번호를 넣으면 접속이 된다.

ftp 서비스를 하고 싶지 않다면, 다음과 같이 정지 시킵니다.
[root@study ~]# /etc/rc.d/init.d/vsftpd stop
vsftpd를 종료하고 있습니다:                 [  확 인  ]

서버 부팅시 자동 시작을 위해 다음 명령으로 등록합니다.

[root@study ~]# chkconfig vsftpd on

이렇게 설정했다면, 재 시작시 자동으로 ftp 서비스가 시작 됩니다.


4. vsftpd의 다양한 기능 설정(vsftpd.conf)  vsftpd는 다양한 기능이 있습니다. 꼭 필요한 몇개의 지시자에 대해 알아보도록 하겠습니다.

  1) 아스키모드로 파일전송 하려면?
vsftp는 기본적으로 아스키모드(ASCII)로의 파일 전송을 허용하지 않습니다. 윈도우와 리눅스등의 엔터문자로 인한 text파일 변조(??)등 때문에 기본 허용하지 않습니다. 만약 필요해서 허용 하려면 다음과 같이 설정하시기 바랍니다.

ascii_download_enable=YES
ascii_upload_enable=YES


  2) 쉘권한이 없는 사용자들이 ftp를 사용가능하게 하려면?
대부분의 ftp서버는 로그인시 쉘을 요구하게 됩니다. 하지만 쉘 권한을 주지 않은 사용자들에게 ftp접근 권한을 주려면 /etc/pam.d/vsftpd파일에서 4번째 줄에 #을 입력하여 주석 처리 합니다.
(check_shell=NO 라는 지시자가 있었지만 PAM인증을 받는 곳에서는 작동하지 않았다.)


#%PAM-1.0
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed
auth       required     pam_stack.so service=system-auth
#auth       required     pam_shells.so
account    required     pam_stack.so service=system-auth
session    required     pam_stack.so service=system-auth


  3) 사용자 home 디렉토리를 벗어나지 못하게 하려면?
ftp사용자가 자기 home디렉토리를 벗어나지 못하게 하려면 다음과 같이 설정합니다.

chroot_list_enable=YES
chroot_local_user=YES
위와같이 설정합니다. 접속하면 /etc/vsftpd.chroot_list 파일이 없다고 에러가 나게 됩니다.
단순히 touch /etc/vsftpd.chroot_list 이렇게 파일을 만들어 주면 됩니다.
 그리고 특정유저는 제외하려면 /etc/vsftpd.chroot_list 파일에 사용자 계정을 넣어줍니다.



  4) "."으로 시작하는 숨김파일을 기본적으로 보이게 하려면?
리눅스에서 "."으로 시작하는 파일은 숨김 파일입니다. 하지만, 다른 os에서는 "."으로 시작해도 숨김파일으로 취급하지 않는 경우가 있습니다. 이런경우 항상 "."으로 시작하는 파일을 보여주려면 다음과 같이 설정합니다.
force_dot_files=YES



  5) ftp 접속시 파일과 디렉토리의 소유권을 숨기려면?
특수한 목적으로 파일 및 디렉토리의 소유자를 숨길 경우가 있습니다. 이런 경우 다음과 같이 설정하면, ftp라는 사용자로 보이며, 본 ID는 보이지 않습니다.
hide_ids=YES



  6) 하위디렉토리의 파일 및 디렉토리를 볼수 있는 ls -R 명령 허용하려면?
하위디렉토리 리스트를 보여주기 위해서 ls -R 명령어를 내릴때가 있습니다. 이런경우 대부분의 ftp 서버는 부하등의 이유로 막아 두게 됩니다. vsftpd또한 기본적으로 막아 놓은 상태이며, 허용하기 위해서는 다음 지시자를 입력하세요.
ls_recurse_enable=YES



  7) openssh에 chroot 패치가 된 것을 사용하는데 정책을 같이 적용하려면?
openssh에 패치를 가하면, ssh 또한 자기 home 디렉토리를 벗어나지 못하게 설정가능합니다. 이 정책은 /etc/passwd파일의 홈디렉토리 부분에 /home/사용자/./ 와 같이 "/./"을 붙여 사용자를 홈디렉토리로 제한하게 됩니다. 이 정책에 따라 적용하려면, 다음 옵션을 적용하시기 바랍니다.
passwd_chroot_enable=YES


  8) 파일을 올렸는데 시간이 이상하게 보인다면?

대부분의 ftp서버에서 시간 표현은 표준시각(GMT)을 보여주게 됩니다. 국내에서만 사용하는 ftp서버는 다음 옵션으로 국내 시간으로 보여줄 수 있습니다.
use_localtime=YES


  9) 전송속도를 제한하고 싶다면?
다운로드 받는 한 사용자가 네트웍 트래픽을 모두 사용해 버리는 것을 방지하기 위해서 대역폭을 조정해야 하는 경우가 있습니다. 다음 옵션으로 가능합니다. 뒤에 나오는 숫자의 단위는  (Bytes/Sec) 입니다.
local_max_rate=300000
위 설정은 300KByte/Sec의 대역폭을 제공합니다.


  10) 동시 접속자수를 제한하려면?
ftp서버에 접속할 수 있는 최대 접속수를 제한하려면, 아래의 설정으로 제한 가능합니다.
max_clients=10
위 설정은 동시에 10개의 연결으로 제한합니다.


  11) 한 IP당 접속할 수 있는 동시접속 수 제한하려면?
ftp서버의 한 사용자가 대역폭을 모두 사용해 버리는 것을 방지하기 위해, 전송 속도를 제한하면, flashget 등의 유틸리티로 몇개의 접속으로 나눠 받으면 대역폭 제한을 우회 할 수 있습니다. 이런경우 한 IP에서 접속 가능한 동시접속 수를 제한하므로 해결 가능합니다.
max_per_ip=2
위 설정은 한 IP에서 접속할 수 있는 연결을 2개로 제한합니다.


  12) PASSIVE 모드 사용시 사용하는 포트 범위를 제한하려면?
FTP에서 데이터 전송을 위해서 20번 포트를 사용합니다. 이경우 서버에서 클라이언트 쪽으로 연결을 하기 때문에 중간에 방화벽 또는 공유기등을 사용한다면, 정상작동하지 않을 수 있습니다. 이런 문제를 해결하기위해서 PASSIVE모드라는 것이 있고, 이 모드에서는 서버의 1024이후 포트를 사용합니다. 이 포트의 범위를 제한하기 위해서는 다음과 같이 설정합니다.
pasv_min_port=40000pasv_max_port=50000
위 설정은 PASSIVE에서 사용할 포트를 40000~50000로 합니다.



  13) mp3, wmv 등의 확장자를 가진 파일의 업로드를 금지하려면?
ftp를 통해 인증된 사용자가 파일을 올리는 것을 막는 방법은 거의 없었습니다. 이 vsftpd는 특이하게 특정파일 패턴을 제한하는 기능이 있습니다.
deny_file={*.mp3,*.wmv}
위 설정은 mp3, wmv 파일을 전송하지 못하게 하는 방법입니다.



  14) 특정파일 패턴을 숨기려면?
특정파일이 서버내에는 존재하지만, ftp접속시 보여지지 않게 설정할 수 있습니다. 다음예를 보시기 바랍니다.
hide_file={*.mp3,.hidden,hide*,h?}
위 설정은 mp3파일, .hidden 파일, hide로 시작하는 파일을 보여지지 않게 하는 옵션입니다.

SELinux 강좌

SELinux

각종 리눅스관련 트러블슈팅을 처리하다보면 공부해야할것들이 참 많다. 요즘 자주 거론되는 문제가 SELinux 관련된 문제들인데, SELinux 라면 아직 못들어본 사람이 꽤 많이 있을것이다.

SELinux의 내부적인 구현원리 같은 부분은 이 문서에 다루고자 하는 내용이 아니다. SELinux의 아키텍처나 코드에 대한 부분을 더 많이 알기위해서는 IBM의 기술문서(http://www-128.ibm.com/developerworks/kr/library/l-selinux/index.html) 을 참고하거나 NSA의 홈페이지(http://www.nsa.gov/selinux/)등를 참고하기 바란다. 필자는 단지 여러분이 시스템을 관리하면서 새롭게 만나게되는 SELinux에 관련된 문제를 이문서를 통해서 해결할수 있기를 바랄뿐이다.

작성자 : 김형채


차례

1. SELInux(Security-Enhanced Linux) 란?                                                                          1

2. SELinux 정책이란 무엇인가?                                                                                          1

3. SELinux 설치여부 확인                                                                                                  2

4. SELinux 기본설정 - /etc/sysconfig/selinux                                                                     4

5. SELinux 서비스 설정 - setenforce                                                                                   5

6. SELinux 서비스 설정 - chcon                                                                                         5

7. SELinux 서비스 설정 - setsebool                                                                                    5

8. 사용중인 정책을 교체하는 방법은?                                                                                   6

9. SELinux LOG                                                                                                               7

10. Audit2allow                                                                                                                8

11. avc: denied                                                                                                                8

12. 참고문헌 또는 URL                                                                                                      8

1. SELInux(Security-Enhanced Linux) 란?

SELinux 란 미 국가 보안국 (U.S. National Security Agency)리 오픈소스커뮤니티에 릴리즈한 Linux의 보안 강화 버전(코드 포함)으로서 리눅스 보안 모듈 구조체(Linux Security Modules(LSM) framework)를 이용하여 리눅스 커널에 의무 접근 제어(Mandatory Access Control - MAC)를 구현하는 것이다. Fedora Core3부터 기본으로 적용되기 시작하였고, 현재 대부분의 최신 리눅스 배포판에서 지원되고있다.

SELinux에 대한 이해를 돕기위해서 DAC, MAC를 잠깐 이야기 해보자.

표준 리눅스 보안은 Discretionary Access Control - DAC 모델을 따른다. DAC 모델에서, 파일과 자원에 대한 결정권은 오직 해당 객체(objects)의 사용자(user id)에게 있고 소유권(ownership)에 따라 이뤄진다. 각 사용자와 그 사용자에 의해 실행된 프로그램은 자기에게 할당된 객체에 대해 전적으로 자유재량권을 갖는다. 이러한 상황에서는, 악의 있는 일반 혹은 루트 사용자(예로, setuid와 setgid)가 실행시킨 결함이 있는 소프트웨어를 통해 주어진 객체로 원하는 어떠한 일을 해도 막아낼 방법이 없으며 보안 정책을 시스템 전체에 걸쳐 시행되도록 할 방법이 없다.

반면에 SELinux하에서 MAC는 모든 주체(subjects - 사용자, 프로그램, 프로세스)와 객체(파일, 디바이스)에 대해서 국부적으로 허가(granular permissions)해 줄 수 있다. 응용프로그램에서 불필요한 부분은 제외하고 오직 필요한 기능에 대해서만 사용 권한을 안전하게 부여하는것이 가능하다.

SELinux는 모든 주체 (사용자, 프로그램, 프로세스) 및 객체 (파일과 장치)에 각각 다른 권한을 부여할 수 있게 해줍니다. 따라서 사용자는 한 응용 프로그램에게 그 프로그램이 제대로 작동하는데 필요한 권한만 안전하게 부여할 수 있다.

2 . SELinux 정책이란 무엇인가?

SELinux 정책은 사용자, 프로그램, 프로세스 그리고 이들의 동작 대상인 파일과 디바이스를 포함한 시스템 전체, 즉, 모든 주체와 객체에 대한 접근 허가(access permissions)를 포함한 패키지를 이야기한다. 페도라에서 사용가능한 정책 패키지는 strict , targeted 두가지가 있다.

페도라코어에서 SELinux 정책으로 strict policy 를 적용함으로 인해서 다양한 사용자들이 많은 문제점을 일으킴으로 인해서(일반사용자들이 SELinux를 사용하기 위해서는 수준높은 전문기술이 필요하다) 현재 RHEL4 에서는 보다 완화된 정책패키지 targeted poicy 가 설치시 기본으로 제공된다.

targeted policy는 자주 문제시되는 부분들만 우선적으로 적용시키고, 나머지는 표준 리눅스 보안과 동일하게 운영되도록 적용한 정책이다.

현재, targeted policy 에서는 dhcpd, httpd(apache.te), named, nscd, ntpd, portmap, snmpd, squid 그리고 syslogd 데몬에 대해서 관리한다. 이 데몬들에 대한 정책 파일은 /etc/selinux/targeted/src/policy/domains/program에서 찾을 수 있다.

3 . SELinux 설치여부 확인

SELinux 를 사용하고 있는지를 확인하는 방법은 보안문맥을 확인하는 방법으로 알 수 있다.

파일, 사용자, 프로세스등의 문맥을 확인할 때는 -Z 라는 새 옵션을 이용해서 확인할 수 있다.


ls -lZ /etc/selinux


-rw-r--r--  root    root   system_u:object_r:selinux_config_t config

drwxr-xr-x  root    root   system_u:object_r:selinux_config_t targeted


-Z옵션을 이용해서 보안문맥을 보여주는데 이 결과를 통해서 "system_u" 사용자, "object_r" 역할,  "selinux_config_t" 타입을 확인할수 있다. 이런 문맥으로 SELinux의 정책에 비교해서 허용하거나 거부하게 되므로 문맥이 확인가능하다면 SELinux 를 사용중인 것이다..


파일 이외에 프로세스와 사용자에도 각각 아래처럼 보안문맥을 확인할수 있다


root@example# ps axZ | grep squid

user_u:system_r:squid_t          3912 ?        Ss     0:00 squid -D

user_u:system_r:squid_t          3915 ?        S      9:10 (squid) -D

user_u:system_r:squid_t          3916 ?        Ss     0:01 (unlinkd)


root@example# id

uid=0(root)

gid=0(root)groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

context=root:system_r:unconfined_t


RedHat 의 SELinux 패키지 경우에는 sestatus -v 라는 명령을 이용해서 현재 SELinux의 사용상태를 아래와 같이 확인할수 있다.

[root@ns selinux]# sestatus -v

SELinux status:         enabled

SELinuxfs mount:        /selinux

Current mode:           enforcing

Mode from config file:  enforcing

Policy version:         18

Policy from config file:targeted


Policy booleans:

allow_ypbind            active

dhcpd_disable_trans     inactive

httpd_disable_trans     active

httpd_enable_cgi        active

httpd_enable_homedirs   active

httpd_ssi_exec          active

httpd_tty_comm          inactive

httpd_unified           active

mysqld_disable_trans    inactive

named_disable_trans     active

named_write_master_zonesactive

nscd_disable_trans      active

ntpd_disable_trans      inactive

portmap_disable_trans   inactive

postgresql_disable_transinactive

snmpd_disable_trans     inactive

squid_disable_trans     inactive

syslogd_disable_trans   inactive

winbind_disable_trans   inactive

ypbind_disable_trans    inactive


Process contexts:

Current context:        root:system_r:unconfined_t

Init context:           user_u:system_r:unconfined_t

/sbin/mingetty          user_u:system_r:unconfined_t

/usr/sbin/sshd          user_u:system_r:unconfined_t


File contexts:

Controlling term:       root:object_r:devpts_t

/etc/passwd             root:object_r:etc_t

/etc/shadow             system_u:object_r:shadow_t

/bin/bash               system_u:object_r:shell_exec_t

/bin/login              system_u:object_r:bin_t

/bin/sh                 system_u:object_r:bin_t -> system_u:object_r:shell_exec_t

/sbin/agetty            system_u:object_r:sbin_t

/sbin/init              system_u:object_r:init_exec_t

/sbin/mingetty          system_u:object_r:sbin_t

/usr/sbin/sshd          system_u:object_r:sbin_t

/lib/libc.so.6          system_u:object_r:lib_t -> system_u:object_r:shlib_t

/lib/ld-linux.so.2      system_u:object_r:lib_t -> system_u:object_r:ld_so_t

[root@ns selinux]#

4 . SELinux 기본설정 - /etc/sysconfig/selinux

배포판마다 서비스 설정방법은 차이가 있다. 필자가 테스트한 레드햇과 페도라 배포판에서는 /etc/sysconfig/selinux 파일에서 SELinux 의 사용가능한 모드를 설정한다.


/etc/sysconfig/selinux 파일의 내용


# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

#       enforcing - SELinux security policy is enforced.

#       permissive - SELinux prints warnings instead of enforcing.

#       disabled - SELinux is fully disabled.

SELINUX=enforcing

# SELINUXTYPE= type of policy in use. Possible values are:

#       targeted - Only targeted network daemons are protected.

#       strict - Full SELinux protection.

SELINUXTYPE=targeted

이 파일에는 두부분의 설정이 있는데 SELINUX 의 상태(enforcing, permissive, disabled)를 설정하는 부분과 활성화시킬 보안정책(strict 또는 targeted 중 하나)을 결정하는 SELINUXTYPE 이라는 부분이 있다.

disabled ? SELinux 보안 제어를 사용하지 않으려면 disalbed 옵션을 선택한다. disalbed 설정은 보안 제어 기능을 끄고 시스템이 보안 정책을 사용하지 않도록 설정한다.

permissive ? 이것을 선택하면 서비스 거부 메시지를 통보받을 수 있다. permissive 상태로 설정하면 자료와 프로그램에 이름을 할당한 후 로그를 기록하지만 보안 정책을 사용하지는 않는다. permissive 상태는 SELinux를 처음 접하는 경우 처음부터 이 기능을 완전히 활성화하지 않고 우선 이 정책을 사용해서 일반 시스템 작업시 어떠한 영향을 미치는지 알아보려는 경우 좋은 시작점이 될 수 있다. 그러나 경고 옵션을 선택시 가끔씩 보안경고 대상이 아닌 것을 경고 대상으로 탐지하는 오류(false positive)나 경고 대상인 것을 탐지하지 않는 오류(false negative)가 발생할 가능성도 있으니 주의가 필요하다.

enforcing ? SELinux를 완전히 활성화하시려면 enforcing 옵션을 선택하자. enforcing 옵션을 선택하면 추가 시스템 보안을 위해 모든 보안 정책 (예, 허가가 없는 사용자가 특정한 파일이나 프로그램에 접근하는 것을 거부하기)을 사용한다. SELinux가 완전히 실행되어도 아무런 지장을 받지않고 일반적인 시스템 작업을 수행할 수 있다고 자신하시경우 이 옵션을 선택한다.

5 . SELinux 서비스 설정 - setenforce
SELinux의 서비스 상태를 변경해야 하는 필요가 있을때는 직접 /etc/sysconfig/selinux 파일에서 SELINUX=enforcing , 또는 SELINUX=permissive 처럼 수정해서 변경하는 방법도 있지만 setenforce 라는 명령어를 이용할수 있다.

"setenforce 0" 이라고 명령을 내리는것은  SELINUX=permissive 와 동일한 결과이며, "setenforce 1" 은 enforcing 모드를 의미한다. 시스템에서 SELinux 를 완전히 사용하지 않으려면 /etc/sysconfig/selinux 파일에서 SELINUX=disabled 처럼 설정하거나 시스템 부팅시에 부트로더의 파라미터로 selinux=0 이라고 주고 부팅하면 된다. (grub 을 사용하는 경우라면 grub 화면에서 e 를 누르고 편집모드로 들어간뒤에 kernel 줄의 맨 뒤에 selinux=0 을 적어주고 ESC, 그리고 b 를 눌러서 부팅하면 된다..)


sentenforce 명령은 sysadm_r 권한을 갖고 수행해야 한다; 그러기 위해, newrole 명령을 사용하거나, 아니면, su -를 사용하여 root 로 사용자 전환을 하면, 자동으로 sysadm_r 권한을 얻을 수 있다.

6 . SELinux 서비스 설정 - chcon

SELinux 의 보안문맥을 변경해야 하는 경우에는 chcon 이라는 명령을 사용할수 있다.

아파치를 사용중에 분명히 디렉토리를 생성했는데도 에러가 난다면 아래처럼 http_user_content_t 를 해당 DocumentRoot 에 적용해줌으로 해결해 줄수있다.

chcon -R -t httpd_user_content_t /home/사용자계정/public_html

7 . SELinux 서비스 설정 - setsebool
[root@ns ~]# cat /etc/selinux/targeted/booleans

allow_ypbind=1

dhcpd_disable_trans=0

httpd_disable_trans=1

httpd_enable_cgi=1

httpd_enable_homedirs=1

httpd_ssi_exec=1

httpd_tty_comm=0

httpd_unified=1

mysqld_disable_trans=0

named_disable_trans=1

named_write_master_zones=1

nscd_disable_trans=1

ntpd_disable_trans=0

portmap_disable_trans=0

postgresql_disable_trans=0

snmpd_disable_trans=0

squid_disable_trans=0

syslogd_disable_trans=0

winbind_disable_trans=0

ypbind_disable_trans=0

 

RHEL4의 경우 전환가능한 시스템의 SELinux 설정값들을 나타내는 파일은 /etc/selinux/targeted/booleans  파일이다. 파일안의 각 항목은 system-config-securitylevel 이라는 어플리케이션이나 setsebool 이라는 명령을 이용해서 변경시킬수 있으며 setsebools 을 이용하는 경우 -P 옵션을 사용하지 않으면 설정파일은 변경되지 않고 현재의 설정만 바뀌지만 -P 옵션을 같이 사용하면 /etc/selinux/targeted/booleans 파일의 내용까지 같이 변경되어 시스템 리부팅후에도 적용된다

8 . 사용중인 정책을 교체하는 방법은?

정책 교체는 가볍게 취할 사안이 아니다.

연구 목적으로 시험 장비(test machine)에서 새 정책을 시도하는 이외, 생산 시스템(production system)에서는 다른 정책으로 교체하기 전에 현황을 심각하게 고려해야 한다.


교체 작업은 간단하다. 이는 매우 안전한 방법이지만, 우선 시험 시스템에서 일차 시도해 보는 것이 바람직하다.

한 가지 방법은 system-config-securitylevel을 사용하여 정책을 바꾸고 재명명(relabel)하도록 파일 시스템을 설정하는 것이다.

수작업 절차는 다음과 같다:

1. /etc/selinux/config을 편집하고 SELINUXTYPE=policyname으로 정책 유형을 바꾼다.

2. 재부팅하여 돌아올 수 있는 지 확인하기위해, SELINUX=permissive모드로 설정한다. 이렇게 하면, SELinux는 정확한 정책하에서 가동될 것이지만, 만일 부정확한 파일 문맥 명명(labeling)과 같은 문제가 있으면 로그인하도록 할 것이다.

3. sysadm_r 역할을 갖춘 root로 파일 시스템을 재명명한다(relabel):

id -Z

root:sysadm_r:sysadm_t

fixfiles relabel

옵션 -l /path/to/logfile을 사용하여 표준 출력으로 로그를 볼 수 있고, 옵션 -o /path/to/file을 사용하여 검토(checked)되거나 재명명(relabel ed)된 모든 파일 리스트를 저장할 수 있다.

4. 시스템을 재부팅한다. 새 정책하에서의 재시작은 모든 시스템 프로세스가 적절한 문맥에서 시작되고 정책 변경으로 인한 모든 문제가 드러나게 한다.

5. sestatus -v 명령으로 발효된 변경사항을 확인한다. Permissive 모드로 가동된 새 시스템에서, avc: denied 메시지를 /var/log/messages에서 확인한다. 이들은 새 정책하에 문제없이 시스템이 가동되도록 해결해야 할 문제들을 표시해 준다.

6. 새 정책하에서 시스템이 만족스럽게 돌아갈 때, SELINUX=enforcing 으로 바꿔 실행 권한을 부여한다. 실시간에 enforcing을 활성화 시키기 위해 재부팅하거나 setenforce 1 을 실행한다.

9 . SELinux LOG

SELinux 의 로그는 /var/log/messages 파일에 아래처럼 나타난다


kernel: audit(1114070701.193:0): avc:  denied  { read } for  pid=24216

exe=/usr/libexec/mysqld name=mysql dev=cciss/c0d0p6 ino=16408

scontext=user_u:system_r:mysqld_t tcontext=root:object_r:var_lib_t

tclass=dir


이 로그는 아래와 같이 해석할수 있다.


- 읽기 요청이 거부되었다.

- PID 24216을 가진 프로세스가 read를 시도한다

- 해당프로세스는 /usr/libexec/mysqld 이다

- /dev/cciss/c0d0p6 에서 작동되고 있다

- inode 는 16408이다.

- 프로세스의 SELinux 문맥은 user_u:system_r:mysqld_t 이다.

- tcontext=root:object_r:var_lib_t : 이파일이 읽기를 시도하는 파일은 var_lib_t 타입의 root 소유파일이다


SELinux LOG 각 항목의 의미

audit(timestamp) -- This field states that it's an audit message from SELinux and that it was logged at timestamp time (in seconds since Jan. 1st, 1970).

avc -- This message was from the SELinux access vector cache. Pretty much every message you are likely to see is from this cache.

denied | accepted -- This field indicates whether the action was denied or accepted. You may see logs of accepted messages in some cases (like reloading the policy).

{ read | write | unlink | ... } -- This field shows the type of action that was attempted, such as reading a file, writing, unlinking, loading policy, etc.

for pid= -- This is the process ID that attempted the action.


exe= -- This is the path to the executable that started the process.

name= -- This is the name of the target on which the action was attempted.

dev= -- This is the device on which the target file is located.

ino= -- This is the inode of the target of the action.

scontext= -- This is the process's security context. This contains user, role, and type.

tcontext= -- This is the security context of the target of this action, for example, the file, directory, etc.

tclass= -- This is the class of the target object, such as directory, file, device node, or something else.

10 . Audit2allow

정책 작성자에게 유용한 도구는 /usr/bin/audit2allow 인데 이것은 /var/log/messages의  avc 메시지를 SELinux에 의해 사용될 수 있는 규칙으로 번역해준다. 사용이 불가능하다면 policycoreutils 패키지에 속해있으므로 yum install policycoreutils 처럼 설치 가능하다.

audit2allow명령은 세가지 방법으로 입력을 받을 수 있다. 기본은 표준입력 (stdin)이다. -i 옵션을 사용하면 /var/log/messages 로부터 입력을 읽을 수 있고 -d옵션을 사용하면 dmesg 출력으로부터 입력을 읽을 수 있다.

11 . avc: denied

이 메시지는 현재 실행된 SELinux 정책이 그 응용프로그램의 동작을 허락하지 않기 때문이다. 이러한 일에는 여러 가지 사유가 존재한다.

첫째, 응용프로그램이 접근하려는 파일중 하나가 잘못 명명되어있을 수 있다. 만일 AVC 메시지가 특정 파일을 참조한다면, ls -alZ /path/to/file 을 수행하여 현재 참조하는 파일명(current label)을 조사해 보라. 만일 그것이 잘못되어 보이면, restorecon -v /path/to/file 을 시도해보라. 만일 파일과 관련된 매우 많 은 거부(denials) 상황이 존재하면, fixfiles relabel 을 수행하거나, 반복적으로 디렉토리 경로를 재명명하기 위해서 -R옵션과 함께 restorecon 을 수행하고 싶을 수 있다.

다른 때에는, 거부(denials) 현상은 정책에 의해 거부되도록 프로그램에 설정을 바꿔서 발생될 수 있다. 예를 들면, 만일 Apache를 8800포트로 바꾸면, 보안 정책, apache.te,도 관련하여 바꿔야 할 필요가 생긴다. 정책 작성에 관한 상세한 정보가 필요하면, 외부연결 리스트(External Link List)를 보라.

12 . 참고문헌 또는 URL

 

Home of the SELinux project -- http://www.nsa.gov/selinux/

The Un-Official SELinux FAQ -- http://www.crypt.gen.nz/selinux/faq.html

SELinux link zoo -- http://www.crypt.gen.nz/selinux/links.html

Ubuntu Linux SELinux pages -- https://www.ubuntulinux.org/wiki/SELinux

2005.8 Sys Admin Magazine -- http://www.samag.com/documents/s=9820/sam0508a/0508a.htm

NSA SELinux FAQ ? http://www.nsa.gov/selinux/info/faq.cfm

SELinux community page ? http://selinux.sourceforge.net

UnOfficial FAQ ? http://www.crypt.gen.nz/selinux/faq.html

Writing SE Linux policy HOWTO ? https://sourceforge.net/docman/display_doc.php?docid=21959&group_id=21266

Getting Started with SE Linux HOWTO: the new SE Linux (Debian) ? https://sourceforge.net/docman/display_doc.php?docid=20372&group_id=21266

출처 : Tong - 등가교환님의 Linux통

WebBrowser 컨트롤을 사용하여 Office 문서를 여는 방법

WebBrowser 컨트롤을 사용하여 Office 문서를 여는 방법

기술 자료 ID : 243058
마지막 검토 : 2006년 3월 30일 목요일
수정 : 4.2

요약

Office 문서 작업을 할 때 이러한 문서를 Visual Basic에 직접 표시하려는 경우 OLE 컨테이너 컨트롤을 사용하여 포함된 OLE 개체를 만들지 않고 기존 문서에 연결한 다음 해당 문서를 현재 위치의 ActiveX 문서 개체로 열고자 할 수 있습니다. Microsoft WebBrowser 컨트롤을 사용하면 이 작업을 수행할 수 있습니다.

이 문서에서는 기존 Office 문서를 탐색하여 WebBrowser 컨트롤을 통해 Visual Basic에 표시하는 방법을 보여 줍니다.

위로 가기

추가 정보

ActiveX 문서는 삽입 가능한 OLE 개체로서 기존 OLE 개체보다는 ActiveX 컨트롤과 더욱 비슷하게 동작합니다. 일반적인 포함 개체와 달리 ActiveX 문서는 더 큰 문서에 포함되도록 설계되지 않았습니다. 대신, ActiveX 문서는 자체적으로 완전한 문서로 간주되어 Internet Explorer와 같은 뷰어를 사용하여 표시되거나 Binder 파일 같은 다른 문서와 함께 단일 리소스로 수집됩니다.

Microsoft Visual Basic에서는 현재 ActiveX 문서를 직접 호스트하지는 않지만 Internet Explorer 및 해당 WebBrowser 컨트롤 기능을 사용하면 이러한 제한 사항을 해결할 수 있습니다. WebBrowser 컨트롤(Shdocvw.dll)은 Internet Explorer의 일부분으로 Internet Explorer를 설치한 시스템에서만 사용할 수 있습니다.

위로 가기

Office 문서를 여는 Visual Basic 응용 프로그램 만들기

Office 문서를 여는 Visual Basic 응용 프로그램을 만들려면 다음 단계를 수행하십시오.
1. Visual Basic을 시작하고 표준 프로젝트를 새로 만듭니다. 기본적으로 Form1이 만들어집니다.
2. 프로젝트 메뉴에서 구성 요소를 선택하여 구성 요소 대화 상자를 엽니다. 구성 요소 대화 상자에서 Microsoft Common Dialog Control 및 Microsoft Internet Controls에 대한 참조를 추가합니다. 확인을 눌러 도구 상자에 해당 항목을 추가합니다.
3. WebBrowser 컨트롤, CommonDialog 컨트롤 및 CommandButton 인스턴스를 Form1에 추가합니다.
4. 그런 다음 Form1의 코드 창에 다음 코드를 추가합니다.
Option Explicit

Dim oDocument As Object

Private Sub Command1_Click()
   Dim sFileName As String
   
 ' Find an Office file...
   With CommonDialog1
      .FileName = ""
      .ShowOpen
      sFileName = .FileName
   End With
   
 ' If the user didn't cancel, open the file...
   If Len(sFileName) Then
      Set oDocument = Nothing
      WebBrowser1.Navigate sFileName
   End If
End Sub

Private Sub Form_Load()
   Command1.Caption = "Browse"
   With CommonDialog1
      .Filter = "Office Documents " & _
      "(*.doc, *.xls, *.ppt)|*.doc;*.xls;*.ppt"
      .FilterIndex = 1
      .Flags = cdlOFNFileMustExist Or cdlOFNHideReadOnly
   End With
End Sub

Private Sub Form_Unload(Cancel As Integer)
   Set oDocument = Nothing
End Sub

Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, _
URL As Variant)
   On Error Resume Next
   Set oDocument = pDisp.Document

   MsgBox "File opened by: " & oDocument.Application.Name
End Sub
					
5. F5 키를 눌러 이 프로젝트를 실행합니다. Browse 단추를 선택하면 Word, Excel 또는 PowerPoint 파일을 탐색할 수 있는 열기 대화 상자가 나타납니다. 열기를 선택하면 문서가 WebBrowser 컨트롤 내에서 열립니다. 그러면 파일을 연 Office 응용 프로그램의 이름이 표시된 메시지 상자가 나타납니다.

위로 가기

WebBrowser 컨트롤 사용 시 고려 사항

WebBrowser 컨트롤을 사용할 때는 다음과 같은 항목을 고려해야 합니다.
? WebBrowser 컨트롤은 문서를 비동기적으로 탐색합니다. 즉, WebBrowser1.Navigate를 호출하면 문서를 완전히 로드하기 전에 해당 Visual Basic 응용 프로그램에 컨트롤이 반환됩니다. 포함된 문서를 자동화할 계획이라면 문서가 완전히 로드된 시기를 알 수 있도록 NavigateComplete2 이벤트를 사용해야 합니다. Office 문서 개체에 대한 참조를 가져오기 위해 전달되는 WebBrowser 개체의 Document 속성(앞에서 설명한 코드에서는 oDocument로 설정됨)을 사용합니다.
? WebBrowser 컨트롤은 메뉴 병합을 지원하지 않습니다. 문서의 메뉴 항목이 Visual Basic 메뉴와 함께 나타나도록 해야 하는 경우에는 OLE 컨테이너 컨트롤을 대신 사용해야 합니다.
? WebBrowser 컨트롤은 대개 Office 문서를 표시하기 전에 도킹된 모든 도구 모음을 숨깁니다. 다음과 같은 코드를 사용하여 자동화를 통해 움직이는 도구 모음을 표시할 수 있습니다.
   With oDocument.Application.CommandBars("Standard")
      .Position = 4 '[msoBarFloating]
      .Visible = True
   End With
					
또한 최신 Internet Explorer 버전(5.0 이상)을 사용하면 다음 코드를 통해 도킹된 도구 모음을 표시할 수 있습니다.
 ' This is a toggle option, so call it once to show the 
 ' toolbars and once to hide them. This works with Internet Explorer 5
 ' but often fails to work properly with earlier versions...
   WebBrowser1.ExecWB OLECMDID_HIDETOOLBARS, OLECMDEXECOPT_DONTPROMPTUSER
					
? 하나의 프로젝트에서 둘 이상의 WebBrowser 컨트롤을 사용하여 동일한 종류의 Office 문서를 로드하면 문제가 발생하는 것으로 알려져 있습니다. 즉, 컨트롤이 모두 Word 문서만 로드하거나 Excel 스프레드시트만 로드하는 경우 문제가 발생합니다. 프로젝트당 컨트롤을 하나만 사용하고 한 번에 한 가지 문서만 탐색하는 것이 좋습니다.

가장 일반적인 문제는 Office 명령 모음이 사용할 수 없는 것처럼 나타나는 것입니다. 같은 폼에 WebBrowser 컨트롤이 두 개 있고, 두 컨트롤 모두 Word 문서를 로드하며, 앞의 예제 코드를 사용하여 도구 모음을 표시한 경우 하나의 도구 모음만 활성화되고 제대로 작동합니다. 다른 도구 모음은 사용할 수 없는 상태가 됩니다.
? 다른 명령 단추의 Click 이벤트(또는 다른 적절한 코드 부분)에서 WebBrowser의 현재 내용을 지우려면 아래의 코드를 사용하여 기본 빈 페이지로 이동하도록 합니다.
   WebBrowser1.Navigate "about:blank"
					

위로 가기

참조

Visual Basic의 WebBrowser 컨트롤에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
162719 (http://support.microsoft.com/kb/162719/) Visual Basic 5.0에서 WebBrowser 컨트롤을 사용하는 방법
188271 (http://support.microsoft.com/kb/188271/) VB에서 Web Browser 컨트롤의 내용을 인쇄하는 방법
191692 (http://support.microsoft.com/kb/191692/) PRB: Shdocvw.dll이 PDW 설치 패키지에 포함되지 않는다
238313 (http://support.microsoft.com/kb/238313/) PRB: Visual Basic에서 Internet Explorer 문서 개체 모델 액세스




?Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹 (http://support.microsoft.com/newsgroups/default.aspx)에 참여하시기 바랍니다.

위로 가기


본 문서의 정보는 다음의 제품에 적용됩니다.
? Microsoft Office Excel 2003
? Microsoft Excel 2002 Standard Edition
? Microsoft Excel 2000 Standard Edition
? Microsoft Excel 97 Standard Edition
? Microsoft Visual Basic 6.0 Professional Edition
? Microsoft Visual Basic 5.0 Professional Edition
? Microsoft Visual Basic 6.0 Enterprise Edition
? Microsoft Visual Basic 5.0 Enterprise Edition
? Microsoft Office PowerPoint 2003
? Microsoft PowerPoint 2002 Standard Edition
? Microsoft PowerPoint 2000 Standard Edition
? Microsoft PowerPoint 97 Standard Edition
? Microsoft Office Word 2003
? Microsoft Word 2002 Standard Edition
? Microsoft Word 2000 Standard Edition
? Microsoft Word 97 Standard Edition

위로 가기

테스트

ㅎㅎㅎㅎㅎ테스트