안녕하세요

현이입니다. 

오늘 포스팅 할 주제는 ACL( Access Control List) 입니다. 

 

특정 파일 혹은 디렉토리를 여러 사용자가 쓰고 읽을 수 있도록 

파일의 원소유권에 존속하지 않도록 만들어 주는 것을 ACL 이라고 할 수 있습니다.

 

이를 사용하기 위해서는 마운트 옵션에 acl 이 붙어 있어야 하며 

커널에 ACL옵션이 있어야 하며 관련 패키지가 설치 되어 있어야 합니다.

 

위의 3가지 조건이 갖추어진 환경이라면 setfacl 과 getfacl 이라는 명령어가 시스템에 존제할 것입니다.

 

기본 예제를 보여 드리겠습니다.

chacl u::rwx,u:user1:rwx,u:user2:r-x,g::r-x,o::---,m::rwx 파일 혹은 폴더 

 

chacl = 실행 파일 입니다.

 

u::rwx = user에게 rwx ( 읽기 쓰기 실행하기) 권한을 부여하겠다는 의미입니다. 

 

,u:user1:rwx,u:user2:r-x = u:user1:rwx, = user를 지정하고 해당 user에 권한을 부여합니다

값의 사이에는 ,(쉼표) 구분지어 주어야 합니다.

 

,g::r-x,o::---,m::rwx g:r-x, 그룹에 읽기와 쓰기의 권한을 부여하겠다는 의미입니다.

o::--- : other 지정되지 않은 사용자 혹은 그룹에게는 권한을 부여하지 않는다는 의미입니다.

m::rwx 요부분은 mask이지만 저도 아직은 정확한 개념이 안잡히네요 

 

 

이것을 쪼~끔 간단하게 사용할수 있도록 C로 간단히 짜 보았습니다..

 

소스코드는 이렇습니다. 

#include "stdlib.h"

#include "stdio.h"

/* 디랙토리 혹은 파일 이름을 인자값으로 받아오기 위해 argv를 사용 */

int main(int argc, char *argv[])

{

char userid[30];

int permission, k=1;

FILE *pt, *pt2;

system("mkdir -p /usr/local/sbin/control/conf");

system("awk -F: '{ if ($3>= 1000 ) print $1 }' /etc/passwd > usr/local/sbin/control/conf/user.conf");

system("sed -i '/nobody/d ' /usr/local/sbin/control/conf/user.conf");

if (argc <2){

printf("Useage : %s 디랙토리 or 파일명\n",argv[0]);

goto end;

}

else { goto read;}

 read:

 pt = fopen("/usr/local/sbin/control/conf/user.conf", "r") ;

 pt2 = fopen("/usr/local/sbin/control/conf/user-acl.conf", "w");

 fprintf(pt2,"#!/bin/bash\r\n");

 fprintf(pt2,"cd /data/home/%s ; find -exec chacl u::rwx",argv[1]); 

while(1)

{

idscan:

k++;

fscanf(pt,"%s",userid);

if (feof(pt)) break;

printf("%s에 대한 %s의 퍼미션을 입력하세요 : \r\n7 : 읽기+쓰기 모두가능, \r\n5 : 읽기만 가능\r\n0 : 접근불가\r\n입력 : " ,argv[1],userid); 

scanf("%d",&permission);

if(permission == 7){ 

printf("%s의 퍼미션  %d (읽기 + 쓰기 가능)",userid,permission);

fprintf(pt2,",u:%s:rwx",userid, permission,userid);

}

else if(permission == 5){

printf("%s의 퍼미션  %d (읽기만 가능)",userid,permission);

                fprintf(pt2,",u:%s:r-x",userid, permission,userid);

}

else if(permission == 0){

printf("%s의 퍼미션  %d (권한 없음)",userid,permission);

}

else {

printf("잘못선택하셨습니다.");

k=0;

goto idscan;}

 

printf("\r\n");

getchar();

if (fgetc (pt) == EOF) break;

   }

   fprintf(pt2,",g::r-x,o::---,m::rwx \"{}\" + ");

end:

 fclose(pt) ;

 system("chmod 770 /usr/local/sbin/control/conf/user-acl.conf");

 system("dos2unix /usr/local/sbin/control/conf/user-acl.conf");

 system("/usr/local/sbin/control/conf/user-acl.conf");

 system("rm -rf /usr/local/sbin/control/conf/user.conf ");

 system("rm -rf /usr/local/sbin/control/conf/user-acl.conf");

}

 

소스 긁어 쓰지 마시고 아래 파일을 받아서 쓰세요 인코딩은 EUC-KR입니다.
 

 

 

 

 

 

Posted by 현종이닷
,








안녕하세요 현이입니다.

 

오늘 포스팅은 리눅스서버에서 쓸 기술문서들 입니다...

 

awk을 이용하여 uid가 1000과 그 이상의 아이디 리스트를 출력하여 파일에 저장하는 소스 입니다. 

간단히 쉘로도 할 수 있습니다.... 

 

소스는 

 

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <unistd.h>

 

int main()

{

    system("mkdir -p /usr/local/sbin/control/conf");

    system("awk -F: '{ if ($3>= 1000 ) print $1 }' /etc/passwd > /usr/local/sbin/control/conf/user.conf");

    system("sed -i '/nobody/d ' /usr/local/sbin/control/conf/user.conf");

}

 

이러합니다 .... 쉽죠??? ㅎㅎ

 

설명을 덛붙히자면 

/etc/passwd 파일에서 

:로 구분지어진 드의 3번째 값(UID)이 1000 이상인 라인을 출력받아서 

awk -F: '{ if ($3>= 1000 ) print $1 }' /etc/passwd

/usr/local/sbin/control/conf/user.conf 에 저장을 한 후 

sed 로 uid 65535 인 nobody를 지워라 입니다.

 

파일은 이러합니다~~ ㅎㅎ 

 

user-control.c
다운로드

 

 

 

 

Posted by 현종이닷
,








젠투리눅스를 예전 셋팅해 놓은 뒤 관리 프로그램을 이제서야 만들게 되었으며

https://wiki.gentoo.org/wiki/Handbook:AMD64 이곳의 핸드북을 참고하여 만들었습니다.

 

우선 스크립트 내용을 설명 드리겠습니다.

 

#!/bin/sh

/* 텔넷 사용자를 위해 추가 */

case "$TERM" in

        xterm)

stty erase ^H

                ;;

        *)

                stty erase ^?

                ;;

esac

/* 변수에 명령어 저장 */

CURRENTIP=$(ifconfig  $(route | grep "default" | awk '{ print $8 }') | grep -w inet | awk '{ print $2 }')

CURRENTGW=$(route | grep "default" | awk '{ print $2 }')

 

clear

echo -e "\r\n\r\n\r\n"

echo "--------------------------------"

echo "|        네트워크 설정변경        |"

echo -e "--------------------------------\r\n\r\n\r\n"

echo -e "현제 IP : ${CURRENTIP} "

echo -e "현제 게이트웨이 : ${CURRENTGW} "

echo -e "네임서버정보 : \r\n$(cat /etc/resolv.conf)"

echo -e "호스트네임 : $(hostname)\r\n"

echo -e "원하시는 메뉴의 번호와 엔터를 눌러주세요\r\n\r\n"

echo "1. 아이피 변경"

echo "2. 게이트웨이 변경"

echo "3. 네임서버 변경"

echo "4. 호스트네임 변경"

echo "6. 초기메뉴로 돌아가기"

 

read num

  case $num in

    1)

        echo -n "변경할 아이피를 입력해 주세요 예) 192.168.0.254 : "

        read newip

sed -i "$(grep -n "config_$(route | grep "default" | gawk '{ print $8 }')" /etc/conf.d/net | awk -F: '{ print $1} ')s/$CURRENTIP/$newip/" /etc/conf.d/net >> /dev/null

echo -n "${newip} 로 아이피를 변경하였습니다. 제부팅 후 적용됩니다."

        /usr/local/sbin/control/network_setting-for-gentoolinux

    ;;

    2)

        echo -n "변경할 게이트웨이를 입력해 주세요 예) 192.168.0.1 : "

        read newgw

sed -i "$(grep -n "routes_$(route | grep "default" | gawk '{ print $8 }')" /etc/conf.d/net | awk -F: '{ print $1} ')s/$CURRENTGW/$newgw/" /etc/conf.d/net >> /dev/null

echo -n "${newgw} 로 아이피를 변경하였습니다. 제부팅 후 적용됩니다."

        /usr/local/sbin/control/network_setting-for-gentoolinux

 

    ;;

    3)

        echo -n "현제 네임서버 정보입니다."

        cat /etc/resolv.conf

        echo -n "변경할 1차 네임서버 주소를 입력해 주세요 예) 168.126.63.1 : "

        read ns1

        echo -n "2차 네임서버를 입력해 주세요 예) 168.126.63.2 : "

        read ns2

        echo "nameserver ${ns1}" > /etc/resolv.conf

        echo "nameserver ${ns2}" >> /etc/resolv.conf

        /usr/local/sbin/control/network_setting-for-gentoolinux

    ;;

    4)

        echo "현제 호스트테임 정보입니다."

        cat /etc/conf.d/hostname

        echo -n "변경할 호스트네임을 입력해 주세요 예) wdcil-NAS : "

        read host

        echo "hostname=${host}" > /etc/conf.d/hostname

        hostname ${host}

        service hostname restart

        /usr/local/sbin/control/network_setting-for-gentoolinux

    ;;

    6)

        echo "초기메뉴로 돌아갑니다."

        echo -n "Enter키를 눌러주세요"

        read enter

        /usr/local/sbin/control/admin1

    ;;

    *)

        echo "Warning : 잘못된 번호입니다."

        echo -n "Enter키를 눌러주세요"

        read enter

        /usr/local/sbin/control/network_setting-for-gentoolinux

    ;;

  esac

 

위에 내용 긁어 쓰셔도 되지만 그래도 편안파일로 올려드립니다

 

network_setting-for-gentoolinux
다운로드

 

 
 
 

 

Posted by 현종이닷
,








안녕하세요~^^

 

현종이닷 입니다.....

 

이번에는 리눅스/NAS에서 공인 아이피 알아보는 스크립트를 올려봅니다....

 

NAS 원격제어 받으실 때에 유용하게 쓰의실거 같아서 만들었습니다.

 

해당 파일을 NAS에 올리신 후 NAS에 Putty 로 접속후 ./ipcheck.sh 하시면 나옵니다~

 

CURL 이 설치되어 있어야 가능하지만 왠만하면 설치 되어 있으니 걱정마시고 사용하세요~

 

 

자 그럼 스크립트 내용을 설명 드리겠습니다

 

#!/bin/sh

#* curl 위치를 찾아 변수로 지정합니다. *#

curl=$(find /usr/bin /bin/ /usr/local/bin -name curl)

 

#* find 로  검색하여 결과값이 있다면 case 문으로 보내줍니다. *#

if [ $curl ]; then

 

case $curl in

    ("/usr/bin/curl")
        IP=$(curl -s ifconfig.me)
        echo "MY IP Address is ${IP}"
    ;;
    ("/bin/curl")
        IP=$(curl -s ifconfig.me)
        echo "MY IP Address is ${IP}"
    ;;
    ("/usr/local/bin/curl")
        IP=$(curl -s ifconfig.me)
        echo "MY IP Address is ${IP}"
    ;;

  esac

#* 위에 경우가 아니라면 echo 문으로 없다고 출력합니다. *#

else
echo "CURL is not Install this system"
fi

 

 

자 쉽죠? ㅎ

이거 긁어다 쓰지 마시구요~ 아래에 있는 첨부파일 받으셔서 사용하세요~

 

ipcheck.sh
다운로드

 

 

Posted by 현종이닷
,








안녕하세요~

 

현종이닷 입니다~^^

 

요즘 HP MicroServer N40L애 젠투 설치하는데 푹 빠져 있습니다.^^

 

삽질 후의 '아 해냈다' 라는 쾌감에 취해 더더욱 열심히 삽질을 하는거 같습니다.

 

오늘은 '무작정 따라하기' 편으로 준비했습니다... ^^'

 

아! '공유기에 VPN이 있는데 왜 서버에 VPN을 설정 하냐'고 의문을 가지신다면

 

'속도가 어~마 하게 잘 나옵니다' 라고 답 해드리겠습니다.

 

자 아무튼 설명하기에도 애매한 것들이 있고 해서요;; 그냥 무따기로 준비했습니다.^^

 

우선 시스템커널을 새로 빌드해야 합니다....

 

그러기 위해 cd /usr/src/linux 로 이동한 후

 

아래 첨푸파일의 .config 를 덮어쓰거나

 

아래 해당하는 부분을 선택해 주세요

 

 

 

 

 

 

(추가 사항입니다... NAT를 위해서 )

Network packet filtering framework (Netfilter)  ---> IP: Netfilter Configuration  --->

 

  │ │            {M} IPv4 packet logging                                                            │ │
  │ │            {M} IPv4 packet rejection                                                          │ │
  │ │            -M- IPv4 NAT                                                                       │ │
  │ │            -M-   IPv4 masquerade support                                                      │ │
  │ │            <M> IP tables support (required for filtering/masq/NAT)                            │ │
  │ │            <M>   "ah" match support                                                           │ │
  │ │            <M>   "ecn" match support                                                          │ │
  │ │            <M>   "rpfilter" reverse path filter match support                                 │ │
  │ │            <M>   "ttl" match support                                                          │ │
  │ │            <M>   Packet filtering                                                             │ │
  │ │            <M>     REJECT target support                                                      │ │
  │ │            < >   SYNPROXY target support                                                      │ │
  │ │            <M>   iptables NAT support                                                         │ │
  │ │            <M>     MASQUERADE target support                                                  │ │
  │ │            <M>     NETMAP target support                                                      │ │
  │ │            <M>     REDIRECT target support  

 

이 부분도 추가 선택해주셔야 합니다..^^;;

 

이게 선택해야 하는 부분이고요 x86 기준입니다... x64 시스템 이용자 분들은 해당 부분도 체크해 주세요~

 

x64애서 만들어논 .config 입니다....

config
다운로드

 

x86에서는 아직 작업해 논게 없어서 죄송합니다^^;;; 사실 x86을 쓸 일이 거의 없어서요;;;;

(데비안에서는 그냥 사용하실 수 있는거 같더라구요;;;;;; 커널 리빌딩 필요 없이요;;)

 

이제 pptpd를 설치해야 갰죠?

 

emerge --sync

emerge ppp pptpd

 

설치를 완료 하였다면 vi 나 nano 등의 편집기로 /etc/pptp.conf 파일을 열어주신 후

 

원래 내용은 모두 지운 후 아래 내용만 붙혀 넣어주세요

 

 

ppp /usr/sbin/pppd

option /etc/ppp/options.pptpd
logwtmp
localip 192.168.130.240
remoteip 192.168.130.241-250

 

여기서 중요한 거는 localip 와 remoteip 입니다.

딱 봐도 눈치가 오시나요? 그렇습니다.

VPN 서버가 사용할 IP와 클라이언트가 사용할 IP대역입니다.

 

localip = VPN서버가 사용할 IP

remoteip = 클라이언트 IP대역 

 

입니다. NAS 상단에 있는 공유기와 같은 아이피 대역을 쓰셔도 되구요, 다른 대역을 쓰셔도 됩니다.

아참 localip 와 remoteip 는 같은 대역이여야 합니다^^

 

저장 후 이번엔 /etc/ppp/options.pptpd 파일을 에디터로 여신 후

나머지 내용은 다 지워주신 후 아래의 내용을 입력해 주세요

 

name pptpd

 

refuse-pap
refuse-chap
refuse-mschap

require-mschap-v2

#require-mppe-128

 

ms-dns 192.168.130.254
ms-dns 168.126.63.1

 

nopcomp
noaccomp

 

nobsdcomp

 

novj
novjccomp

 

nologfd

 

proxyarp
debug
lock

 

 

자 여기서 눈 여겨 봐아 할 것은

#require-mppe-128

ms-dns 192.168.130.254
ms-dns 168.126.63.1  요 세줄입니다. 

 

ms-dns 는 네임서버 지정 부분 이고요,  #require-mppe-128 는 PPP 암호화 (MPPE) 부분 입니다.

 

#require-mppe-128 = PPP 암호화 (MPPE) 없음

require-mppe-128 = MPPE 암호화 (MPPE) 적용  이런식으로 주석처리 여부에 따라 암호화 적용 여부가 달라집니다.

 

자 역시 저장 하고 이번에는 /etc/ppp/chap-secrets 파일을 열어 사용자 ID와 비밀번호를 셋팅하도록 하겠습니다.

 

파일을 열어보면

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses 이러한 형식으로 작성하게 되어 있습니다.

 

위 형식에 맞춰 사용자이름 서버 비밀번호 아이피주소를 입력해 주면 되는데요....

아래 형식만 유지해 주면 됩니다.

아이디 * 비밀번호 *

 

서버와 IP 부분에는 와이드카드(*) 처리해 주시면 되고요, 각 필드 사이는 텝이나 스페이스로 구분해 주시고

저장해 주시면됩니다.

 

이제 95% 이상 진행하였습니다.^^ 제가 말솜씨가 없어서;;; 좀 지루하실텐데 잘 따라 오셨습니다.

 

이제 마지막 방화벽 설정입니다.

 

우선 ifconfig 로 자신이 사용하고 있는 인터페이스 이름을 확인해 주세요 eth0,eth1 enp5s0 enp6s0 등..

 


iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A INPUT -i eth0 -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -i eth0 -p gre -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

 

대소문자 구별 잘 하셔서 입력 하여야 하며, bond0 부분을 자신의 인터페이스 이름으로 변경하여야 합니다.

 

여기까지 잘 따라 오셨다면 /etc/init.d/iptables save 로 현제 방화벽을 저장해 주시면 됩니다.

 

이제 서비스를 지작하겠습니다.

/etc/init.d/iptables restart

/etc/init.d/pptpd restart

 

위에서 셋팅하신 아이디와 비밀번호로 접속하시면 됩니다.

 

아 부팅시 마다 시작되도록 하는 방법은요...

 

eselect rc add pptpd default 입니다~~

 

이야 다 쓰고 나니 5시가 넘어버렸내요....

 

마지막 인증샷 두게 날리고 저는 이만 물러나도록 하겠습니다~

 

새해 복 많이 받으시고 남은 연휴 즐겁게 보내세요~~

 

인증샷 입니다~

 

 

LTE 모바일에서 125.138 대역대를 볼 수는 없기에 인증샷으로 올렸습니다.^^

 

서버에서 ifconfig 입력하니 이렇게 ppp0 부터 시작해 접속한 순서대로 보여주네요 ㅎ

 

 

 

 

Posted by 현종이닷
,








안녕하세요! 현이 입니다^^

 

와이즈기가 카페에도 있는 자료이지만 백업 포스팅입니다~ㅎ

 

 

오늘은 초보분들에겐 좀 큰거 들고 나왔습니다....

 

리눅스 중급 유져 이상 혹은 Linux를 사용하고 게신 분들은 이 방법을 통하여

 

돔 확장을 하셔도 되리라 생각이 들어서 그냥 공개하려구요

 

아참 이거 메모장으로 복사하지 마시구요 올려드리는 첨부파일 받으셔서 NAS에 올리셔야 합니다

 

사실 거장한건 아니구.... 일일이 손으로치기 귀찮아 반자동화 스크립트 입니다..ㅎ

 

우선 스크립트 내용입니다..ㅎ

 

domcopy.sh


#!/bin/sh

 

#* 디랙토리 선언 *#
wr="/home/domcopy/root-extender/"
wh="/home/domcopy/home-extender/"

 

#* 디랙토리 생성 및 내용 지우기 *#

mkdir -p /home/domcopy/
rm -rf /home/domcopy/tmp1
rm -rf ${wr}/
rm -rf ${wh}/
mkdir -p ${wr}
mkdir -p ${wh}

 

#* 스크립트 시작 *#
echo "DOM 영역 확장 프로그램 입니다. "
echo -n "사용하시는 분의 영문 닉네임을 적어주세요. : "
read name
echo -n "이미지화할 모델의 숫자만 입력해 주세요 : "
read model

 

#* fdisk -l 등으로 사전 조사도 해보시기 바랍니다... *#

echo "먼저 USB에 DOM을 삽입 후 몇번 디스크로 잡혔는지 체크해 주세요"i
ls --color=always /dev/sd*

echo -n " /dev/sd 뒤의 단어를 입력해 주세요 : "
read dl
echo "/dev/sd${dl} 가 DOM으로 지정되었습니다"
echo "확장할 USB를 삽입 후 몇번 디스크로 잡혔는지 체크해 주세요"
ls --color=always /dev/sd*
echo -n " /dev/sd 뒤의 단어를 입력해 주세요 : "
read ul
echo "/dev/sd${ul} 가 확장 USB으로 지정되었습니다"
echo "DOM to HDD 이미지화를 시작합니다."
DOM="/dev/sd${dl}"
USB="/dev/sd${ul}"
IMG="/home/domcopy/${name}-${model}.img"

 

#* DD로 우선 하드에 이미지를 복사합니다. *#

dd if=${DOM} of=${IMG}
echo "이미지화가 끝났습니다."

 

#* 해당 디바이스를 tar로 묶은 후 나중에 USB에 덮어서 풀 예정입니다. *#

echo "확장을 위해 파일 압축을 시작합니다."
mount ${DOM}2 ${wr}
sleep 1s
mount ${DOM}3 ${wh}
cd /home/domcopy/
tar zcf ${name}-root-extender.tar.gz root-extender
tar zcf ${name}-home-extender.tar.gz home-extender
echo "압축이 끝났습니다."
umount ${DOM}2
umount ${DOM}3

 

#* 사실 이 부분을 한방에 해낼 자신이 없어 돌려치기 한 이유도 있구오...*#

#* 나중을 위해 백업파일을 생성하기 위해 돌려친 이유도 있네요;;; *#

#* 또한 부트영역은 dd로 쓰거나 grub을 이용해 심는 방법 둘 중에 하나를 써야 하는데;... *#

#* chroot를 통해 해당 시스템에서 부트로더를 심으려다 뭔가좀 찜찜하여 dd 를 사용하였습니다. *#

echo "USB에 DOM 이미지를 풀겠습니다."
dd if=${IMG} of=${USB}
echo "확장서비스를 시작합니다."

#* 이부분이 중요합니다. 우선 system 영역과 3번째 파티션을 날리는데... 두번째 파티션의 시작 부분을 *#

#* 찾아서 우선 파일로 저장해 주는 부분입니다.. 꼼수죠... *#

parted ${USB} print | grep "boot" |  awk '{print $3}' > /home/domcopy/tmp1
parted ${USB} rm 2
parted ${USB} rm 3

#* 아까 저장햇던 부분을 읽어와 첫 부분을 지정 후 해당 디바이스의 95% 까지 /로 잡습니다.

parted ${USB} mkpart p ext3 $(cat /home/domcopy/tmp1) 95%

#* 나머지 부분입니다.. *#

parted ${USB} mkpart p ext3 95% 100%

 

#* 여기서도 주의 할 점은 -L /  이 부분입니다... *#

#* 이유는 /etc/fstab 에 /dev/sda2 이런식이 아닌 LABEL=/ 으로 지정을 한 이유도 있구요.. *#

#* 쓸때없이 1 2 번 파티션 다 마운트 하여 문자를 치환하는 것 따위... 귀찮아서요;;;;; *#
mkfs -t ext3 -L / ${USB}2
mkfs -t ext3 ${USB}3

echo "파일 복원을 시작합니다."
mount ${USB}2 ${wr}
mount ${USB}3 ${wh}
cd /home/domcopy/
tar zxf ${name}-root-extender.tar.gz
tar zxf ${name}-home-extender.tar.gz
echo "마무리 작업을 시행합니다."
umount ${USB}2 ${USB}3
mv ${name}-* img_user/

rm -rf /home/domcopy/tmp1
rm -rf ${wr}/
rm -rf ${wh}/

 

 

네 이상입니다...

 

파일은.....

 

domcopy.sh
다운로드

 이거 받으시면 되구요.....

 

 

 

중간에 Ignore/Cencel 라는 문구가 나오면 무조건 I 를 입력하시구요

mkfs 에서 메세지가 나온다면 y/n 이 나온다면 y를 입력해 주세요 ㅎ  사실 -q 나  -F 옵션을 붙혀줘도 되긴 하는데....

그냥 어쩌피 완전자동화거 아니 반 자동화니깐요 ㅎ

 

위에껀 참고용이구요

 

직접 사용하시려면 첨부파일을 받아 사용하세요~ㅎ

 

스크립트나 프로그램은 항상 chmod 로 권한주셔야 하는거 잊지 마시구요

 

루트에서 실행하셔야 합니다~

Posted by 현종이닷
,








안녕하세요~....

 

현종이닷 입니다.

 

얼마전(지난달 27일) 발표된 분류코드 CVE-2015-0235 (이하 'Ghost' ) 에 대하여 포스팅 하려 합니다.

 

우선 급한 불 부터 끄고 차근 차근 나아가도록 하겠습니다.

 

우선 glibc 버젼을 확인 할 수 있는 명령어 입니다.

 

getconf -a | grep glibc

 

햇을 경우 2.2 ~ 2.17 사이만 아니면 됩니다.

 

안전한 예

 

 

보안에 취약한 예

 

 

 

자 그럼 업데이트 방법은요~

 

데비안/우분투 : apt-get update && apt-get upgrade glibc

레드햇/CentOS : yum update glibc

젠투 : emerge --sync && emerge -uND glibc

 

그럼 부가적인 설명(?)을 드리도록 하겠습니다.

 

1. Ghost 취약점이란

 -1 업데이트 권고일자 : 2015/01/27

 -2 업데이트 대상 시스템 : glibc 2.2~2.17

 -3 업데이트 중요도 : 별 5게/5게

 -4 해당 취약점에 대한 정리.

  1) 해당 취약점은 gethostmyname() 혹은 gethostmyname2() 에서 발생하는 취약점으로

      취약점이 발생시 Buffer OverFlow가 일어나 해커가 최고관리자의  ID,비밀번호 없이

     시스템 권한을 획득 할수 있습니다.

  2) 취약점 원리 __nss_hostname_digits_dots()의 잘못된 메모리 사용으로 인해 Overflow가 발생합니다.

  3) 정의된 취약점은 'gethostmyname() 혹은 gethostmyname2() ' 인데 ' __nss_hostname_digits_dots()' 가

      언급 된 이유는 'gethostmyname() 혹은 gethostmyname2() ' 함수가 도메인 주소를 ip주소로 변환할 때

       '__nss_hostname_digits_dots()' 을 내부적으로 호출하기 때문입니다.

  4) 해당 취약점은 payload가 숫자 '0', 점 '.' 마침을 표현하는 빈칸 '/0' 으로만 이루어져 있어야 한다는

      전제조건이 있어야 한다고 합니다.

  5) glibc를 타겟으로 한 공격은 2000년 11월 10일에 발생했었으며 13년 5월 21일에 패치가 적용된 상태입니다. 

 -5 4번과 5번만 믿고 그냥 넘기지 마시고, 꼭  glibc  업데이트 하시기 바랍니다.

 

 

Posted by 현종이닷
,








1. postfix saslpass 만들기

/etc/postfix에 들어가

postmap saslpass
chmod 600 saslpass
chmod 644 saslpass.db

 

2. 데비안 사용자 추가했는데 $ 만 나오는 경우

이 경우는 간단하다. 언젠가 스누피님의 블로그에서도 다룬 적이 있던 내용이기도 하다.

원래 다른 OS들은 기본 쉘이 /bin/bash 이지만 데비안/우분투는 /bin/sh 인 경우가 많다.

이 sh 쉘은 PS1변수가 먹히지 않아 생기는 현상이다.

 

해결방법은

사용자를 추가할 때.  

useradd -s /bin/bash testuser

이러첨 쉘을 지정해 준다

 

이미 추가한 사용자라면

/etc/passwd 파일에서

/bin/sh를 /bin/bash로 변경한다.

 

/etc/default/useradd 의 SHELL 을 /bin/bash 로 수정한다. 

 

정말 셋다 어렵고 귀찮다면

cd /bin

rm -rf sh

ln -sf bash sh

 

이 명렁어로

기존에 있던 sh를 bash와 연결시켜 준다....

 

사실 네번째 방법은 그리 추전하지 않는다.

시스템 계정들은 sh 에 의해 스크립트가 만들어진 것들이 있는데.

sh에서 되던 것들이 bash 에서 안되는 것들이 있고 bash 에서 되던 것들이 sh에서

안되는 것들을 몇게나 보았기 때문이다.....

 

3. 데비안으로 시스템을 만들었는데.... ls 햇더니 색갈이 안나올때

ls 를 해 보면 디렉토리 파일 압축파일 을 구별 할수 있기도 하고

해당 파일의 퍼미션을 대충 눈으로 알수 있다.

타 OS를 쓰다가 어느순간 데비안으로 넘어왔더니 이것이 안보이길레;;;;

엄청 당황했지만;;;

이 파일 두개를 덮어 씌우는 것으로 해결봤다.

파일을 받아 계정의 홈에 올린 후

 

bashrc
다운로드

 

profile
다운로드

 

mv bashrc .bashrc

mv profile .profile

 

해주면 끝.

 

4. vi 를 열었는데 색상이 안나올때

아래 첨부된 vimrc 파일을

/etc/vim/vimrc 파일에 덮어 씌우면 된다.

 

vimrc
다운로드

 

5. 다른 사용자가 /home 폴더의 계정 목록을 못 보게 하고 싶을때!

chmod 711 /home

 

6. mysql 백업하기

mysql을 백업하는 방법에는 세가지 정도의 방법이 있다.

1). phpmyadmin을 사용하는 방법

   - 사실 저는 이 툴을 안 써서 모르겠습니다;;;; 아마 웹 인터페이스이니...

      왠만하면 사용하실 수 있으리라 생각됩니다.

 

2). mysqldump 를 사용하는 방법

 - DB별로 백업하기

mysqldump -uroot -p[mysql root 비번] DB이름 > /home/backup/mysql-backup.sql 
 - 전체 DB 백업하기
mysqldump -uroot -p[mysql root 비번] -e --all-databases > /home/backup/mysql-all-backup.sql

여기서 주의할 점은  password 에 느낌표 있다면 주의! 

 

3) mysql 폴더를 통째로 뜨는 방법

우선 /etc/my.cnf 혹은 /etc/mysql/my.cnf 에 datadir 이 어디로 되어 있는지 확인 한 후

해당 폴더를 통으로 압축하는 방법입니다.

저같은 경우에는 ~~~

datadir                                         = /data/server/DB/mysql

이렇게 되어 있으니깐요~

cd /data/server/DB/

tar zcf mysql.tar.gz mysql

이렇게 명령어를 내려줬습니다~ 그럼 mysql.tar.gz 에 mysql이 압축되어 백업된 것을

확인해 보실수 있으십니다~

 

7. 시스템 백업하기

음 이건 말로 설명드린다기 보단.....

실 사용하고 있는 스크립트를 보여 드릴께요

 

#!/bin/sh
today=`date +%Y%m%d`
delday=`date --date '10 days ago' +%Y%m%d`

mkdir -p /data/system/DB/
mkdir -p /data/system/DB/mysql/
mkdir -p /data/system/DB/cubrid/
mkdir -p /data/system/script/
mkdir -p /data/system/system/
#* mysql backup *#
cd /data/server/DB/
tar zcf mysql_${today}.tar.gz mysql > /dev/null 2>&1
mv mysql_${today}.tar.gz /data/system/DB/mysql

#* cubrid backup *#
cd /data/server/DB/
tar zcf cubrid_${today}.tar.gz CUBRID > /dev/null 2>&1
mv cubrid_${today}.tar.gz /data/system/DB/cubrid/

#* script backup *#
cd /
tar zcf script-etc_${today}.tar.gz etc > /dev/null 2>&1
mv script-etc_${today}.tar.gz /data/system/script/

#* user script backup *#
cd /usr/
tar zcf usr-local_${today}.tar.gz local > /dev/null 2>&1
mv usr-local_${today}.tar.gz /data/system/script/

#* system backup *#
cd /
tar zcf system_${today}.tar.gz bin boot etc lib lib32 lib64 opt root sbin sys usr var > /dev/null 2>&1
mv system_${today}.tar.gz /data/system/system/
#* Clear the script last 10 days *#
rm -rf /data/system/DB/mysql/mysql_${delday}.tar.gz > /dev/null 2>&1
rm -rf /data/system/DB/cubrid/cubrid_${delday}.tar.gz > /dev/null 2>&1
rm -rf /data/system/script/script-etc_${delday}.tar.gz > /dev/null 2>&1
rm -rf /data/system/script/usr-local_${delday}.tar.gz > /dev/null 2>&1
rm -rf /data/system/system/system_${delday}.tar.gz > /dev/null 2>&1

 

대충 보시면 아시겠죠?

today와 delday에 date 로 변수를 지정해 주고

혹시 모르니 /data/system 안에 각 폴더를 만들고

mysql을 tar로 묶어 해당폴더에 투척.

큐브리드 DB도 tar로 묶어 해당 폴더에 투척

usr / local 에 스크립트가 많아 이것도 백업후 투척

/ 를 압축한 후 투척

체크를 해서 10일이 지난 백업본은 지운다~

뭐 이런거에요~ㅎ

이거는 젠투리눅스가 깔려있는 서버에서 실사용되고 있는 스크립트에요~ㅎ

 

 

에고고 7게나 적었더니;;;머리가 어질 어질 하네요

 

그럼 오늘 포스팅은 여기서 마무리 할께요~

 

유용하게 쓰였으면 좋겠네요ㅎ

 

다들 감기 조심하세요~

Posted by 현종이닷
,








안녕하세요~^^

 

현이입니다

 

이번 포스팅은 사진 없이 후딱 써 보려고 합니다

 

원래 스크린샷을 잘 안써봐서요;;;;; 이게 익숙지 못하더라구요;;;;

 

 

데비안 리눅스 호스트네임 변경하기 입니다

 

 

우선 vi 나 nano 편집기로 /etc/dhcp/dhclient.conf 를 열어주세요

 

비교적 윗 부분의

option rfc3442-classless-static-routes code 121 = array of unsigned integer 8; 요 부분을 찾으신 후

 

해당 아렛줄에

 

supersede host-name "호스트네임";
option host-name "호스트네임";

요 두줄 후가해 주신후

 

/etc/hosts 를 열어

 

127.0.0.1       localhost 호스트네임

 

혹은

 

127.0.0.1       호스트네임 호스트네임

 

저장 후 제부팅 하면 적용됩니다~

 

이건 영구적 방법이구요

 

잠시 쓸 목적이라면 hostname 호스트네임

 

해주신후 쉘에 다시 접속하시면 변경된 호스트네임을 보실 수 있으십니다.

 

Posted by 현종이닷
,








안녕하세요~ ㅎ

 

오늘 포스팅 내용은 apcups 설치 입니다.

 

얼마전 필요해 레드햇 리눅스에서 yum search apcups 를 해봤는데.... 없더군요!

 

그래서 머리를 굴려보다 그냥 홈페이지에서 다운로드 하자는 결론을 내렸습니다.

 

이 자료는 apcupsd 3.14 를 기준으로 작성된 것입니다. 버젼이 올라가면서 변경될 수도 있습니다.

 

자 이제 시작하겠습니다. 잘 따라서 해 보시길 바랍니다.!

 

저는 APCUPS BE700KR을 기준으로 설명하겠습니다.

 

1. 소스를 받아주세요..

-- 홈페이지 (http://www.apcupsd.org/) 에 들어가 DOWNLOADS 로 들어가 SOURCE TARALL로 들어간 후

tar.gz 로 끝나는 파일을 다운로드 합니다.

 

2. 소스를 서버(NAS)에 업로드 후 압축을 푼 후 컴파일 까지 진행합니다.

-- tar zxf apcupsd-3.14.12.tar.gz

-- cd apcupsd-3.14.12

-- ./configure

-- make

-- make install

 

3. /etc/apcupsd 의 환경파일을 설정합니다.

vi 나 nano 혹은 Windows 에서 notepad++ 등 유닉스 호환 편집기를 이용합니다..

혹은 첨부파일을 서버(NAS)에 업로드해 /etc/apcupsd/apcupsd.conf 로 저장합니다. (기존 파일 지운 후)

apcupsd.conf
다운로드

apcupsd.conf 에서 수정할 것들은

15번 줄 UPSNAME의 주석을 풀고 이름을 적어준다 (모델명)   예) UPSNAME BE700KR

29번 줄 UPSCABLE smart 를 UPSCABLE usb로

82번 줄 UPSTYPE apcsmart 를 UPSTYPE usb로
83번 줄 DEVICE /dev/ttyS0 를 DEVICE 로 변경

92번 줄 #POLLTIME 60 주석해재

 

등입니다~

 

4. 서비스 시작

-- /etc/init.d/apcupsd start 혹은 service apcupsd start

 

5. apcaccess 로 테스트

 

Test-Server apcupsd # apcaccess
APC      : 001,036,0913
DATE     : 2014-08-15 18:32:41 +0900
HOSTNAME : Test-Server
VERSION  : 3.14.8 (16 January 2010) gentoo
UPSNAME  : BE700KR
CABLE    : USB Cable
MODEL    : Back-UPS ES 700
UPSMODE  : ShareUPS Master
STARTTIME: 2014-08-15 18:32:39 +0900
SHARE    : ShareUPS
STATUS   : ONLINE
LINEV    : 232.0 Volts
LOADPCT  :  30.0 Percent Load Capacity
BCHARGE  : 100.0 Percent
TIMELEFT :  38.6 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 0 Seconds
SENSE    : Medium
LOTRANS  : 180.0 Volts
HITRANS  : 266.0 Volts
ALARMDEL : Always
BATTV    : 13.5 Volts
LASTXFER : Automatic or explicit self test
NUMXFERS : 0
TONBATT  : 0 seconds
CUMONBATT: 0 seconds
XOFFBATT : N/A
STATFLAG : 0x07000008 Status Flag
MANDATE  : 2013-04-19
SERIALNO : 5B1316T09823
BATTDATE : 2013-04-19
NOMINV   : 230 Volts
NOMBATTV :  12.0 Volts
FIRMWARE : 829.D3 .I USB FW:D3
APCMODEL : Back-UPS ES 700
END APC  : 2014-08-15 18:32:49 +0900

이런식으로 뜨면 정상입니다~ ㅎ

 

그럼 즐거운 연휴되시기 바랍니다~~ ㅎ

 

 

 

 

 

 

 

 

 

Posted by 현종이닷
,