Monday, March 6, 2017

AWS EC2 - p2 인스턴스에 텐서플로 도입하기 (원제: p2 インスタンスへの TensorFlow 導入)

들어가며

이 글에서는 AWS의 GPU 머신 중 가장 성능이 높은 p2 계열 머신에서의 텐서플로 환경 구성을 다룹니다.
최종적으로는 AWS Step Function과 AWS Lambda를 결합, 여기서 만든 머신을 스팟인스턴스로 시작해 자동으로 머신러닝을 돌리는 것을 목표로 하고 있습니다.
※ p2 인스턴스는 현재 도쿄 리전에서 사용이 불가능합니다. Oregon・Virginia 등의 리전을 사용해주세요.
(역주: 17/04/14 서울 리전에 출시되었습니다. 서울/도쿄 양쪽 모두 사용 가능합니다. https://aws.amazon.com/ko/blogs/korea/now-available-p2-instance-type-in-asia-pacific-seoul-region/ )

이미지(AMI) 선택

텐서플로 공식 문서에 따르면 Linux의 경우 Ubuntu를 베이스로 만들어진 듯 하여 Ubuntu를 선택하였습니다.
Ubuntu Server 16.04 LTS (HVM), SSD Volume Type
미리 CUDA 환경 등이 탑재되어있는 Amazon Linux AMI 등도 있는 듯 하지만 리뷰에 따르면 GPU 실행에 문제가 있다는 글도 있고 그다지 딱 맞는 느낌은 아니었기에 Ubuntu로 처음부터 만들었습니다.
머신러닝은 디폴트로 생성되는 ubuntu 유저로 실행하겠습니다.
(최종적인 머신러닝은 자동화하기에 하나의 인스턴스에 하나의 유저가 좋습니다.)

pyenv, aws 커맨드

(저는 개인적으로 bash가 아니라 zsh를 사용하기에 미리 chsh 명령어를 사용해 디폴트 쉘을 zsh로 변경해두었습니다.)
온디맨드로 p2 인스턴스를 기동해 ubuntu 유저로 로그인, 아래와 같이 설정합니다.
파이썬은 앞으로의 유지보수를 고려해 pyenv를 사용합니다.
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install libffi-dev libssl-dev
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
emacs .zshenv
다음과 같이 .zshenv 에 추가합니다.
차후 머신러닝자동화시 .zshrc에 환경변수를 기록하면 로드를 하지 않아 빼두었습니다.
export PYENV_ROOT=$HOME/.pyenv
export PATH=$PYENV_ROOT/bin:$PYENV_ROOT/shims:$PATH
eval "$(pyenv init -)"
이어서 다음과 같이 실행합니다.
source .zshrc
pyenv install 3.5.2
pyenv global 3.5.2
which pip3
> /home/ubuntu/.pyenv/shims/pip3 # pyenv에서 제대로 사용되는지 확인
pip3 install --upgrade pip
pip3 install aws

GPU / Cuda

http://qiita.com/S_Shimotori/items/3a10b35cf64d74b6b07e
에 따라 GPU / Cuda 를 설치합니다. 텐서플로에 관해서는 해당 글이 오래되어 다른 방법을 이용해야 합니다.
경로를 사용하는 부분은 .zshenv 에 입력해두도록 합시다.
최신 라이브러리들을 사용하기 위해 아래의 링크를 확인합니다.

텐서플로

https://www.tensorflow.org/install/install_linux
의 공식 페이지에 따라 인스톨. pip3를 사용하는 것이 편리했습니다. 
sudo apt-get install libcupti-dev
sudo pip3 uninstall tensorflow
pip3 install tensorflow-gpu sklearn matplotlib scipy
sklearn 외에 word2vec 등은 이미지생성 등에 필요해 추가하였습니다.

동작 확인

word2vec 의 코드 등을 이용해 동작을 확인합니다.
git clone https://github.com/tensorflow/tensorflow.git
python tensorflow/tensorflow/examples/tutorials/word2vec/word2vec_basic.py
또한, 실행시에 다음과 같은 로그가 출력되는지를 통해 GPU가 사용되고 있는지 여부를 확인할 수 있습니다.
(다음 예시는 p2.8xlarge의 경우입니다. p2.xlarge의 경우에는 GPU가 한 개만 장착되어 있기에 더 적은 로그를 발생시킵니다.)
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcublas.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcudnn.so.5 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcufft.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcurand.so.8.0 locally
...
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0 1 2 3 4 5 6 7
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0:   Y Y Y Y Y Y Y Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 1:   Y Y Y Y Y Y Y Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 2:   Y Y Y Y Y Y Y Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 3:   Y Y Y Y Y Y Y Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 4:   Y Y Y Y Y Y Y Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 5:   Y Y Y Y Y Y Y Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 6:   Y Y Y Y Y Y Y Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 7:   Y Y Y Y Y Y Y Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Tesla K80, pci bus id: 0000:00:17.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:1) -> (device: 1, name: Tesla K80, pci bus id: 0000:00:18.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:2) -> (device: 2, name: Tesla K80, pci bus id: 0000:00:19.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:3) -> (device: 3, name: Tesla K80, pci bus id: 0000:00:1a.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:4) -> (device: 4, name: Tesla K80, pci bus id: 0000:00:1b.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:5) -> (device: 5, name: Tesla K80, pci bus id: 0000:00:1c.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:6) -> (device: 6, name: Tesla K80, pci bus id: 0000:00:1d.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:7) -> (device: 7, name: Tesla K80, pci bus id: 0000:00:1e.0)
여기에 더해 nvidia-smi 커맨드를 이용하면 실제 어떤 GPU가 쓰이고 있는지 확인 가능합니다.
nvidia-smi

Fri Feb 24 07:20:43 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 367.57                 Driver Version: 367.57                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla K80           Off  | 0000:00:17.0     Off |                    0 |
| N/A   56C    P0    59W / 149W |  10915MiB / 11439MiB |     31%      Default |
+-------------------------------+----------------------+----------------------+
|   1  Tesla K80           Off  | 0000:00:18.0     Off |                    0 |
| N/A   44C    P0    71W / 149W |  10877MiB / 11439MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   2  Tesla K80           Off  | 0000:00:19.0     Off |                    0 |
| N/A   55C    P0    58W / 149W |  10877MiB / 11439MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   3  Tesla K80           Off  | 0000:00:1A.0     Off |                    0 |
| N/A   47C    P0    72W / 149W |  10875MiB / 11439MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   4  Tesla K80           Off  | 0000:00:1B.0     Off |                    0 |
| N/A   56C    P0    59W / 149W |  10875MiB / 11439MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   5  Tesla K80           Off  | 0000:00:1C.0     Off |                    0 |
| N/A   49C    P0    70W / 149W |  10875MiB / 11439MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   6  Tesla K80           Off  | 0000:00:1D.0     Off |                    0 |
| N/A   58C    P0    58W / 149W |  10873MiB / 11439MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   7  Tesla K80           Off  | 0000:00:1E.0     Off |                    0 |
| N/A   50C    P0    71W / 149W |  10873MiB / 11439MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
GPU Util 부분이 GPU 사용률입니다. 0번째의 GPU 만이 31% 사용되고 있는 것을 알 수 있습니다.
전체 GPU를 사용하는 경우, 텐서플로의 애플리케이션코드상의 수정이 필요한 듯 합니다.(확실치 않습니다.)

AMI

현 단계까지 완료 되었다면 AMI로 만들어둡니다.

다음 단계로

지금까지 딥러닝이 가능하도록 준비하는 과정을 차례대로 실행하였습니다.
하지만 p2 인스턴스는 비싸기에 사용이 끝나면 자동으로 셧다운 되도록 한다든가 여러 자동화가 필요하겠지요?
그렇다면 AWS 스팟인스턴스에서 텐서플로 러닝 자동화를 참고하세요.

번역된 컨텐츠입니다.
Qiita. by halhorn. http://qiita.com/halhorn/items/361008b19b4fcfd618d6

Translated article.
Qiita. by halhorn. http://qiita.com/halhorn/items/361008b19b4fcfd618d6

안전한 리눅스 운영을 위해 OS 설치 후 해야 할 10가지 (원제: 10 Security Tips for Linux Post-Install)


 새 컴퓨터에 리눅스를 설치하는 것이 얼마나 재미있는지 주위의 Geek들에게 물어보세요. 새로운 배포판을 시험해 보거나 새 업데이트를 설치할 때에는 카타르시스적인 즐거움이 있습니다.
 Linux는 본질적으로 Windows보다 안전하지만, 시스템을 더욱 견고하게 하기 위해 설치 후 해야할 몇 가지 단계가 있습니다.
 Linux OS를 강화하려면 다음 단계를 따르세요. 이것은 전체적인 가이드가 아니라 안전한 OS 설정을 위한 출발점일 뿐이라는 것을 기억하세요. 이 글에서는 사용자가 루트로 명령을 실행하는 것에 익숙하다고 가정합니다. 이 팁에 대해 추가적인 지원을 받기 위한 가장 빠른 옵션은 해당 배포판에 대해 인터넷 검색을 하는 것입니다. 여러분과 같은 문제점에 대해 답변이 올라와 있을 수 있는 수백 개의 커뮤니티 포럼들이 있습니다.

1) OS 업데이트

처음 여러분의 시스템으로 로그인 한 후에 먼저 업데이트 부터 실행해야 합니다. 터미널을 열고, 배포판 종류에 따라 다음과 같은 커맨드를 입력합니다. :

데비안계열:
 sudo apt-get update && time sudo apt-get dist-upgrade
레드햇계열:
 su -c 'yum update'

2) 방화벽 활성화

만약 여러분이 우분투를 사용 중이라면 방화벽은 기본적으로 꺼져 있습니다. 저는 GUI 환경 인터페이스인 'GUFW'에서 방화벽을 사용하기를 강력하게 권장합니다. GUFW는 다음 명령어로 설치합니다.:
 sudo apt-get install gufw

GUFW가 설치되고 나면 다음 명령어로 실행합니다.
 gufw

GUFW를 열고 슬라이드 버튼을 오른쪽으로 밀어 방화벽을 켭니다. 대부분의 사용자에게 Incoming: Deny 와 Outgoing: Allow 설정으로 충분할 것이지만, 커스텀 룰 또한 쉽게 추가할 수 있습니다.



 레드햇 버전 7에서는 방화벽이 기본적으로 켜져 있습니다. 여러분이 7보다 이전 버전을 사용하고 있는 경우에는 다음 명령어를 사용해 수동으로 방화벽을 켤 수 있습니다.:
 systemctl enable firewalld

 방화벽을 설정하고 그 값을 확인하기 위해 패널에서 System → Administration → Firewall 을 차례로 선택하거나 터미널에서 다음 명령어를 입력합니다.:
 system-config-firewall

3) 안티바이러스 소프트웨어 설치

이것은 의견이 첨예하게 대립하는 부분입니다. 악성 코드 및 바이러스는 주로 Windows 용으로 제작됨에도 불구하고 저는 AV 소프트웨어를 설치하는 것이 시스템을 강화하는 데 도움이 된다고 생각합니다. 사용자는 시스템이 더 안전해 질 수 있는 기회라면 어떤것이든지 이용해야 합니다. 최고의 무료 AV 솔루션인 ClamAV 이외에도 SophosESETComodo 및 Bitdefender와 같은 다른 Linux AV 제품들도 있습니다.

4) 써드파티 소프트웨어

타사 소프트웨어는 항상 /opt 디렉토리에 설치해야합니다. 자동실행되는 불필요한 프로그램이나 프로세스를 제거하여 공격노출면적을 최소화 해야합니다. 'netstat -npl' 명령은 현재 실행중인 모든 서비스를 나열합니다. 필요없는 서비스를 포착한 경우, 해당 서비스에 연결된 응용 프로그램을 제거하는 데 필요한 단계를 수행하십시오. 'top'명령은 어떤 프로세스가 가장 많은 시스템 자원을 차지하는지 확인하기에 편리하지만 다음 명령을 통해 'htop'을 설치하고 사용하기를 권합니다.
 sudo apt-get install htop

'pstree'명령은 프로세스를 보는 또 다른 멋진 방법인데, 프로세스를 트리 형식으로 나열해 보여줍니다.

5) SSH를 통한 Root 로그인 비활성화

/etc/ssh/sshd_config 파일에서 해당 부분을 다음과 같이 수정해 SSH를 통한 Root 유저 로그인을 비활성화합니다.
 #PermitRootLogin no

열 가장 앞부분에 위치한 '#'마크를 없앱니다.
파일을 닫고 다음 명령어를 사용해 SSH 서비스를 다시 시작합니다.
 /etc/init.d/sshd restart

6) X Windows 비활성화

여러분이 구축하는 것이 파일/메일/프린트 서버라면 Gnome이나 KDE같은 X Windows 데스크탑 환경은 필요치 않습니다. X Windows를 비활성화 함으로써 보안과 성능향상을 꾀할 수 있습니다. 다음 명령어를 통해 시스템 런레벨을 변경함으로써 X Windows를 비활성화할 수 있습니다.
다음 파일을 엽니다.: /etc/inittab
다음 내용의 행을 찾습니다.:
 id:5:initdefault:  
다음과 같이 수정합니다.:
 id:3:initdefault:

7) USB 플래시 메모리 비활성화

여러분의 리눅스 머신에서 아무도 USB 플래시 메모리 스토리지를 사용하지 못하게 하기 위한 쉬운 방법이 있습니다.
여러분이 좋아하는 문서편집기를 이용해 새 파일을 하나 만들어 다음과 같은 행을 추가합니다.:
 install usb-storage /bin/true
파일 이름을 usb-storage.conf로 하여 /etc/modprobe.d/ 디렉터리에 저장합니다. 시스템을 재부팅한 후 USB 플래시 드라이브를 연결해서 테스트해보면 마운트를 실패하는 모습을 확인할 수 있습니다.

8) CTRL-ALT-DELETE 비활성화

 프로덕션 서버를 구축할 때에는 시스템을 재부팅하는 커맨드인 Ctrl-Alt-Delete를 비활성하는 편이 좋습니다.
 문서편집기에서 /etc/inittab 파일을 열고, 다음 행 앞에 주석처리표시(#)를 추가하여 비활성화 합니다.
 ca::ctrlaltdel:/sbin/shutdown -t3 -r now

9) BIOS 보안

BIOS 설정으로 들어가 CD/DVD, USB, 외부 드라이브 등을 이용한 부팅을 비활성화합니다. BIOS 비밀번호를 활성화하고 강력한 비밀번호를 설정합니다.

10) 시스템 감사

여러분의 시스템을 감사하는 것을 돕는 많은 무료 툴들이 있습니다. 제가 추천하는 것은 로컬 보안 평가와 취약점 감사를 할 수 있는 오픈소스 툴 Lynis입니다.  이것은 가볍고 사용하기 쉽습니다. 단지 압축을 해제하고  ./lynis audit system 명령어만 실행하면 됩니다.



About the Author: Brian M. Thomas (@InfoSec_Brian) is a passionate professional with 17 years’ experience providing Tier-4 data solutions in all disciplines of IT including Network/Server administration and Information Security. Proven experience in HIPAA, ISO 27001 and PCI compliance. You can connect with him on LinkedIn here: https://www.linkedin.com/in/bmthomas.





번역된 컨텐츠입니다.
The State of Security. by Brian Thomas. https://www.tripwire.com/state-of-security/featured/10-security-tips-linux-post-install/

Translated article.
The State of Security. by Brian Thomas. https://www.tripwire.com/state-of-security/featured/10-security-tips-linux-post-install/

안전한 리눅스 설치를 위해 미리 해두어야 할 4가지 (원제: 4 Security Steps to Take Before You Install Linux)


 Linux 워크 스테이션을 사용하여 가정이나 직장에서 IT 인프라에 액세스하고 관리하는 시스템 관리자는 해커에 의해 인프라를 위한 공격 경로로 이용될 수 있습니다.
 이 글에서는 시스템 관리자의 불편을 최소화하면서도 큰 보안 취약점에 노출되는 것을 피할 수 있도록 Linux 워크 스테이션 보안에 대한 몇 가지 기본 권장 사항을 제시합니다. 
 운영 체제 설치를 시작하기 전에, pre-boot 환경이 제대로 작동하는지 확인하기 위해 몇 가지 확인할 사항들이 있습니다.
  • UEFI 부트 모드 사용 (전통적인 BIOS 사용 금지) (필수)
  • UEFI 설정으로 들어가기 위해서는 비밀번호 입력 요구 (필수)
  • SecureBoot 활성화 (필수)
  • 시스템 부팅시 UEFI단계에서 비밀번호 입력 요구 (권장)

UEFI와 SecureBoot

 UEFI는 SecureBoot와 같은 기존 BIOS가 갖지 못한 많은 이점들을 제공합니다. 최신 시스템에는 기본적으로 UEFI 모드가 설정되어 있습니다.
 UEFI 설정으로 진입하기 위해서 강력한 암호를 요구하도록 설정하세요. 많은 제조업체들에서는 암호의 길이 허용치를 암시적으로 제한하고 있기 때문에 때문에 짧짐 복잡한 짧은 암호를 선택해야 할 수 있습니다.
 사용하려는 Linux 배포판에 따라 부팅에 필요한 SecureBoot 키를 구하기 위해 많은 노력이 필요할 수 있습니다. 대부분의 배포판은 Microsoft와 협력하여 커널에 적절하게 서명을 하므로 직접 import/export 해야하는 번거로움을 덜어줍니다.
추가 조치로, 누군가가 부트 파티션에 들어가서 악성행위를 시도하는 것을 원천봉쇄하기 위해 패스워드를 요구하도록 설정해야 합니다. 연쇄적으로 뚫리는 것을 막기 위해 이 암호는 UEFI 관리 암호와 달라야합니다.
이러한 고려 사항을 숙지하였으면 배포판을 선택할 준비가 된 것입니다. Fedora, Ubuntu, Arch, Debian 혹은 이로부터 파생된 배포판 중 하나와 같이 널리 사용되는 배포판을 사용하는 것이 안전합니다.






번역된 컨텐츠입니다.
Linux.com. by Konstantin Ryabitsev. https://www.linux.com/news/linux-workstation-security/2017/3/4-security-steps-take-you-install-linux

Translated article.
Linux.com. by Konstantin Ryabitsev. https://www.linux.com/news/linux-workstation-security/2017/3/4-security-steps-take-you-install-linux



Thursday, March 2, 2017

auditd 튜닝 : 고성능 Linux 감사 (원제: Tuning auditd: High Performance Linux Auditing)


고성능 Linux 감사

퍼포먼스를 고려한 Linux auditd 튜닝

Linux Audit 프레임 워크는 시스템 이벤트를 감사하는 강력한 도구입니다. 실행 파일의 동작부터 시스템 호출까지 모든 것을 기록할 수 있습니다. 하지만 모든 것을 기록한다면 필연적으로 성능에 부담을 주게 됩니다. 이번 글에서는 audit rule을 최적화하고 Linux 시스템을 원활하게 운영하는 방법을 살펴 봅니다.

auditd 성능을 적절하게 조정함으로써 Linux 커널에 대한 스트레스와 영향을 줄일 수 있습니다. 시스템 설정을 변경하기에 앞서 성능을 미리 측정해두기를 권장합니다. 이것을 기준으로,  튜닝 작업의 전/후를 비교할 수 있습니다.

전략 : 올바른 Rule 순서 배치


많은 소프트웨어 패키지는 "순차적 규칙 처리"를 사용합니다. 이는 Linux Audit 데몬에도 동일하게 적용되어 일치하는 하나의 규칙이 나올때 까지 규칙이 차례로 처리됩니다.

따라서 튜닝 할 가장 큰 주요한 영역 중 하나는 규칙의 순서입니다. 가장 빈번하게 발생하는 이벤트는 가장 위쪽에, 그리고 예외적인 - 빈도가 낮은 - 이벤트는 가장 아래에 위치해야 합니다.

 Linux Audit rule이 알파벳 순으로 배열되었다면 이는 틀림없이 성능 최적화가 되지 않은 배열일 것입니다.  다음 순서로 넘어가봅시다.


전략 : 불필요한 이벤트 제외


이벤트 로깅에 있어 가장 핵심적인 과제는, 중요한 로그는 모두 기록하는 동시에 필요하지 않은 로그는 적절히 제외하는 것입니다.

일부 관리자는 "모든것을 기록하는" 룰을 적용합니다. 때때로 이러한 접근도 의미가 있기는 하지만, 전혀 효율적이라 할 수 없습니다. 이러한 종류의 로깅은 auditd의 처리 시간에 영향을 주는 동시에 커널 성능에도 영향을 줍니다.

효율적인 로깅을 위해서 먼저 어떤 이벤트가 빈도높게 등장하는지 확인해야 합니다.

실행 파일로 정렬
aureport -ts today -i -x –summary

시스템호출(syscall)로 정렬
aureport -ts today -i -s –summary

이를 통해 어떤 실행파일과 시스템호출이 audit 로그에서 대부분을 차지하고 있는지 알 수 있습니다. -ts today 옵션을 명령어에 추가하여 최근 이벤트만 조회할 수 있습니다.

aureport의 출력을 기초로 일부 이벤트를 비활성화하면 불필요한 로그의 양을 줄이는 데 큰 도움이됩니다. 물론 이벤트, 파일 및 기타 유형에 대해서도 동일하게 적용 가능합니다. 자세한 내용은 aureport의 맨 페이지를 참조하세요.


aureport가 출력한 [오늘 발생한 이벤트]


이벤트 무시하기

이제 우리는 어떤 유형의 파일, 이벤트 또는 다른 메시지가 있는지 알고 있기에 필요없는 로그를 무시할 수 있습니다. 이를 위해 적절한 rule을 작성해야합니다.

syscall을 사용할 때에는 exit와 함께 사용하며, 그 외의 경우에는 exclude를 사용합니다.

메시지 유형별 필터링

예를 들어 모든 "CWD"(현재 작업 디렉토리) 유형을 비활성화하기위해 다음과 같은 rule을 사용합니다.

-a always,exclude -F msgtype=CWD

위에서부터 차례로 규칙이 적용되기 때문에, 예외가 윗쪽에 먼저 배치되어야 합니다. 위의 예는 메시지 유형을 기반으로하는 필터이므로 exclude를 사용합니다.

여러 규칙을 적용한 필터링

다음 예제는 VMware 도구가 기록한 메시지를 필터링하는 것입니다. 이를 위해 다중 -F 매개 변수를 이용해 여러 규칙을 결합합니다. 최대 64 개의 필드가 허용되지만 일반적으로 몇 개의 필드만 사용해도 충분합니다. -F를 사용할 때 각 표현식은 논리적 AND 문으로 적용됩니다. 이는 audit rule 세트의 동작을 트리거하기 위해 모든 필드가 참이어야 함을 의미합니다.

-a never,exit -F arch=b32 -S fork -F success=0 -F path=/usr/lib/vmware-tools -F subj_type=initrc_t -F exit=-2
-a never,exit -F arch=b64 -S fork -F success=0 -F path=/usr/lib/vmware-tools -F subj_type=initrc_t -F exit=-2

주 : 몇가지 예제의 경우 구형 시스템에서 실행시 다른 결과가 나올 수 있습니다. 따라서 항상 작동하는지 확인하기 위해 각 규칙을 테스트 해 두는 것이 좋습니다. 아무 효과가 없는 규칙이 들어가 있는 것은 성능면에서 부정적인 효과만 초래할 뿐입니다.


전략 : 버퍼링 필요량 결정


auditctl에 -s (status) 옵션을 주면 사용하면 상태 (enabled), 관련 플래그, 프로세스 ID 및 로그 관련 통계 (백 로그, 비율, 손실) 등과 같은 통계를 제공합니다.

# auditctl -s
enabled 1
flag 1
pid 430
rate_limit 0
backlog_limit 320
lost 0
backlog 0
enabled -1
flag 0
pid 0
rate_limit 0
backlog_limit 320
lost 0
backlog 0

더 큰 버퍼를 허용하는 것은 메모리 더 많은 메모리 점유를 의미합니다. 모든 이벤트를 기록하는 것은 시스템에 따라 꽤나 영향을 미치는 결과를 낳을 수 있습니다.

최적의 버퍼 크기를 결정하기위해서는 백 로그 값을 모니터링해야 합니다. backlog_limit 옵션을 초과해선 안됩니다 (이 경우 320). 또 다른 유용한 통계는 시스템이 얼마나 많은 이벤트를 처리 할 수 없었는지 알려주는 손실값을 모니터하는 것입니다. 정상적인 시스템에서 이 값은 0에 가까워야 합니다.


전략 : 디렉토리 모니터링


특정 디렉토리를 모니터링 할 때 dir 대신 path를 사용하십시오.

디렉토리의 내용을 모니터하는 두 가지 방법으로 path와 dir이 있습니다.

경우에 따라 서브 디렉토리는 모니터링이 필요하지 않은 경우가 있습니다. 이 경우 해당 디렉토리만 모니터하도록 path 옵션을 사용하는 것이 더 좋습니다. 작은 조정이지만, 불필요한 감사 로깅을 많이 줄일 수 있습니다.






번역된 컨텐츠입니다.
Linux Audit. by Michael Boelen. https://linux-audit.com/tuning-auditd-high-performance-linux-auditing/

Translated article.
Linux Audit. by Michael Boelen. https://linux-audit.com/tuning-auditd-high-performance-linux-auditing/


blog.plura.io 에도 포스팅 되었습니다.

Wednesday, February 22, 2017

My First Posting.

Hello :D

I'm happy to start my own blog.

I cannot wait to share my experiences.

See you soon.