2012년 7월 25일 수요일

[.net] FileInfo 클래스를 이용한 파일 복사 프로그램

using System;
using System.IO;
public class csCopy
{
        public static void Main (String[] args)}
        {
                if (args.Length != 2)
                {
                        Console.WriteLine (" Using : csCopy src_filename dest_filename ");
                        return;
                }
                if (!File.Exists (args[0].ToString ()))
                {
                        Console.WriteLine ("{0} does not exist!", args[0].ToString ());
                        return;
                }
                if (File.Exists (args[1].ToString ()))
                {
                        Console.WriteLine ("{0} already exists!", args[1].ToString ());
                        return;
                }
               
                FileStream fsIn = new FileStream
                        (args[0].ToString (), FileMode.Open, FileAccess.Read, FileShare.Read);
                BinaryReader br = new BinaryReader (fsIn);
                FileStream fsOut = new FileStream (args[1].ToString (), FileMode.CreateNew);
                BinaryWriter bw = new BinaryWriter (fsOut);
                while (br.PeekChar () > -1)
                        bw.Write (br.ReadByte ());
                br.Close ();
                bw.Close ();
                fsIn.Close ();
                fsOut.Close ();
        }
}

[.net] 현재 디렉토리의 파일 리스트 보여주기

using System;
using System.IO;
class csDir
{
        public static void Main (String[] args)
        {
                DirectoryInfo dir = new DirectoryInfo (".");
                Console.WriteLine ("\n 현재 디렉토리는 {0} 입니다.", dir.FullName);
                Console.WriteLine
                  ("========================================================\n");
                foreach (FileInfo f in dir.GetFiles ("*.*"))
                {
                        String name = f.Name;
                        long size = f.Length;
                        DateTime creationTime = f.CreationTime;
               
                        Console.WriteLine ("{0, -12:N0} {1, -20:g} {2}",size, creationTime, name);
                }
        }
}

Windows NT (Backups)


Q1 . 윈도우 NT 에서 어떤 backup 소프트웨어를 사용할 수 있는가?
A . 기본적이기는 하지만 대부분의 설치된 사항을 Backup할 수 있는 Ntbackup.exe를 Windows NT는 포함하고 있다. 보다 크고 복잡한 사양의 Backup을 위해서는 다음의 사항을 고려할 만 하다.
- ASDM from http://www.storage.ibm.com/software/asdm/index.htm
- ARCserverIT from http://www.cai.com/arcserveit
- Back Again II from http://www.cds-inc.com/
- Backup Exec from http://support.veritas.com/index_bottom_Product_Cat_Backup_Exec.htm
- Backup express from www.syncsort.com
- Legato Network from http://www.legato.com
- OpenView Omniback from http://www.hp.com
- Replica from http://www.stac.com/replica/
- Retrospect 5.0 from http://www.dantz.com
- UltraBac from http://www.ultrabac.com
Q2 . Tape drive 를 어떻게 추가할 수 있나?
A . Tape drive를 추가하기 전에 , Tape drive 가 장착될 카드에 올바른 SCSI 드라이버가 설치 되었는지 확인하여야 한다. SCSI 드라이버가 설치된 후 다음의 사항에 따른다.
1. 제어판의 Tape device applet을 실행한다.( 시작 ? 설정 ? 제어판 - 테이프 장치)
2. Tape drive 를 검색하기 위해 검색 버튼을 클릭한다. 이 사항이 동작하면 5단계로 간다
3. 드라이브가 검색되지 않으면, 드라이버 탭을 누른다.
4. 추가 버튼을 누르고 리스트에서 장착될 테이프 장치를 선택, 혹은 ‘디스크 있음’ 버튼을 누르고 드라이버의 위치를 지정한다.
5. OK 버튼을 클릭한다.
6. Computer 를 재 부팅한다.
Q3 . NTBACKUP.EXE 는 어떠한 타입의 백업을 지원하는가?
A . NTBACKUP.EXE는 5가지의 서로다른 백업타입을 지원한다.


백업형식
마커 찾기
마커 지우기
백업 결과
보통
(Nomal)
아니요
선택된 모든 파일과 폴더를 백업한다. 가장 완벽한 백업이고 복원은 간단하지만, 그러나 생성하는데 오래걸린다.
복사
아니요
아니오
선택된 모든 파일과 폴더를 복사한다.
차등
(Differential)
아니요
마지막 보통 백업 이후에 변경된 파일들을 백업한다. 보통 백업을 생성하고, 그 다음주에 차등 백업을 수행하고 그 다음에 다른 차등 백업을 수행했다면, 보통 백업과 보통 백업 이후에 변경된 모든 파일을 담고 있는 2번째 백업을 사용하여 모든 데이터를 복원할 수 있다. 이 예에서 2번재 백업은 사용하지 않아도 된다.
증분
(Incremental)
가장 최근에 보통 또는 증분 백업이후 변경된 모든 데이터를 백업한다. 보통 백업을 생성하고 다음주에 증분 백업을 수행하고, 그 다음에 2번째 증분 백업을 수행했다면 데이터를 수행하기 위해서는 3개 모두 백업 데이터가 필요하다.
매일
(Daily)
아니오
하루 동안에 변경된 모든 파일과 폴더를 백업한다.

아카이브 비트(archive bit) - 파일이 만들어 지거나 편집될떼 파일에 적용되는 숨겨진 파일속성을 의미 하며,아카이브 비트는 백업이나 복사 유틸리티에게 "이봐. 이파일이 변경되었었어" 라고 알려 주는 데 사용된다. 아카이브 비키를 재설정 하면 파일에서 아카이브 비트가 제거되고, 비트를 설정하면 비트가 추가 된다.
Q4 . 어떠한 백업 정책이 유용한가?
A . 다음과 같은 백업 정책이 주간 백업 정책으로 유효하다. 월요일 : Incremental Backup
화요일 : Incremental Backup
수요일 : Incremental Backup
목요일 : Incremental Backup
금요일 : Normal Backup


알다시피 : Incremental Backup 은 마지막 백업 이후 변화한 파일들만을 백업한 후 표시를 하므로, 이 방식의 백업이 매우 빠르다. 데이터 파손의 경우에 normal backup을 먼저 restore 한 후 순차적으로 Incremental Backup을 restore 한다.
다른 정책은 다음과 같다.
월 : Differential Backup
화 : Differential Backup
수 : Differential Backup
목 : Differential Backup
금 : Normal Backup

differential backup 이 file에 백업표기를 하지 않는 것을 제외하고는 differential backup과 incremental backup이 동일하다. 그러므로 월요일에 백업한 파일이 여전히 다른 요일에 백업 된다. 따라서 백업을 복구하기 위해 normal backup을 복구한 후 가장 최근의 differential backup을 복구하면 된다.
일주일 분량의 테이프를 보유 하는 것도 중요하지만, 4일 주기로 10개의 테이프를 순환시켜 가며 사용하는 것 역시 중요하다
백업은 여러 가지 백업 타입을 혼용해 사용함으로써 효과적이고 시간을 절약할 수가 있다. 수립하는 백업 전략에 따라 백업하는 데 시간이 걸리면 복원할 때에 시간이 덜 걸리며, 또는 이와 반대의 경우가 된다. 다음의 실례를 참조 하도록 한다.
실례1: Normal 과 Differential 백업을 사용한 경우
월요일에 Normal 백업을 하고 화요일부터 금요일 까지는 Differential 백업을 하는 경우이다. Differential 백업은 backup marker를 세팅하지 않기 때문에 각 요일마다 하는 Differential 백업은 월요일 이후에 일어난 모든 갱신 데이터를 백업하게 된다. 그러므로 금요일에 문제가 생긴 경우에는 이를 복원하려면 월요일의 Normal 백업 테이프와 목요일의 Differential 백업 테이프로 복원하면 된다. 이 전략은 백업하는 시간은 걸리나 복원하는 시간을 줄일 수 있는 방법이다.
실례2: Normal 과 Incremental 백업을 한 경우
월요일에 Normal 백업을 하고 화요일부터 금요일 까지는 Incremental 백업을 하는 경우이다. Incremental 백업은 backup marker를 세팅하기 때문에 각 요일 마다 하는 백업은 그 전날 이후에 갱신된 데이터만 백업하기 때문에 백업 분량이 그렇게 많지 않다. 금요일에 문제가 발생했을 경우에 이를 복원하기 위해서는 월요일의 Normal백업 테이프와 화,수,목의 Incremental 백업 테이프로 복원한다. 이 전략은 백업하는 시간을 덜 걸리나 복원하는 데에는 다소 시간이 걸린다.
실례3: Normal, Differential 과 Copy백업을 한 경우
이 전략은 수요일을 Copy백업을 하는 것을 제외하고는 실례1과 같은 경우이다. Copy백업은 backup marker를 세팅하지 않기 때문에 백업 스케쥴에 영향을 주지 않으며 대신에 수요일에 현재 상태의 데이터에 대한 snapshot를 Copy 백업으로서 가져가는 전략이다.
(참조 사이트 : http://any.to/dondeboy)
Q5 . NTBACKUP.EXE 의 사용시 가능한 옵션은?
A . Ntbackup을 실행하면 컴퓨터의 모든 드라이브가 나타난다. 모든 드라이브를 선택하거나 더블 클릭으로 드라이브를 선택하고 디렉토리를 선택할 수 있습니다. 드라이브나 디렉토리를 선택한 후 백업 버튼을 클릭한다. 백업의 수행에 있어 기재되어야 할 몇 가지 사항이 있다.
1.Current Tape : 투입된 Tape의 이름. 이 사항은 수정할 수 없다.
2.Creation Date : 원본 백업이 생성된 일자. 이 사항은 수정할 수 없다.
3.Owner : 테이프의 소유권. 이 사항은 수정할 수 없다.
4.Tape name : 백업을 설명하는 32 문자
5.Operation Append / Replace : append 를 선택하면 새로운 saveset이 테이프의 후미에 기록된다.
6.Replace를 선택할 경우 현 테이프의 모든 정보가 overwrite 된다.
7.Verify after backup : 이 사항을 한번 선택하면 디스크의 사항과 비교하여 테이프에 기록된다.
8.Backup Local Registry : 컴퓨터의 local registry를 백업한다. 원격 컴퓨터의 레지스트리를 백업할 수 는 없다.
9.Restrict Access to owner or Administrator : 이 사항을 선택하면 테이프는 보호된다. 테이프의 소유권자, Administrator 그룹의 users 혹은 Backup Operator 그룹만이 이 테이프에 접근가능하다
Q6 . Ntbackup을 명령어 라인에서 사용이 가능한가?
A . Ntbackup은 아래와 같은 형태로 명령어 라인에서 사용이 가능하다. Ntbackup < path> /a /b /d “text” /e /hc: /l “” /r /t /tape:n /v
parameter는 다음과 같은 뜻을 지닌다.
백업을 수행한다.
백업을 수행하고자 하는 드라이브와 디렉토리를 나타낸다
/a 테이프의 후미에 backup set를 첨부한다.
/b Local 레지스트리를 백업한다.
/d “text” 테이프를 명시한다.
/e 예외사항에 대한 로그를 남긴다.
/hc: /hc :on 이 설정되어 있으면, 하드웨어 압축이 사용된다.
/l “” 로그파일에 대한 위치와 이름을 나타낸다
/r 접근을 제외한다.
/missingtape set이 여러 개의 테이프로 나뉘어 있을경우 빠진 테이프를 확인한다
/t 백업의 유형을 결정한다
/tape:n 어떠한 테이프 드라이브를 사용할 것인가.
/v 백업후 백업된 데이터 세트를 검증한다.
Q7 . 어떻게 명령 일정을 잡을것인가? 를 참조한다. (윈도우 2000)
A . 스케줄러 서비스가 실행된 후 , ntbackup.exe이미지를 이용한 백업 명령이 가능하다.
(Image는 실행 명령을 의미한다.)
at 22:00 /every:M,T,W,Th,F ntbackup backup d: /v /b
위의 명령구는 local registry의 확인과 함께 D: 드라이브의 주중 야간 10시에 백업하는 것을 스케줄로 잡는 것을 의미한다.
스케줄링에 있어 문제가 있을 경우, /interactive 스위치를 사용하여 문제 발생시에 백업 프로그램과 상호 연동할 수 있다.

Windows 2000 에서는 스케줄 관리가 쉽음
Windows 2000 Backup 프로그램은 백업을 Task Scheduler service를 이용해 특정 시간에 주기적으로 할 수 있다. 스케줄 백업을 하기 위해서는 다음과 같은 작업을 해야 한다.
Task Scheduler를 시작한다. 동작 중이지 않을 경우에는 Set Account Information 대화창이 뜨고 이를 시작하도록 한다. Task Scheduler 서비스는 백업을 수행하기 위한 사용자 계정과 암호를 입력하도록 하며, 이 때의 계정과 암호는 백업할 파일과 폴더에 대한 유효한 퍼미션과 권한이 있어야 한다.
백업 마법사는 수행하고자 하는 백업 작업에 대한 이름을 입력하도록 한다. 디폴트로는 시작하는 날에 현재 날짜와 시간을 디스플레이 한다.
백업 마법사에서 Set Schedule 을 체크하여 시작 날짜와 시간을 달리 준다. 이는 Task Scheduler가 Schedule Job대화창을 불러 오도록 한다.
Schedule Job에서 사용자는 날짜와 시간 그리고 주기적으로 반복할 회수를 설정한다. 예를 들면, 매주 금요일 밤 10:00 PM 과 같이 설정할 수가 있다. Show Multiple Schedules 체크박스를 선택하면 현재 예정된 태스크를 전부 디스플레이 한다. 여기서 같은 시간에 중복되는 태스크가 있는 지를 확인해서 중복을 피해야 한다.
Q8 . 백업을 어떻게 복구하는가?
A . 백업 saveset을 복구하는 것은 간단하다. 단지 basics가 무엇인가가 문제가 아니라, 무엇이 백업되어 있는가에 달려있다. 1. (시작 ? 관리도구 - 백업) NTBACKUP 을 실행한다.
2. 백업 saveset이 담겨 있는 테이프를 더블클릭 한다.
3. saveset이 NTFS 볼룸에서 백업된 것이라면 복구권한을 파악한다.
4. OK 를 클릭한다.
Q9 . 열려있는 파일들을 어떻게 백업할 수 있는가?
A . 때때로 열려있는 파일을 백업하려고 하거나 복구하려고 할 때에 백업 프로그램이 정지된다. 열린 파일의 백업 시에 NTBACKUP을 정지하기 위해서는 다음의 사항을 따른다. 1. 레지스트리 편집기를 시작한다.
2. HKEY_CURRENT_USER\SOFTWARE\MICROSFT\NTBACKUP ENGINE
3. 사용중인 Backup files에 체크한다.
4. 레지스트리 편집기를 닫는다.
사용중인 백업파일이 있을 경우 1로 설정하고 다음의 파라미터를 설정한다.
HKEY_CURRENT_USER\Software\Microsoft\Ntbackup\User Interface\skip open files 이 사항에 대한 값은
0 : 이 파일을 건너뛰지 않는다. 이 파일이 백업될 때 까지 대기한다.
1 : 열려있거나 읽을 수 없는 파일은 건너뛴다.
2. wait time 동안 해당 파일을 닫을 때 까지 대기한다. ( wait time 은 또 하나의 레지스트리 값이다.) 더 자세한 정보는 Q159218 을 참조하시오.
(http://support.microsoft.com/support/kb/articles/q159/2/18.asp )
변형없이 열려있는 파일을 백업하기 위해서는 http://www.stbernard.com 의 open file manager 소프트웨어를 참조하시오. 15일 trial 버전으로 다운로드 사용가능 합니다.
Q10 . 레지스트리를 어떻게 백업할 수 있는가?
A . 대부분의 Registry Hive 는 open 되어서 정상적 방법으로는 백업이 불가능하지만, 가능한 몇가지 방법이 있다.
Nt에 부착된 테이프 드라이브가 있다면, 백업의 수행에 있어 Backup Local Registry 를 선택하므로서 레지스트리 전체의 백업이 가능하다.

Ntbackup은 원격의 레지스트리 백업이 불가능하다는 사실을 명심하라.
RDISK/S 는 %SystemRoot%의 복구 디렉토리에 레지스트리를 백업한다.
Rdisk는 Win2000에서는 더 이상 지원되지 않는다.
리소스킷에서 제공되는 REGBACK.EXE는 레지스트리를 구성하는 open file을 백업하지만, unopen 된 파일은 백업하지 못한다. 이는 XCOPY,EXE 혹은 SCOPY.EXE 를 통해 수동으로 가능하다.
레지스트리 복구용으로 사용되는 REGREST,EXE라는 utility가 있다.
디렉토리 d:\ regbackup에 레지스트리 백업을 위해서는 다음과 같이 한다. Regback d:\regback
REG.EXE는 리소스 킷의 최신버전이나 백업 옵션을 통해 제공된다. 예를 들어 REG BACKUP으로 레지스트리의 특정 섹션을 파일로 백업이 가능하다.
Win95가 그러한 것 처럼 NT도 old registry를 DA0로 자동 이름변경을 하지 않는다.하지만 RDISK와 응급복구디스크 utility를 사용하여 레지스트리의 최신 사본을 생성할 수 있다.또한 다음의 스크립트를 통하여 3개의 사본을 작성할 수 있다.
RE< REGBACK.BAT note : change M: to home directory on LAN
REM pkzip25 is a product of PKWARE, see www.pkware.com for details
Rdisk /s ?
If exist m:regback.old del m:regback.old
Ren m: regback.sav regback.old
Ren m : reback.zip regback.sav
Pkzip25 ?lev=0 ?add ?attr=all m:regback % systemroot%repair\*.*
Exit

자료출처: 신화정보통신

[C#] 이미 설치되어 있는 프로그램을 실행시키기

다음 명령어 하나만 버튼 클릭 이벤트에 넣어주면 됩니다.

System.Diagnostics.Process.Start("IEXPLORER.EXE", "http://www.cyber.pr.kr"); /> 이렇게 하면, 윈도우 익스플로러를 열어서, http:// www.cyber.pe.kr 홈페이지로 가게 됩니다.

2012년 7월 2일 월요일

Windows 터미널 서비스 보안

1. 중요한 데이터를 클라이언트에서 서버로, 그리고 서버에서 클라이언트로 전송되는 데이터를 128Bit로 암호화 하고 기본 윈도우 인증 체계를 사용하도록 설정하기.

제어판 > 관리 도구 > 터미널 서비스 구성 > 연결 > RDP-Tcp
(암호화 수준을 '높음'으로 수정하고, '표준 Windows 인증 사용' 체크)

2. 기본적인 터미널 서비스 포트 3389/tcp를 다른 포트로 변경하기.

내 컴퓨터\HKEY_LOCAL_MACHINE\SYSTEM\CurrnetControlSet\Control\Terminal Server\WinStations\RDP-Tcp

내 컴퓨터\HKEY_LOCAL_MACHINE\SYSTEM\CurrnetControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp

('PortNumber' 10진수에서 3386을 변경할 포트번호로 수정)

리눅스 시스템의 소프트레벨 커널 튜닝

# vi /etc/sysctl.conf

// ping 요청 무시
net.ipv4.icmp_echo_ignore_all=1

//소스 라우팅 차단
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.lo.accept_source_route=0
net.ipv4.conf.eth0.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0

// syncookies 설정
net.ipv4.tcp_syncookies=1

// ICMP redirect 차단
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.lo.accept_redirects=0
net.ipv4.conf.eth0.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0

// 로그 남김
net.ipv4.conf.all.log_martians=1
net.ipv4.conf.lo.log_martians=1
net.ipv4.conf.eth0.log_martians=1
net.ipv4.conf.default.log_martians=1

// 패킷 포워딩 차단
net.ipv4.ip_forward=0

/etc/sysctl.conf 파일의 변경 내용을 적용


# sysctl -p /etc/sysctl.conf

Solaris의 syslog.conf 설정


syslog.conf는 시스템에서 발생하는 정보들의 기록을 설정하는 파일이다.


** facility **

: 해당되는 객체로서 예를 들어 메일 / 유저 / 커널에 따른 어플리케이션으로 그 종류는 다음과 같다.

- kern : kernel에 의해 만들어진 메세지

- user : user process에 의해 만들어진 메세지

- mail : mail system에 의해 만들어진 메세지

- daemon : system daemon에 의해 만들어진 메세지 ex)in.telnetd

- auth : 인증시스템에 의해 만들어진 메세지 ex)login

- syslog : syslogd daemon에 의해 내부적으로 만들어진 메세지

- ipr : line printer spool system 에 의해 만들어진 메세지

- news : 뉴스 시스템에 의해 만들어진 메세지 *요즘엔 안씀*

- uucp : UNIX to UNIX copy system에 의해 만들어진 메세지 syslog fucntion 사용x

- cron : cron, at등에 의해 만들어진 메세지

- local0~7 : 사용자 정의를 위해 예약된 field

- mark : 잘사용하지 않는다.

* : mark를 제외한 모든 facility



** level **

: 객체에 대한 엄격도를 나타낸다.

등급 종류

- 0 emerg : 치명적인 상태로 일반적으로 모든사용자에게 알림

- 1 alert : 손상을 입은 시스템 데이터베이스와 같은 즉각적인 조치가 필요한 상태

- 2 crit : hard device 오류와 같은 치명적인 상태에 대한 알림

- 3 err : hard device 오류와는 다른 오류

- 4 warning : 경고메세지

- 5 notice : 특별한 조치가 필요로 하는 비오류 상태

- 6 info : 정보메세지

- 7 debug : 프로그램을 디버깅할때 사용되는 메세지

- 8 none : 특정 메세지를 제외시킬때 사용


** 0이 최상위, 8이 최하위 등급이다. **



** action **

: 객체에 대한 엄격도 정보가 기록되는 위치를 지정

- 파일경로 : /etc/syslog.conf

- 설정은 객체 와 action 으로 구성되고 객체는(facility&level)로 구성된다.

*  19번라인

- * : 모든 객체 , emrg : 치명적인상태 action : * -> 모든사용자

- 즉 시스템에서 사용하는 모든 객체가 치명적인상태가 될때 모든사용자에게 알린다.


* 17번라인

- 즉각적인 조치가 필요한 모든 객체에대한 정보를 루트에게 알린다.


* 16번라인

- *.alert;kern.err;daemon.err action : operater

- 모든 객체중에 즉각적인조치가 필요한경우 운영자에게 알리고 또 커널에 대한 오류// 데몬 오류 메세지 까지 운영자에게 알린다.

** 여기서 " ; " 세미콜론의 표시는 ~ 엄격도 이상을 나타날때 사용한다.

죽 *.alert;  는 모든객체의 엄격도 1번이상까지 즉 0번까지 알린다는것을 뜻한다.


* 13번라인

- /var/adm/meesages 파일 에 정보를 기록한다.



***** /var/adm 과 /var/run 의 차이점 *****

** /var/adm : 로그를 기록하는 디렉토리

                   - log : 과거부터 현재까지의 정보를 기록중인 data

** /var/run : 현재의 정보를 기록하는 디렉토리

Reentrancy Attack: 블록체인 스마트 컨트랙트의 치명적인 취약점

블록체인 기술이 전 세계적으로 주목받으면서 스마트 컨트랙트(Smart Contract)의 사용이 급격히 증가하고 있습니다. 하지만 그만큼 보안 취약점도 함께 늘어나고 있는데, 그 중에서도 Reentrancy Attack(재진입 공격)은 매우 치명적이고...