Raspberry Pi 3 64bit OS openSUSE: Basic Security

Raspberry Pi 3 64bit OS openSUSE 는 이글은 3개 글타래로 구성되며, openSUSE 설치 및 사용에 대해 작성한다.

Opensuse 에서 Raspberry Pi 3를 위한 64bit OS openSESE Leap 42.3 을 제공하고 있다.

  1. Install 64bit openSUSE Leap 42.3 / JeOS
  2. openSUSE: Managing Service daemon
  3. openSUSE: Basic OS Security for Server
  4. Install & Configuration - Nginx, Node JS
  5. Build MongoDB 3.4.x
자세히 보기

Raspberry Pi 3 64bit OS openSUSE: Service 관리

Raspberry Pi 3 64bit OS openSUSE 는 이글은 3개 글타래로 구성되며, openSUSE 설치 및 사용에 대해 작성한다.

Opensuse 에서 Raspberry Pi 3를 위한 64bit OS openSESE Leap 42.3 을 제공하고 있다.

  1. Install 64bit openSUSE Leap 42.3 / JeOS
  2. openSUSE: Managing Service daemon
  3. openSUSE: Basic OS Security for Server
  4. Install & Configuration - Nginx, Node JS
  5. Build MongoDB 3.4.x

openSUSE: Basic OS Security for Server

openSUSE는 systemd 를 사용한 서비스/데몬 시작/종료/활성화/비활성화 작업을 할 수 있다. 서비스에 대한 작업은 systemctl CLI 혹은 YaST에서 가능하다.

yast

openSUSE는 yast 로 서비스 데몬도 설치/실행/멈춤 을 할 수 있다.

{:width=”640”}

서비스는
{:width=”640”}

systemd

https://doc.opensuse.org/documentation/leap/reference/html/book.opensuse.reference/cha.systemd.html

https://www.digitalocean.com/community/tutorials/systemd-essentials-working-with-services-units-and-the-journal

1
systemctl list-unit-files --type=service #현재 사용 가능한 모든 서비스

이 작업은

1
2
3
4
5
6
7
systemctl stop SuSEfirewall2
systemctl disable SuSEfirewall2
zypper in ufw
ufw default deny
ufw enable
systemctl enable ufw
systemctl start ufw

ssmtp

sSMTP is a simple MTA to deliver mail from a computer to a mail hub (SMTP server). sSMTP is simple and lightweight, there are no daemons or anything hogging up CPU; Just sSMTP. Unlike Exim4, sSMTP does not receive mail, expand aliases, or manage a queue.

https://wiki.debian.org/sSMTP

42.3, 15.0 에 ssmtp가 포함되지 않았다.

https://build.opensuse.org/package/binaries/home:jloehel/ssmtp/openSUSE_Factory_ARM

mail utitlity

1
$ sudo zypper install mail

Then try to send email from command line with:

1
$ echo "Message Body" | mail -s "Message Subject" receiver@example.com

참조

[^1]: systemd: Enable/Disable Services

Raspberry Pi 3 64bit OS openSUSE: Basic Security

Raspberry Pi 3 64bit OS openSUSE 는 이글은 3개 글타래로 구성되며, openSUSE 설치 및 사용에 대해 작성한다.

Opensuse 에서 Raspberry Pi 3를 위한 64bit OS openSESE Leap 42.3 을 제공하고 있다.

  1. Install 64bit openSUSE Leap 42.3 / JeOS
  2. openSUSE: Managing Service daemon
  3. openSUSE: Basic OS Security for Server
  4. Install & Configuration - Nginx, Node JS
  5. Build MongoDB 3.4.x

openSUSE: Basic OS Security for Server

이전 글에서 라즈베리파이 3에 설치한 64bit OS openSUSE LEAP / JeOS를 서버 구성을 위해서 보안 설정을 한다. 이 글은 다음 세가지 내용을 포함하고 있다.

  • ssh와 sshd 설정
  • 방화벽 설정: YaST Firewall 대비 ufw 설치
  • Fail2ban 설치 및 설정

sshd_config

ssh 사용시

sshd securities

방화벽 설정

openSUSE는 SuSEfirewall2 가 기본으로 제공되어 서비스를 활성화 하면 사용할 수 있다. 아직 익숙치 않아서 SuSEFirewall2 을 우분투/데비안에서 익숙한 ufw 를 설치해 사용하겠다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Basic Syntax:
yast2 firewall interactive
yast2 firewall <command> [verbose] [options]
yast2 firewall help
yast2 firewall longhelp
yast2 firewall xmlhelp
yast2 firewall <command> help

Commands:
broadcast Broadcast packet settings
disable Disables firewall
enable Enables firewall
interfaces Network interfaces configuration
logging Logging settings
masqredirect Redirect requests to masqueraded IP
masquerade Masquerading settings
services Allowed services, ports, and protocols
startup Start-up settings
summary Firewall configuration summary
zones Known firewall zones

먼저 SuSEfirewall2 를 멈추고 비활성화 한다.

1
sudo yast firewall disable
1
2
systemctl stop SuSEfirewall2
systemctl disable SuSEfirewall2

그리고 ufw를 설치하고

1
zypper in ufw
1
2
3
4
ufw default deny
ufw enable
systemctl enable ufw
systemctl start ufw

Fail2ban

rsyslog 를 설치한다.

https://en.opensuse.org/SDB:SSH_systematic_attack_protection

https://www.howtoforge.com/fail2ban_opensuse10.3

ssh

ufw

fail2ban

zypper in fail2ban

참조

OpenSSH Public Key Authentication

https://doc.opensuse.org/documentation/leap/security/html/book.security/cha.security.firewall.html

Raspberry Pi 3 64bit OS openSUSE: Install

2017-10-30: swap 추가, timezone 수정
{:.right-history}

Opensuse 에서 Raspberry Pi 3를 위한 64bit OS openSESE Leap 42.2 을 제공하고 있다.

이글은 5개 글타래로 구성되며, openSUSE 설치 및 사용에 대해 작성한다.

  1. Install 64bit openSUSE Leap 42.2 / JeOS
  2. openSUSE: Managing Service daemon
  3. openSUSE: Basic OS Security for Server
  4. Install & Configuration - Nginx, Node JS, Jupyter
  5. openSUSE: Build MongoDB 3.4.x
자세히 보기

Rasberry Pi Camera 개발환경 구성

piCamera 구성

현재 시스템 정보

1
2
$ uname -a
Linux camerapi 4.9.35-v7+ #1014 SMP Fri Jun 30 14:47:43 BST 2017 armv7l GNU/Linux

Science modules

1
2
3
sudo apt-get install build-essential python-dev python-distlib python3-dev python3-distlib
sudo apt-get install libzmq3-dev
sudo apt-get install libgdal-dev
1
2
3
4
5
$ sudo apt-get install python-numpy python-decorator python-scipy
$ sudo apt-get install python-matplotlib

$ sudo apt-get install python3-decorator python3-numpy python3-scipy
$ sudo apt-get install python3-matplotlib

Jupyter-notebook

1
2
3
4
5
6
$ mkvirtualenv -p python3 --system-site-packages cv3python3
$
(cv3python3) $ pip install jupyter


(cv3python3) $ jupyter-notebook --no-browser --ip=* --port=8585 jupyterCamera/

Camera

카메라 파이썬 모듈은 pip에서 설치하는 것으로 하자.

패키로 설치시

1
$ sudo apt-get install python-picamera python-numpy python-rpi.gpio python-opencv ffmpeg

cv3

Raspberry Pi 3 64bit OS openSUSE LEAP 15: Install

2017-10-30: swap 추가, timezone 수정
{:.right-history}

Opensuse 에서 Raspberry Pi 3를 위한 64bit OS openSESE Leap 42.2 을 제공하고 있다.

이글은 5개 글타래로 구성되며, openSUSE 설치 및 사용에 대해 작성한다.

  1. Install 64bit openSUSE Leap 42.2 / JeOS
  2. openSUSE: Managing Service daemon
  3. openSUSE: Basic OS Security for Server
  4. Install & Configuration - Nginx, Node JS, Jupyter
  5. openSUSE: Build MongoDB 3.4.x
자세히 보기

Raspbian Wheezy : Python 설치

Raspbian과 Python

raspbian-wheezy에는 Python 2.7과 Python 3.2가 설치되어 있습니다.

Python tools

파이썬으로 개발하며 필요한 도구를 설치해서 사용하면 좋습니다. 파이썬 패키지 관리 도고, 가상 개발 환경 등의 설치를 통해서

APT로 설치

라즈비안에서 사용하는 파이썬 패키지들은 apt를 이용해서 라즈비안 저장소의 다양한 패키지를 사용할 수 있습니다. apt로 파이썬 패키지를 설치해 사용할 수 있는데 Python 2.x와 Python 3.x의 호환을 위해서 Python 2.x는 ‘python-‘ 접두어를 사용하고 Python 3.x 패키지들은 ‘python3-‘ 를 사용합니다.
예를 들어 picamera 패키지는 python-picamera와 Python 3.x 버전을 위해서 python3-picamera가 있습니다.

사전 준비

기본 개발자 모듈이 설치 안되어 있다면 설치한다.

1
$ sudo apt install build-essential

Python 개발을 위해서는 리눅스에 파이썬 헤더가 필요하다. 그래서 python-dev 패키지를 설치해 준다.
Jessie에서 Python3.4 헤더는 설치가 되어 있다.

1
2
$ sudo apt-get install python3-dev
python3-dev is already the newest version.

python2 개발환경을 위해서 헤더를 설치하려면

1
2
3
4
$ sudo apt install python-dev

The following extra packages will be installed:
libexpat1-dev libssl-dev libssl-doc python2.7-dev

pip

전통적인 파이썬 패키지 도구인 PIP(Python Package Index, PyPI)를 이용하면 폭넓게 범위를 넓힐 수 있습니다.

Raspbian Jessie : 기본으로 제공
apt를 이용해 저장소에 있는 외부 패키지를 설치해 사용할 수 있습니다. 그렇지만 개발에 필요한 모든 패키지가 라즈비안 저장소에 있지 않거나 오래된 버전일 수 있습니다.

Python2.x용 pip는 python-pip를 설치하고 Python3.x pip는 python-pip3 를 설치합니다.

1
2
$ sudo apt-get install -y python-pip
$ sudo apt-get install -y python3-pip

Pip 소스로 설치

혹은 pip를 최신 소스로 부터 직접 설치하려면 다음같이 실행합니다.

1
$ wget https://bootstrap.pypa.io/get-pip.py

시스템에 설치된 python 버전 마다 sudo로 pip를 설치애야 합니다. Python3 을 위한 pip를 설치한다.

1
2
$ sudo python3 get-pip.py
Successfully installed pip-8.1.2 setuptools-24.0.3 wheel-0.29.0

다음은 Python2를 위한 pip를 설치합니다.

1
$ sudo python2.7 get-pip.py

Raspbian에서 사용자 계정에서 pip 설치하면 퍼미션 에러가 발생한다.
OSError: [Errno 13] Permission denied: ‘/usr/local/lib/python2.7/dist-packages/pip-7.1.2.dist-info’
sudo 명령으로 설치해야 한다.

pip 설치 참조

https://pip.pypa.io/en/latest/installing.html
http://stackoverflow.com/questions/6587507/how-to-install-pip-with-python-3

슈퍼사용자로 pip 설치시 사용자 계정에서 사용하기 불편한 점이 많다. 그래서 가상 개발환경을 구성해 사용자 계정에서 제약없이 사용하도록 한다.

pip 사용

pyhthon2, python3 버전이 설치되어서 pip도 역시 해당 버전이 별도로 설치되어 있습니다. 다음 버전 저보를 출력하면 어떤 버전인지 확인이 가능합니다.

1
2
3
4
$ pip3 --version
pip 8.1.2 from /usr/local/lib/python3.5/dist-packages (python 3.5)
$ pip2 --version
pip 8.1.2 from /usr/local/lib/python2.7/dist-packages (python 2.7)

특정 파이썬 버전의 패키지 모듈을 설치한다면 해당 pip 버전을 호촐하는게 정확합니다.

upgrade pip

pip 는 다음 같이 업그레이드 해야 합니다.

1
$pip install -U pip

On Windows [5]:

1
$python -m pip install -U pip

Python 버전 관리자

다양한 파이썬 버전을 위해 환경 구성을 해주는 유틸리티.

  • pyenv : “Simple Python Version Management”, 로컬에 다양한 파이썬 버전을 설치하고 사용할 수 있도록 한다. pyenv를 사용함으로써 파이썬 버전에 대한 의존성을 해결할 수 있다.

  • virtualenv : “Virtual Python Environment builder”, 로컬에 다양한 파이썬 환경을 구축하고 사용할 수 있도록 한다. 일반적으로 Python Packages라고 부르는 ( pip install을 통해서 설치하는 ) 패키지들에 대한 의존성을 해결할 수 있다.

virtualenv와 virtualenvwrapper를 사용할 것이다.

  • autoenv : 만약 pyenv와 virtualenv를 통해서 의존성을 해결한다고 하더라도 작업할때마다 설정해주는 것은 귀찮은 작업이다. 특정 프로젝트 폴더로 들어가면 자동으로 개발 환경을 설정해주는 autoenv라는 스크립트를 활용하자.

여기서는 virtualenv를 설치하고 virtualenvwrapper를 사용해서 모듈을 설치하고 관리한다. 그러기 위해서 먼저 시스템의 기본 /usr/bin/python 버전을 확인하고 해당 버전의 pip 모듈을 사용해서 virtualenv 와 virtualenvwrapper 를 설치한다.

virtualenv

virtualenv는 가상의 파이썬 작업환경을 만들어 준다. 작업환경을 따로따로 만들어주면 해당 환경 내의 파이썬으로 무슨 짓을 해도 시스템 파이썬이나 다른 가상의 작업환경에게 영향을 주지 않는다.
pip로 설치할 수 있습니다.

pip는 시스템의 site-packages 폴더에, /usr/lib/python2.7/site-packages에 모듈을 설치한다. virtualenv를 이용하면 분리할 수 있다.

단, 현재 python2.7과 python3.4가 공존하는 상태에서 virtualenv는 python2.x를 기반으로 만들어 져서 /usr/bin/python을 찾는데 그래서 다음 같이 pip2 버전으로 virtualenv를 설치해 준다.

1
$ pip install virtualenv

virtualenv는 python 버전에 관계 없이 하나만을 설치해 두면 된다.

virtualenvwrapper

virtualenvwrapper는 virtualenv 통합 환경을 좀 더 쉽게 접근할 수 있도록 도와줍니다. ‘virtualenv’ 가 설치된 글로벌 사이트 패키지 위치에 설치되야 합니다. 아마 관리자 권한이 필요할 것입니다.

라즈비안에서는 sudo로 설치해 주어야 한다. 다름 같이 pip로 설치합니다.

1
$ sudo pip install virtualenvwrapper

이제 일반 사용자 환경에서 python 개발환경을 구축해 보자.

셀 환경 구성하기

쉘 (.bashrc, .profile, 등)에 다음 라인을 추가합니다.

1
2
3
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Devel
source /usr/local/bin/virtualenvwrapper.sh

그리고 쉘 환경을 로딩하기 위해서 다시 로그인 하거나 다음 같이 source 명령을 이용해도 좋습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ source .profile
ebian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Oct 23 18:17:41 2015 from 192.168.219.103
virtualenvwrapper.user_scripts creating /home/pi/.virtualenvs/premkproject
virtualenvwrapper.user_scripts creating /home/pi/.virtualenvs/postmkproject
virtualenvwrapper.user_scripts creating /home/pi/.virtualenvs/initialize
virtualenvwrapper.user_scripts creating /home/pi/.virtualenvs/premkvirtualenv
virtualenvwrapper.user_scripts creating /home/pi/.virtualenvs/postmkvirtualenv
virtualenvwrapper.user_scripts creating /home/pi/.virtualenvs/prermvirtualenv
virtualenvwrapper.user_scripts creating /home/pi/.virtualenvs/postrmvirtualenv
virtualenvwrapper.user_scripts creating /home/pi/.virtualenvs/predeactivate
virtualenvwrapper.user_scripts creating /home/pi/.virtualenvs/postdeactivate
virtualenvwrapper.user_scripts creating /home/pi/.virtualenvs/preactivate
virtualenvwrapper.user_scripts creating /home/pi/.virtualenvs/postactivate
virtualenvwrapper.user_scripts creating /home/pi/.virtualenvs/get_env_details

다음 에러가 발생하면 쉘에 VIRTUALENVWRAPPER_PYTHON 를 추가해 준다.

/usr/bin/python: No module named virtualenvwrapper
virtualenvwrapper.sh: There was a problem running the initialization hooks.

If Python could not import the module virtualenvwrapper.hook_loader,
check that virtualenvwrapper has been installed for
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python and that PATH is

Quick-Start

다음 같이 virtualenvwrapper 를 사용할 수 있습니다.

  1. workon 명령으로 실행 가상 환경 목록 혹은 변경한다.
1
$workon
  1. 실행 가상 환경 ‘raspberrypi2’ 생성
1
2
3
4
5
6
7
8
9
10
11
$ mkvirtualenv -p python2 raspberrypi2
New python executable in raspberrypi2/bin/python2.7
Also creating executable in raspberrypi2/bin/python
Installing setuptools, pip, wheel...done.
virtualenvwrapper.user_scripts creating /home/pi/.virtualenvs/raspberrypi2/bin/predeactivate
virtualenvwrapper.user_scripts creating /home/pi/.virtualenvs/raspberrypi2/bin/postdeactivate
virtualenvwrapper.user_scripts creating /home/pi/.virtualenvs/raspberrypi2/bin/preactivate
virtualenvwrapper.user_scripts creating /home/pi/.virtualenvs/raspberrypi2/bin/postactivate
virtualenvwrapper.user_scripts creating /home/pi/.virtualenvs/raspberrypi2/bin/get_env_details

(raspberrypi2)pi@raspberrypi ~ $ # 실행 가상 환경 쉘
  1. 프로젝트 환경을 빠져 나오려면 ‘deactivate’를 실행한다.
1
(raspberrypi2):~$ deactivate
rpi.gpio
1
(raspberrypi2)$pip install rpi.gpio

이제 이 디렉토리 밑에서 코드 작업을 하고 사용하면 됩니다.

다른 Python 버전 환경 만들기

1
2
3
4
5
6
$ mkvirtualenv -p python3 rpi_py3
Running virtualenv with interpreter /usr/bin/python3
New python executable in rpi_py3/bin/python3
Also creating executable in rpi_py3/bin/python
Installing setuptools, pip...done.
...

virtualenv 사용

위의 설명과 같이 고립된 작업환경을 만들려면 디렉토리 구조를 잘 구성해야 합니다. 다음 같이 라즈베리파이 프로그램을 작업할 ‘Blinke’ 디렉토리를 만듭니다. Blinken은 LED를 깜박이는 작업을 수행할 것입니다.

1
2
3
4
5
6
7
$mkdir blinken
$cd blinken
$virtualenv env
New python executable in env/bin/python
Installing setuptools, pip...done.
$. env/bin/activate
(env)$

마지막 명령으로 가상환경을 활성화시키면 프롬프트 앞에 (env)가 표시됩니다. 가상환경을 바탕으로 환경 설정이 동작한다는 것을 의미합니다. 이제 필요한 파이썬 패키지 및 프로그램을 설치하고 개발을 할 수 있습니다.

독립된 DJango 환경 이용하기
1
2
3
4
5
$ mkdir django_tests
$ cd django_tests
$ virtualenv --no-site-packages env
$ source env/bin/activate
(env)$

다시 시스템 파이썬으로 복귀하고 싶으면 deactivate를 실행합니다.

1
(env)$ deactivate

다른 버전의 Python 환경 만들기

1
$ sudo python3 get-pip.py

python3의 virtualenvwrapper를 설치한다.

1
2
3
$ sudo pip3 install virtualenvwrapper
Collecting virtualenvwrapper
Using cached virtualenvwrapper-4.7.1-py2.py3-none-any.whl

mkvirtualenv에서 python3의 환경을 하나 설치한.다.

1
2
3
4
5
6
$ mkvirtualenv -p python3 rpi_py3
Running virtualenv with interpreter /usr/bin/python3
New python executable in rpi_py3/bin/python3
Also creating executable in rpi_py3/bin/python
Installing setuptools, pip...done.
...

가상환경 복사하기

cpvirtualenv oldenv newenv
rmvirtualenv oldenv

pyvenv

3.3에서부터 pyvenv에 기본으로 설치되어 있다. 다만 3.3에서는 pip를 가상 환경을 만들 때마다 설치해주어야 한다. 3.4에서는 pip까지 기본으로 설치되어 있다.

1
2
3
4
5
$ mkdir django_tests
$ cd django_tests
$ pyvenv-3.4 env
$ source env/bin/activate # env의 파이썬 활성화
(env)$ deactivate # 시스템 파이썬으로 복귀

라즈비안 시스템과 파이썬

파이썬을 이용하면 시스템 관련 정보를 활용할 수 있습니다.

라즈페리파이 모델 확인하기

cpuinfo를 살펴보면 현재 라즈베리파이 모델을 확인할 수 있습니다.

1
2
3
4
$cat /proc/cpuinfo
...
Hardware : BCM2708
Revision : 0003

출력 결과에서 Revision을 살펴보면 라즈페리파이 모델을 확인할 수 있습니다. 이 리비전 번호를 다음 링크의 테이블에서 찾아 보면 확인이 가능합니다.

Python으로 오에스 확인하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ python
Python 2.7.3 (default, Mar 18 2014, 05:13:23)
>>> import os
>>> print os.name
posix
>>> import sys
>>> sys.platform
linux2
>>> import platform
>>> platform.system()
'Linux'
>>> platform.release()
'3.18.7+'
>>> platform.machine()
'armv6l'

참조

Tmux cheatsheet

  • 2017-07-14: 윈도우에서 session 관리
  • 2017-07-10: tmux copy & paste
    {:.right-history}

터미널 명령은 $ tmux 로 표현하고, Tmux window 에서 Prefix key 키 조합은 는 C{:.keyword} 표기하고, Meta key인 AltM{:.keyword}으로 표기한다 - Tmux Start 참조.

자세히 보기

Tmux Start

2017-07-10: tmux-continum 추가
{:.right-history}

Tmux는 terminal multiplexer로 서버에 여러 프로그램을 세션에 저장하고, 다른 작업 혹은 연결을 끊었다 다시 접속해서 세션을 열어 작업을 이어갈 수 있다.

{: width=”600”}

[그림. Tmux 실행 모습 (tmux.github.io)]

자세히 보기