2016. 4. 11. 01:15

사용자별 인증서 발급이 보안에 더 좋기는 한데, 일일이 발급 하기도 귀차니즘으로 인하여

최근에 ID, PW 인증으로 바꾸면서 이에 대해 정리 하고자 한다.



앞의 OpenVPN 설치 부분 참고.


여기서는 바뀔부분만 정리한다.



server.conf

 client-cert-not-required
 plugin /usr/lib/openvpn/openvpn-auth-pam.so login

- 위 2줄 추가 한다.


client.ovpn

 ;ca ca.crt
 ;cert haebi.crt
 ;key haebi.key

- 인증서 부분 주석 처리 (세미콜론 ; 을 붙이면 된다)


 auth-user-pass
 
 <ca>
 -----BEGIN CERTIFICATE-----
 ...

 -----END CERTIFICATE-----
 </ca>

- auth-user-pass 추가

- <ca> ~ </ca> 안에 ca.crt 부분의 BEGIN ~ END 부분 통째로 복사 & 붙여넣기 하면 된다.


그리고 이 파일을 web 서버를 통해 공유 하면 편리하게 사용할 수 있다.


open 파일을 OpenVPN 앱에서 열기

프로파일 추가

ID, PW 입력 후 로그인~


여기서 입력하는 ID, PW는 리눅스 시스템의 ID, PW 이다.


예)

useradd -s /bin/false userid

passwd userid


디폴트 쉘을 /bin/false 로 설정하면 쉘 로그인을 차단 할 수 있다.

(단순 vpn 인증 용도로 쓰기위한 계정 생성 시 사용)



Posted by 해비
2016. 4. 4. 22:31


NAS에 파일시스템을 ZFS로 사용하면서 정리한 것들 입니다.


이 한페이지로 모든 상황에 다 써먹을순 없겠지만... 제가 사용중인 명령어들만 간단하게 한번 정리 해봤습니다.


누군가에겐 도움이 되겠지요~?


일부 틀린 내용 있을수도 있으니 참고 하셔서 조심조심 사용 바랍니다.




ZFS 사용을 위해서는 크게 2단계를 작업해야 합니다.

1. 풀 생성

2. 파일시스템 생성


linux에 ZFS 설치 할때 필히 커널에 모듈로 설치되는 Native ZFS 설치하시기 바랍니다.

유저레벨에서 돌아가는 Fuse는 성능 이슈가 있습니다.




 zpool

 import

 poolname

 

 - 기존에 존재하던 풀을 등록.
   (운영체제 재설치 후 기존에 쓰던 풀을 재등록 가능)

 zpool

 create

 poolname

 /dev/sdx /dev/sdy ...

 - 새로운 풀을 생성.
 - 뒤에 나열되는 저장장치들을 모두 묶어 하나의 스토리지 풀 구성.

 - 기존에 풀이 존재하는 경우 제거되고, 새 풀이 생성.

   (기존에 존재하던 풀을 사용하고자 할 경우 이 명령어 금지!!)

 zpool

 add 

 poolname

 /dev/sdx

 - 기존 풀에 새 저장 장치를 추가.

  (기존 풀에서 사용중인 장치 제거는 아직 몰라용 ㅠㅠ)

 zpool

 add

 poolname

 cache /dev/sdx

 - 캐시(L2ARC)로 사용할 장치를 추가

 zpool

 remove

 poolname cache /dev/sdx

 - 캐시(L2ARC)로 사용중인 장치 제거

 ARC(캐쉬)상태 확인

 # cat /proc/spl/kstat/zfs/arcstats


* ARC는 캐쉬 입니다. 총 2단계로 존재.

- L1 ARC : 시스템 메모리를 캐쉬로 사용하는데 권장 용량은 저장소 1TB 당 1GB의 메모리 캐쉬를 권장

- L2 ARC : 블록디바이스(저장장치)를 캐쉬로 사용하는데 고속 액세스 가능한 SSD를 풀의 캐쉬로 구성 가능




파일시스템

 파일시스템 - 가장 기본적인 사항!! 

 zfs

 list

 

 

 - ZFS 파일시스템의 리스트 출력

 zfs

 create

 

 poolname/data

 - data 라는 파일시스템 생성

 zfs

 create

 -V 50G

 poolname/anime

 - 50GB 용량의 볼륨 생성

 - 볼륨은 그 /dev/sdx 와 같은 방식으로, 장치가 생긴다고 보면된다.

 zfs

 destroy

 

 poolname/anime

 - 파일시스템 삭제

  (주의!! - 추가확인 없이 그냥 지워버림 주의 또 주의 !!)

 스냅샷 - ZFS를 사용하는 이유! ZFS의 꽃! 바로 스냅샷 기능입니다. ★★★★★

 zfs  snapshot poolname/data@original - poolname/data 파일시스템에 original 스냅샷 생성
 zfs

 list -t

 snapshot -r 

 poolname/data - 스냅샷 목록 확인
 zfs list -o space -r poolname/data - 스냅샷이 차지하는 공간 사용을 확인
 zfs rollback  poolname/data@original

 - original 시점으로 롤백

 - original 스냅샷 생성 이후에 발생한 모든 변경사항을 취소.

 zfs destroy  poolname/data@original - original 스냅샷 삭제

 쿼터 - 디스크 공간 할당을 자유 자재로!! 

 zfs set

 quota=10G

 poolname/data

 - 쿼터(할당공간) 설정.

 - 사용 중에 자유롭게 공간 사이즈를 재지정 할 수 있다.

  (당연하겠지만, 실제로 데이터가 차지하는 공간보다 작게는 설정불가)

 zfs get quota poolname/data

 - 현재 쿼터 설정정보 확인

 압축 - 풀에 압축 사용여부 설정 

 zfs

 set

 compression=lz4 poolname

 - 풀에 저장되는 데이터에 lz4 압축 사용

 zfs set compression=off poolname

 - 풀에 저장되는 데이터에 압축 사용 안함

 zfs get

 compression

 poolname - 현재 풀의 압축정보 확인


* 압축 관련

- 압축 지정 후 들어오는 데이터에 한해서 압축이 적용.

- 마찬가지로 압축을 꺼도 기존 들어온 데이터는 이미 기존 설정대로 저장된 상태로 진행.

- 압축종류가 몇가지 있는데 lz4를 추천하는 이유는 가장 빠른 속도 때문. 거의 제로타임 압축이라 불려질 정도로 빠르다고 함.



본인은 압축을 안씁니다. 대부분 동영상 데이터인데 압축 해봐야 용량이 줄어지 않기 때문

개인의 판단에 따라 사용을 하면 되겠습니다.






[참고]

https://docs.oracle.com/cd/E24846_01/html/E23284/toc.html

- 여기 페이지에 더 많은 내용이 상세히(?) 있으므로 부족한 내용은 이쪽 참고 바랍니다.




Posted by 해비
2016. 3. 6. 15:22

분명 파일을 지웠는데 용량은 그대로 차지하고 있는 경우가 있다. 


이럴 때는 휴지통을 찾아봐야 한다.


배포판 마다 경로가 제각각인듯 한데...


민트 17.3 의 경우는 아래 경로 였다.

/home/haebi/.local/share/Trash/files


중간에 haebi는 계정 이름 이다.




배포판 마다 틀리면 직접 찾는 수 밖에...

계정의 홈 폴더에서 현재 폴더 아래의 Trash 를 검색 했더니 아래와 같이 나오더라...


haebi@haebi-LPC ~ $ find . -name Trash

./.local/share/Trash


그럼 이제...

cd ./.local/share/Trash

하면 해당 경로로 이동이 될 것이다.


rm -rf *

묻지도 따지지도 않고 싹 날려준다.


실수로라도 중요한 파일있는 위치에서 rm 명령어 시전하지 않도록 조심... 또조심 하자!!






Posted by 해비
2016. 2. 29. 17:47

네트워크로 저장소를 제공하는 서비스 이다.

쉽게 말해서 네트워크에 연결된 하드디스크 정도로 생각하면 되겠다.



설치

# apt-get install iscsitarget



iSCSI 서버 설정

vi /etc/default/iscsitarget

   ISCSITARGET_ENABLE=true


서비스 시작 명령어

ietadm --op new --tid=1 --params Name=nas.haebi.master

ietadm --op new --tid=1 --lun=0 --params Path=/mnt/hdd1/iscsi/disk1-win7.img

ietadm --op new --tid=1 --lun=1 --params


tid=1 --params Name=이름

서비스 이름이다. 연결 할때 이 부분이 표시된다.


--tid=1 --lun=0

tid를 기준으로 묶는다고 생각하면 된다.

하나의 tid 밑에 여러개의 lun 이 올 수 있고, 각 lun은 1개의 하드디스크를 의미한다.

tid 하나에 lun 2개를 설정 하면 디스크 2개가 연결된다.





연결 (window)

시작 - iscsi 검색 - 검색탭 - 포털검색 - IP입력

대상탭 - 이름선택 - 연결

내컴퓨터 - 관리 - 디스크관리 - 파티션초기화 - 포맷 - 사용




Posted by 해비
2016. 2. 29. 17:38

이번에는 운영체제 재 설치, 또는 교체 후 기존 ZFS 풀을 연결하는 방법에 대해 다룹니다.


일단 기존 풀이 여러개의 디스크에 걸쳐 있었다면, 당연히 모든 디스크가 다 준비되어 있어야 합니다.


그렇지 않으면 아래와 같이 불가능 또는 오류 메시지가 나타납니다.



- 총 4개의 디스크 중 1번 만 연결한 경우의 예시

- 하나 이상의 디스크가 빠진 경우, 사용이 불가능합니다.



- 총 4개의 디스크 중 2번만 연결한 경우의 예시

- 이번에는 메타데이터 정보가 문제 있어 폴트가 발생하였습니다.



위 오류 메시지들은 시스템에 따라 다를 수 있습니다.


중요한 것은 풀을 구성했던 당시의 모든 디스크가 준비되어 있어야 한다는 것입니다.




이번에는 모든 디스크를 다 연결 후 다시 시도한 경우의 예 입니다.

- zpool import 로 풀을 확인 하고

zpool import [pool] 로 풀을 추가합니다.

- zpool status 로 상태를 확인 해 보면 정상으로 ONLINE 상태가 된 것을 확인 할 수 있습니다.






[테스트 환경]

- Linux Mint 17.3 x86_64

- VirtualBox 에서 테스트 하였습니다.






Posted by 해비
2016. 2. 29. 03:01

매번 실행하고 트레이 아이콘 찾아다가 연결 클릭하고...


귀찮아서 찾아봤더니 역시나... 있었다.


바로가기 아이콘 만들어서 아래 내용을 넣고 저장.

"C:\Program Files (x86)\OpenVPN\bin\openvpn-gui.exe" --connect client.ovpn


OpenVPN 설치 폴더 내에 config폴더

C:\Program Files (x86)\OpenVPN\config


위 경로에 있는 인증서 중 하나 적어 주면 되는 것 같다.


ID, PW 자동입력 추가 [2016.09.09]


ovpn 파일 내부에 다음 내용을 추가

auth-user-pass user.txt


그리고 user.txt 에는 다음 내용을 추가

userid

userpassword

(앞에 뭐 구분자 그런거 없이 1번째 줄에 아이디, 2번째 줄에 패스워드 넣으면 된다)



당연히 실행 할 때 그냥 실행하면 안된다.


관리자권한으로 실행 <<---!! 요거 젤 중요하다!



정상 연결시 예를 들어 [로컬 영역 연결2] 같이 떠야 하는데, 관리자권한 이 아닌 상태로 실행되면 이상 한 글자로 오류뜨면서 안됨.


Posted by 해비
2016. 2. 23. 07:51

리눅스 배포판은 민트 17.3 을 기준으로 합니다.


ZFS는 유저레벨에서 돌아가는 ZFS-fuse 와 커널레벨에서 돌아가는 모듈 방식이있는데 여기서는 후자쪽, 커널에 모듈방식으로 올리는 것으로 합니다.

(fuse는 안정성이나 퍼포먼스가 좋지 못하다고 합니다.)


zfsonlinux 사이트에 관련 정보가 있습니다.




1. 리포지터리 추가

add-apt-repository ppa:zfs-native/stable



2. 업데이트 및 패키지 설치

apt-get update

apt-get install ubuntu-zfs build-essential kmod spl

- Repo를 추가 하였으므로 추가된 Repo 로 부터 패키지 리스트를 갱신(업데이트) 합니다.



3. zfs 및 zfs status 명령어 테스트

- 둘다 잘 된다면 여기서 끝~!!


제 경우, zfs는 되는데 zfs status 는 모듈이 없다고 합니다.



3-1. 모듈 올리기

modprobe zfs

- 역시나 올라가면 여기서 끝~!!


제 경우 역시 여기서 모듈을 찾을 수 없다 합니다. 아놔 -_-;;




3-2. 모듈 리빌드

dpkg-reconfigure spl-dkms

dpkg-reconfigure zfs-dkms

- 모듈을 새로 빌드해 줍시다. 근데 이거 시간 쪼매 걸립니다. (그냥 몇분 정도...)

- 출처 : http://askubuntu.com/questions/431879/error-when-installing-ubuntu-zfs


빌드 후에 다시 3-1 의 모듈 올리기를 시도하면...?

반갑게도 아무런 오류를 내뱉지 않습니다. (오류 메시지 없으면 정상요)




이제 다시

zfs

zfs status

- 2개의 명령어 테스트를 해봅니다.

- 모듈 어쩌서 메시지 안뜨면 잘 된겁니다. 



설치는 여기까지 끝~!!  이후 활용편에서 계속합니다.






Posted by 해비
2016. 2. 18. 00:51

현재 실행중인 프로세스의 스레드 발생 수 확인

cat /proc/00000/status

Thread 부분 카운트 확인


시스템 에 설정된 최대 쓰레드 수 확인

cat /proc/sys/kernel/threads-max



Posted by 해비
2016. 1. 28. 21:58

엑셀 파일을 열고 데이터를 가져오는 것 까지 정리합니다.



절차는 크게 보면 아래 와 같습니다.

1. 파일열기

2. 시트목록 추출

3. 해당시트로 부터 데이터 추출




1. 파일열기

            openDlg1.FileName = "";

            // 변수선언

            string sFileName = "";

            OleDbConnection oleConn = new OleDbConnection();



            // 파일 읽기 다이얼로그 호출. 결과가 취소인 경우 여기서 실행을 멈춘다.

            if (this.openDlg1.ShowDialog() == DialogResult.Cancel)

            {

                return;

            }



            // 파일 읽기 다이얼로그로 부터 파일경로 획득

            if (!this.openDlg1.FileName.Equals(""))

            {

                sFileName = openDlg1.FileName;

            }

            else

            {

                return;

            }



            // xlsx와 xls의 연결 방법이 다르므로 구분하여 적용.

            if (sFileName.IndexOf("xlsx") >= 0)

            {

                // 여기서 오류 날 경우, 오피스 2007 시스템 드라이버를 설치한다.

                // https://www.microsoft.com/ko-kr/download/details.aspx?id=23734


                oleConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + sFileName + @";Extended Properties=Excel 12.0";

            }

            else

            {

                oleConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + sFileName + "; Extended Properties=Excel 8.0;";

            }



            // 오픈~

            oleConn.Open(); 

- openfiledialog 를 사용하여 파일을 선택한다.

- 코드 내 주석에도 있지만, Open() 시 컨넥션 스트링 어쩌고 오류나는 경우가 있다. https://www.microsoft.com/ko-kr/download/details.aspx?id=23734 주소로 부터 시스템 드라이버를 다운받아 설치한다.




2. 시트목록 추출

            // 시트가 여러개 존재할 경우 모든 시트 목록을 만든다.

            DataTable sheetListDT = oleConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

            string sheetName = "";


            // 시트 목록 돌면서 처리할 내용이 있다면 추가한다. (예: 특정 단어가 포함된 시트 제외 한다던가 뭐 그런 것들...)

            for (int i = 0; i < sheetListDT.Rows.Count; i++)

            {

                // 시트명 표시

                //sheetName = sheetListDT.Rows[i]["TABLE_NAME"].ToString();

                //MessageBox.Show(sheetName);


                // sheetListDT.Rows[i].Delete(); // 예: 시트 제거


            }


            // 변경 내용 반영

            sheetListDT.AcceptChanges(); 

- 시트 목록을 구한다. 일부 필요없는 시트가 있다면 여기서 걸러낸다.




3. 시트로 부터 데이터를 조회

            // 시트로 부터 데이터 조회

            //DataSet tmpDS = new DataSet();

            string sqlStr = "";

            for (int i = 0; i < sheetListDT.Rows.Count; i++)

            {

                sheetName = sheetListDT.Rows[i]["TABLE_NAME"].ToString();

                sqlStr = "SELECT * FROM [" + sheetName + "]";


                OleDbCommand oleCom = new OleDbCommand();

                oleCom.CommandType = CommandType.Text;

                oleCom.CommandText = sqlStr;

                oleCom.Connection = oleConn;


                OleDbDataAdapter oleAdt = new OleDbDataAdapter();


                oleAdt.SelectCommand = oleCom;


                DataTable tmpDT = new DataTable();


                oleAdt.Fill(tmpDT);


                tmpDT.TableName = sheetName;


                //tmpDS = StringMerge(tmpDS, tmpDT, 10);

                dataGridView1.DataSource = tmpDT;

            } 

- 테이터를 DataTable 에 채워 넣는다.

- dataGridView 컨트롤에 뿌리는 것으로 샘플코드는 종료~!!






결과 샘플


실행 예



사용된 엑셀 데이터







Posted by 해비
2015. 11. 16. 21:51


openvpn 을 인증서 로그인 기반의 경우, 인증서 파일 key, crt 를 함께 넣어야 하는데 이거 은근히 귀찮다.


그리고 openvpn access server (?) 형태로 웹에서 ovpn 을 내려받아 사용하고자 하는경우는 반드시 해야 하는 것이기도 하다.


기 설정된 ovpn 파일의 맨 아래에 아래 내용을 추가한다.



<ca>

-----BEGIN CERTIFICATE-----

...(인증서 데이터)

-----END CERTIFICATE-----

</ca>


<cert>

-----BEGIN CERTIFICATE-----

...(인증서 데이터)

-----END CERTIFICATE-----

</cert>


<key>

-----BEGIN PRIVATE KEY-----

...(사용자 개인키 데이터)

-----END PRIVATE KEY-----

</key>


key-direction 1 



끝~


ca.crt, user.crt, user.key 파일 내용 중 BEGIN ~ END 로 끝나는 부분이 있는데 이 부분만을 복사하여 위와 같은 형태로 만들어 ovpn 제일 밑에 넣어주면 끝~

Posted by 해비