(10101101)173/UNIX2009. 4. 26. 12:40
위치 설명
/etc/passwd passwd파일 안에는 사용자의 계정정보가 생성됩니다. 로그인 요청시 가장먼저 읽어집니다.
root권한 사용자는 변경이 가능하지만 일반 사용자는 변경이 불가능 합니다.
/etc/shadow shadow파일 안에는 사용자의 패스워드가 등록됩니다.
root권한 사용자라도 변경은 추천하지 않습니다.
/etc/group group파일 안에는 사용자의 그룹이 생성됩니다.
/home home밑에 사용자의 홈디렉토리가 생성됩니다.
useradd로 사용자의 계정을 생성하게 되면 위 파일 및 폴더에 해당 사용자의 정보가 갱신 됩니다. 이 외에도 다른 파일들이 있습니다.

[그림 1. 생성할 계정에 존재유무 확인]

구지 할 필요는 없지만 한 스크린샷에 계정생성 유무를 한번에 표현하기 위해 추가할 계정을 확인을 해 보았습니다. 현제 passwd, shadow, group 파일과 home 디렉토리 밑에 추가하려는 "testAcc"계정은 존재하지 않습니다. 이는 빨간색 박스안에 표시되어 있습니다. 회색 박스에서 useradd명령으로 testAcc계정을 추가해 줬습니다. 노란색 박스에 보면 passwd, shadow, group파일과 home 디렉토리 밑에 추가한 testAcc계정이 보이게 됩니다.

노란색 박스안에 빨간밑줄은 passwd파일에담긴 testAcc계정 정보 입니다. 콜론( : )으로 정보가 구분되어 있습니다.
정보 설명
testAcc 계정명
x 패스워드
501 UID
501 GID

사용자 정보
/home/testAcc  홈 디렉토리 위치
/bin/bash 사용하는 쉘
[표 1. passwd파일 정보]

사용자 정보 부분이 비어있는 이유는 useradd명령어로 계정을 추가할때 계정정보를 입력하지 않아서 입니다. 또 shadow파일을 사용하기 때문에 패스워드가 x로 나오게 됩니다. shadow파일을 사용하지 않을경우 shadow파일에 입력될 MD5값이 들어가게 됩니다.

회색밑줄은 shadow파일에 담긴 testAcc계정 정보 입니다. passwd와 마찬가지로 콜론으로 정보가 구분되어 있습니다.
정보 chage 명령 옵션 설명
testAcc 계정명
!!
패스워드
14360 chage ID -d [n] 최종 암호 변경일로 마지막으로 패스워드를 변경한 날짜가 저장 됩니다.
패스워드 에이징을 위한 기준날짜가 됩니다.
0 chage ID -m [n] 암호변경 최소 일수로 마지막 암호 변경일을 기준으로 입력된 일수가 지난후에만
패스워드 변경이 가능합니다.
99999 chage ID -M [n] 암호변경 최대 일수로 마지막 암호 변경일을 기준으로 현재 사용중인 암호를
변경하지 않고 사용할 수 있는 일수입니다.
7 chage ID -W [n] 암호변경 경고 일수로 암호변경 최대 일수로부터 암호 변경 메시지를 출력할
남은 일수입니다.

chage ID -I(대문자 i) 설정된 날짜까지 사용자가 로그인하지 않을경우 사용자계정이 잠기게 됩니다.

chage ID -E [n] 사용자가 마지막으로 시스템을 사용할 수 있는 날자입니다.

예약공간으로 현재 사용하지 않습니다.
[표 2. shadow파일 정보 n값은 일반 정수입니다.]

여기서 기간정보가 숫자로만 입력되어 있는대 이 기간에 기준일은 1970년 01월 01일부터 계산한 날짜입니다. 패스워드 부분이 MD5값이 아니라 느낌표 두개(!!)가 입력되어 있는대 이 이유는 아직 계정패스워드를 설정해 주지 않았기 때문입니다. 이에 대한 정보를 좀더 쉽게 보는 방법이 있는대 위에 같이 설명된 chage명령어 입니다. chage명령어는 패스워드에 옵션을 수정합니다.
[그림 2. 패스워드 입력]

[그림 3. chage명령어로 계정에 비밀번호 정보 확인]

[그림 4. chage명령어로 암호변경 최소 일수 변경]

처음에 /etc/shadow파일을 확인해 본 결과 빨간밑줄에 암호변경 최소 일수가 0임을 확인할 수 있습니다. chage명령어로 1일 이라고 지정하고 다시 확인해 보면 노란밑줄과 같이 암호변경 최소 일수가 1로 바뀌어져 있습니다.

그림 1에 하늘색밑줄은 group파일에 담긴 testAcc계정의 그룹정보 입니다. passwd파일과 마찬가지로 콜론으로 구분됩니다.
그룹명 (testAcc) : 패스워드(x) : GID(501) : 멤버1, 멤버2 ...

/etc폴더 밑에 보면 shadow파일 뿐만 아니라 gshadow파일이 또 있습니다. 이 파일은 그룹의 실질적인 패스워드가 암호화되어 저장되는 파일입니다.

조금더 세부적으로 계정을 등록해 보도록 하겠습니다.
[root@FC10VM /]# useradd -d /home/testAcc/testAccSub -u 5011 -s /bin/csh -c Tester -e 2009-04-27 -p 135792468 testAccSub
[표 3. 세부적으로 계정 등록]

[그림 5. 계정 등록 확인]

옵션 설명
-d /home/testAcc/testAccSub 홈 디렉토리를 설정합니다.
-u 5011 UID를 5011로 지정합니다.
-s /bin/csh 기본적으로 사용할 쉘종류를 지정합니다.(C쉘)
-c Tester 사용자 정보 입니다.
-e 2009-04-27 계정사용 종료일자를 지정합니다.
-p 135792468 기본 패스워드를 지정합니다.
testAccSub 새성할 계정명
[표 4. 세부적으로 계정 등록 설명]


Posted by Special Alex
(10101101)173/UNIX2009. 4. 24. 22:30
[root@FC10VM /]# tcpdump -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
20:10:39.390154 IP 192.168.58.129.ssh > 192.168.58.1.ncpm-hip: P 972341137:972341253(116) ack 2298354861 win 10704
20:10:39.397734 IP 192.168.58.1.ncpm-hip > 192.168.58.129.ssh: . ack 116 win 6483(116) ack 2298354861 win 10704
. . .

[표 1]

덤프내용을 엄청난 라인에 텍스트들로 지나가게 됩니다. 너무빨리 지나가기 때문에 어떤 패킷이 어떤 패킷인지 알아볼 수 없기 때문에 덤프뜬 내용을 파일화 할 수 있습니다. "-i"옵션은 장치명을 지정하기 위해 사용됩니다.
[root@FC10VM /]# tcpdump -i eth0 -w tcpdump.log
tcpdump: listening on eth0, link-type EN10MB(Ethernet), capture size 96 bytes
^C7 packets captured
9 packets received by filter
0 packets dropped by kernel

[표 2]

파일화를 중단하고 싶을때 ^C(Ctrl + C)를 눌러 중단하면 덤프한 패킷의 정보가 간단하게 나옵니다. 만약 이 파일을 strings명령어나 cat명령어로 읽어보면 다음과 같은 화면은 만나실지도 모릅니다.

[그림 1. cat tcpdump.log]

[그림 2. strings tcpdump.log]

이런일을 미연에 방지해 보고자 file 명령어로 파일을 확인해 보면
[root@FC10VM /]# file tcpdump.log
tcpdump.log: tcpdump capture file (little-endia) - version 2.4 (Ethernet, capture length 96)
[표 3]

위와같이 tcpdump의 capture파일이라고 나오게 됩니다. 이말은 tcpdump로 읽어봐야 한다는 말입니다. 그래서 tcpdump로 읽어보도록 하겠습니다.

[root@FC10VM /]# tcpdump -r tcpdump.log
reading from file tcpdump.log, link-type EN10MB (Ethernet)
20:15:45.137596 IP 192.168.58.129.ssh > 192.168.58.1.ncpm-hip: P 972393857:972393909(52) ack 2298357693 win 10704
20:15:45.137614 IP 192.168.58.1.ncpm-hip > 192.168.58.129.ssh: . ack 52 win 64183
. . .
[표 4]

그러면 tcpdump.log파일에 내용이 저상적으로 보이는대 단순하게 ASCII로 읽어들인 헤더 정보일뿐 특별한 의미가 잇어 보이지는 않습니다. 때문에 옵션을 -Xqnr로 바꿔서 입력해 보도록 하겠습니다. 색다른 화면을 만나게 됩니다.
[root@FC10VM /]# tcpdump -Xqnr tcpdump.log
reading from file tcpdump.log, link-type EN10MB (Ethernet)
20:15:45.137596 IP 192.168.85.129.ssh > 192.168.58.1.ncpm-hip: tcp 52
0x0000: 4510 005c bb45b4000 4006 8973 c0a8 3a81  E..\.E@.@..s..:.
0x0010: c0a8 3a01 0016 0693 39f5 8d81 88fe 27bd  ..:.....9.....'.
. . .
[표 5]

[그림 3. -Xqnr tcpdump.log]

"-r" 옵션으로 단순하게 ASCII로 패킷의 헤더정보만 읽어오는 반면 -Xqnr옵션은 덤프된 내용을 HEX형식으로 보여주게 됩니다. 이번에는 좀더 세부적인 옵션을 줘서 패킷을 덤프하도록 하겠습니다.

[root@FC10VM /]# tcpdump -w tcpdump.log -s 1500 tcp port 22
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 1500 bytes
^C156 packets captured
158 packets received by filter
0 packets dropped by kernel
[표 6]

"-s 1500" 옵션은 덤프할 패킷의 길이로 MTU[각주:1]값을 말합니다. 실제로 적용되는 효과는 1500 bytes 길이로 덤프입니다.
이 옵션을 주지않으면 표 1번에 세번째 줄과 표 2번에 두번째 줄과 같이 다른 값으로 덤프됩니다.
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
"tcp port 22" 옵션은 덤프할 대상의 포트(프로토콜)를 지정한 것으로 tcp 22번 포트로 송수신되는 데이터를 덤프하게 됩니다. 포트외에 호스트도 지정이 가능하며(host 192.168.58.129) 호스트와 포트를 같이 지정해 덤프를 할수도 있습니다.(tcp port 22 and host 192.168.58.129)
"-c 10" 옵션은 사용되지 않았지만 사용할 경우 덤프할패킷의 겟수를 지정하기 때문에 처음과 같이 끝도없이 내려가는 텍스트를 만나지 않고 10개가 덤프된 화면을 보실 수 있습니다.

옵션 설명
-a Network & Broadcast 주소들을 이름으로 바꿉니다.
-b protocol 지정된 Data Link 계층의 프로토콜을 사용하는 패킷을 덤프합니다.
ip, ipv6, arp, rarp, ipx, x.25, 802.2 등이 있습니다.
-d Packet-matching code를 쉽게 읽을 수 있도록 표준 출력으로 출력합니다.
-dd Packet-matching code를 C program의 일부로 출력합니다.
-ddd Packet-matching code를 숫자로 출력합니다.
-e Link-Level 헤더를 출력합니다.
-f
-F file 필터 표현의 입력으로 지정한 파일을 받아들입니다.
-l Line buffering합니다. 즉 다른 프로그램에서 tcpdump에 데이터를 받고자 할때 유용합니다.
-n DNS주소로 번역하지 않습니다.(포트 등)
-N 호스트 이름 출력시 도메인을 출력하지 않습니다.
-O Packet-matching code optimizer를 실행하지 않습니다.
-p 인터페이스를 Promiscuous mode로 두지 않습니다.
-q 프로토콜 정보를 일부 생략하여 출력합니다. 때문에 라인이 좀 짧아집니다.
-T type 명시된 형식으로 표시하게 됩니다. 명시된 형식은 다음과 같습니다.
rpc : Remote Procedure Call
rtp : Real-Time Applications Protocol
rtcp : Real-Time Application Control Protocol
vat : Visual Audio Tool
wb : distributed White Board
-S TCP sequence번호를 상대번호가 아닌 절대번호로 출력합니다.
-t 시간출력을 생략합니다.
-tt 형식이 없는 시간을 출력합니다.
-v (Verbose)좀더 자세한 덤프정보가 출력됩니다.
-vv -v보다 자세한 덤프정보가 출력됩니다.
-x -X일 경우 HEX값을 ASCII코드로 보여주지만 -x일 경우 HEX값만 보여지게 됩니다.
[표 7. tcpdump에 다른 옵션들]



  1. Maximum Transmission Unit : 물리적 전송매체에서 전송 가능한 데이터의 최대 단위를 말하는 것으로 최대값은 1500입니다. 단위는 Byte단위 이며 이보다 큰 파일은 MTU사이즈에 맞게 잘라서 보내게 됩니다. [본문으로]
Posted by Special Alex
(10101101)173/UNIX2009. 4. 5. 19:24
shutdown 명령어를 제외한 다른 시스템 종료 명령어들은 옵션이 있어도 특별하게 사용하지를 않습니다.

1. reboot, halt로 종료 (/sbin/reboot)
페도라에서 reboot과 halt는 같은 도움말(man reboot, man halt)를 사용합니다. 그래서 그런지 사용하는 옵션도 동일합니다. 4가지에 옵션을 가지고 있으며 그다지 필요성을 못느끼는 옵션들입니다.

옵션 설명
-n reboot, halt명령시 sync처리가 없으며 -d 옵션을 동반함
-w reboot, halt명령이지만 실행하지 않고 /var/log/wtmp파일에 기록만 남김
-d wtmp파일에 기록을 하지 않음
-f shutdown을 호출하지 않고 halt, reboot함

여기서 특별하게 설명될만한 옵션은 두가지가 있습니다 -n과 -f옵션 입니다.
-n 옵션은 sync처리 즉 메모리에 내용을 디스크에 기록하는 부분입니다. 이런 기록관련 처리들이 생략되다보니 -d 옵션에 wtmp파일 기록도 생략 됩니다.
-f 옵션은 "shutdown -n" 과 동일한 명령으로 보면 됩니다.

그리고 reboot이나 halt는 사실상
[root@FC10VM /]# shutdown -r now
[root@FC10VM /]# shutdown -h now
위에 두 명령어와 다를바가 없습니다.

[그림 1. reboot명령]

[그림 2. reboot명령 이후 종료과정]

[그림 3. 다른곳에서 접속되어 있던 root계정의 접속 종료]

[그림 4. Reboot하는 페도라]

앞서 설명한 바와 같이 halt명령어도 reboot과 다를바 없습니다.

[그림 5. halt명령 이후 접속되어 있던 root계정의 접속 종료]

reboot명령으로 인해 접속이 종료되었다가 다시 접속을 했습니다. 그상태에서 다시 halt명령이 전달되자 접속이 종료되었습니다. 차이가 있다면 그림 1번에 맨 마지막줄 "The system is going down for reboot NOW!"부분에 reboot이 halt바뀐점 밖에 없습니다. 


2. poweroff로 종료 (/sbin/poweroff)
poweroff 명령어도 -fnhip 옵션을 가지고 있지만 poweroff 명령을 잘 사용하지도 않지만 사용시 거의 옵션을 사용하지 않고 사용됩니다.


3. init으로 종료
init은 0 ~ 6번 까지의 실행레벨을 가지고 있습니다. 이중 종료 레벨은 0번이고 reboot레벨은 6번 입니다. 간단하게 init을 설명하자면 다음과 같습니다.
레벨 설명
0 시스템 종료로 shutdown -h now와 동일합니다.
1 싱글모드(관리모드)로 슈퍼유저(root)만이 사용 가능합니다.
2 NFS를 지원하지 않는 멀티유저 실행레벨
3 NFS를 지원하는 멀티유저 실행레벨
4 사용자 지정 실행레벨
5 X윈도우 환경에 멀티유저 실행레벨
6 재부팅으로 shutdown -r now, reboot과 동일합니다.

실행하는 방법은
[root@FC10VM /]# init [0123456]
필요한 런레벨의 숫자 하나만 입력하면 됩니다.

Posted by Special Alex