하면 된다!!!

root 유저로 ssh 접근 제어 해야할 때

프로그래밍/기타

ssh를 이용해서 외부 접근을 하는 경우에 root 유저로 붙을 수 있게 되면 아무래도 보안상 위험하겠지요.

원격으로 해킹 시도가 상당히 발생할 수 있습니다.


이에 따라서 root 유저는 통상적으로 ssh 접근을 못하도록 하고, 일반 유저로 접근해서 su 또는 sudo를 이용해서 접근하도록 제어합니다.


$ sudo vi /etc/ssh/sshd_config

PermitRootLogin yes    << yes : 접근, no : 접근 안됨


$ sudo systemctl restart sshd  << sshd 서비스 재기동 (centos의 경우)


접속을 시도해보시면... 로그인이 안되도록 변경됩니다.



CentOS - SVN 설치시 에러

프로그래밍/기타

CentOS에 svnserve를 설치하다가...


이 사이트 참고 했음 : http://b1ix.net/290


설명이 매우 잘 되어있어서 따라하면 땡...


다만 중간 부분에 나와있는 이 부분!!!


[root@localhost checkout1]# svn checkout svn://localhost/svn_repos svn: E000013: Unable to connect to a repository at URL 'svn://localhost/svn_repos' svn: E000013: file '/home/svn/svn_repos/format' 를 열 수 없습니다: 허가 거부


이에 대한 해결책이 필요했다.

위의 에러는 selinux가 보안상 막고 있어서 발생하는 것이 맞다.


이를 해결 하기 위해서는... repository 타깃이 되는 폴더명을 뒤에 써준다.


$ chcon -R -t svnserve_content_t /home/svn/svn_repos


이렇게 해주면 된다.

selinux를 그냥 disabled 시켜 버리면 보안에 구멍이~!!!


Linux 프로세스 관리 쉘

프로그래밍/기타

###################################


1. 특정 프로세스를 찾아서 죽이기


#!/bin/bash

ps -ef | grep -v grep | grep 프로세스명 | awk '{print $2}' | xargs --no-run-if-empty kill -9 $1



###################################


2. 특정 프로세스가 살아있는지 체크해서 죽어있으면 살리는 쉘


$ vi /var/test/run.sh


#!/bin/bash

PROCESS_CNT=`ps -ef | grep 프로세스명 | grep -v grep | awk '{print $2}' | wc -l`

if [ "$PROCESS_CNT" == 0 ];

then

    echo "[`/bin/date +\%Y\%m\%d_\%H\%M\%S`] Process : Dead!!"

    실행시킬_프로세스명

else

    echo "[`/bin/date +\%Y\%m\%d_\%H\%M\%S`] Process : Alive!!"

    exit 0

fi


위와 같은 쉘을 하나 만들어두고 crontab 에 1분에 한번씩 돌게 해주면 1분에 1회씩 프로세스가 살아있는지 체크하고 죽어있으면 실행 시키도록 할 수 있다.


$ crontab -e

* * * * * /var/test/run.sh >> /var/test/proc_mon.log


$ tail -f /var/test/proc_mon.log

1분에 1회씩 로그가 쌓이는 것을 확인할 수 있습니다.



Raspberry PI로 SSH 접속시 느릴때 해결방법

마이 스토리/Raspberry PI 놀이

Raspberry PI 설정을 다 했다고 좋아서 외부에서 접근할 때... SSH 접속이 유난히 느려서 초기 접속 프롬프트를 기다리는데까지 짜증이 나는 경우들이 있습니다.


이럴 때는 sshd 설정을 변경해주셔야 하는데요.


아주 간단합니다.


$ sudo vi /etc/ssh/sshd_config


#UseDNS no << 요걸 찾으셔서 앞에 주석 #만 제거 해주세요.


$ sudo service ssh restart


해주시면 끝~

Raspberry PI LX윈도우의 시작 프로그램 관리하기

마이 스토리/Raspberry PI 놀이

라즈베리 파이를 이용해서 키오스크(Kiosk)를 구성하는 방법에 대해서 고민을 해봤습니다.

라즈베리 파이가 부팅이 되고 자동으로 전체 화면모드의 웹 브라우저가 떠서 해당 액션만 할 수 있도록 만들면... 용도가 참 많겠지요?


우선 크롬 브라우저의 위치를 찾아봤습니다.

/usr/lib/chromium-browser/chromium-browser

요기 있었군요.


크롬 브라우저 실행을 다음과 같이 터미널에서 시켜봅니다.

chromium-browser --incognito --kiosk http://blog.hometown.co.kr


전체 창으로 웹 브라우저가 떡~ 뜨게 됩니다.

해당 창을 닫고 싶어도 단축키를 모르면 닫을 수가 없답니다. (단축키 : Ctrl + Shift + Q)

자 그러면 저 커맨드를 LX윈도우가 부팅된 후에 실행이 되어지면 브라우저가 딱 뜨겠지요?


LX윈도우의 시작프로그램 등록은 어디서 할지 한번 알아보겠습니다.

$ sudo vi /home/pi/.config/lxsession/LXDE-pi/autostart


해당 파일의 맨 하단에 다음과 같이 추가합니다.

@chromium-browser --incognito --kiosk http://blog.hometown.co.kr


맨뒤의 URL은 실제로 오픈하실 URL을 넣으시면 됩니다.

위와 같이 하신 후 라즈베리파이를 재부팅 하게 되면 웹 브라우저가 전체모드로 열리면서 해당 웹 사이트가 오픈되게 됩니다.


###########


사족으로 ...

그러면 매번 시작 프로그램을 변경할 때마다 저 파일을 찾아서 수정해야하는데... 좀 불편할 수 있겠지요.

그래서 저는 별도의 shell 을 하나 만들었습니다.


/home/pi/startup.sh


이 파일 안에다가 아래와 같이 추가했습니다.

/usr/lib/chromium-browser/chromium-browser --incognito --kiosk http://blog.hometown.co.kr


그리고 autostart 파일에는 /home/pi/startup.sh을 추가했습니다.


결과는 원하는 대로 짜라란~



Raspberry PI 한글 폰트 설치

마이 스토리/Raspberry PI 놀이

초기에 라즈베리파이를 설치하고 나면 화면에서 한글이 깨지는 현상이 있습니다.

이런 경우에는 한글 폰트를 설치해주시면 되는데요.


터미널 창을 오픈하시고...


$ sudo apt-get install fonts-unfonts-core -y

$ reboot


리부팅 되고 나면 한글이 잘 보이실꺼에요.

크로미움 웹 브라우저로 웹사이트를 오프하셔도 한글 잘 보이실꺼구요.


Raspberry Pi 화면 해상도가 안맞을 때...

마이 스토리/Raspberry PI 놀이

라즈베리파이를 사용하는데 화면 사이즈가 정확히 맞지 않는 경우들이 있다.


이럴 때는 터미널을 오픈한 후에...


$ sudo raspi-config


이렇게 하면 파랑색 설정 창이 열리는데 여리것 Advanced Options > Overscan과 Resolution 을 확인해서 본인 환경에 맞춰주시면 됩니다.


SSH 접속 세션 시간 조정

프로그래밍/기타

SSH 접속이 자주 끊겨서 고생하는 경우들이 있는데... 그에 대한 해결책을 간단히 노트해둔다.

  1. SSH 클라이언트 접속 시간 조정
    • sudo vi /etc/ssh/ssh_config
    • # otehr configs 부분에 아래 내용을 주석 해제하고 숫자값을 정해준다.
      ServerAliveInterval 100

  2.  SSHD 서버에서의 접속 시간 조정
    • sudo vi /etc/ssh/sshd_config
    • 아래와 같이 주석 해제하고 값을 지정해주시면 됩니다.
      ClientAliveInterval 600
      TCPKeepAlive yes
      ClientAliveCountMax 10
    • SSHD 서버 재기동이 필요합니다.
      $ sudo service ssh restart


Jenkins 포스트 쉘 스크립트 권한 관련 문제

프로그래밍/Java

리눅스 장비에 jenkins 를 설치하고나서 배포를 하다가 포스트 쉘 스크립트를 넣었다가 권한 문제로 에러를 여러차례 겪었는데...


jenkins는 jenkins 유저를 사용하고 있기 때문에 사용하려는 쉘에 접근하기 위해서는 권한이 필요했다.


이를 해결하기 위해서 jenkins 유저에 sudo 권한을 주고 포스트 쉘 쪽에는 sudo /path/to/abcd.sh 이렇게 처리를 해보는 것으로...


우선 sudoers에 유저와 권한을 넣어줘야 한다.


$ vi /etc/sudoers

# User_Alias ADMINS = jsmith, mikem << 요런 라인이 있는데 이 라인 아래에다가...


jenkins ALL=(ALL) NOPASSWD: ALL


이렇게 추가해준다.

NOPASSWD 라고 해주면 sudo 명령을 내리더라도 비번을 별도로 묻지 않게 됩니다.


물론 이렇게 셋팅을 하게 되면 sudo 커맨드를 이용해서 루트 권한으로 모든 커맨드를 실행할 수 있으니 문제가 있을 수 있다.

권한을 축소하려면 특정 경로나 파일을 지정해서 열어주는 것도 방법이다.


맨 뒤에 있는 ALL 을 대신해서 경로나 파일을 지정해주면 된다.


jenkins ALL=(ALL) NOPASSWD: /root/deployshell/


이런 식으로 해두게 되면 /root/deployshell/ 디렉토리 하단에 대한 권한을 지정해줄 수도 있다.


나이먹고 이런 삽질은 참 쉽지 않다. ㅠㅠ 어릴때 공부해뒀어야 하는데... 하는 생각뿐이다.


Jenkins 설치 및 설정

프로그래밍/Java

Jenkins 설치 및 설정 정보들을 모아 놓자.


애플자라님의 블로그를 참조해서 진행했다.


maven-tomcat 플러그인은 사용하지 않았습니다. war 파일을 만든 후에 톰캣 webapps 하단에 카피해 놓도록 설정하고, 톰캣에서 war 파일 자동으로 로딩 되도록 해두었습니다.


설치 환경 : Windows10 + JDK1.8 + Apache-tomcat-8.5 + Apache-maven-3.5.3 + Jenkins-2.121.1


- Apache Maven download : https://maven.apache.org/download.cgi
- Jenkins download : https://jenkins.io/download/

젠킨스 설정은 애플자라님의 블로그를 참고해서 설치하면 끝이고...

특별한 부분은
Post Step에다가 아래의 내용을 각 시스템에 맞춰서 넣는다.
Copy 결과물.war 톰캣webapps

Path 지정할때 중간에 스페이스가 있는 경우에는 " "로 패쓰 전체를 넣어줘야 에러가 나지 않는다.

project 의 pom.xml 파일 설정중... 

1. 한글 깨짐 관련, 플러그인 지정

<properties>

<java-version>1.8</java-version>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

</properties>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<version>3.7.0</version>

<configuration>

<source>1.8</source>

<target>1.8</target>

<encoding>UTF-8</encoding>

<compilerArgument>-Xlint:all</compilerArgument>

<showWarnings>true</showWarnings>

<showDeprecation>true</showDeprecation>

</configuration>

</plugin>

<plugin>

<groupId>org.codehaus.mojo</groupId>

<artifactId>exec-maven-plugin</artifactId>

<version>1.2.1</version>

<configuration>

<mainClass>org.test.int1.Main</mainClass>

</configuration>

</plugin>


<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-war-plugin</artifactId>

<version>3.2.2</version>

<configuration>

<warSourceDirectory>src/main/webapp</warSourceDirectory>

<webXml>src/main/webapp/WEB-INF/web.xml</webXml>

</configuration>

</plugin>

</plugins>


참고로 Maven 플러그인을 알아 볼 수 있는 페이지 링크 하나

https://maven.apache.org/plugins/index.html