Linux passwd and shadow and group 에 대한 고찰 ?!

passwd  권한 644 (root:root)
root:x:0:0:root:/root:/bin/bash
test:x:1001:1002:,,,:/home/test:/bin/bash
[ID]:[PASSWD]:[UID]:[GID]:[GECOS]:[USERDIR]:[USERSHELL]
오래된 리눅스 or 유닉스는 PASSWD 칸이 직접 매겨져있다.
요즘은 PASSWD만 따로 shadow 파일로 만들어서 쓰는데
뭐 옛날에는 해싱을 못풀어서 패스워드파일이 공개되도 별 문제 없었다는데
이젠 개나소나 다푸니까 그거 자체도 보호해야된다 싶어서 일반유저는 읽을수도 없다나 뭐라나…
예를들어 test아이디는 암호가 shadow파일에 있으며 UID는 1001이며 GID는 1002이다 홈디렉토리는 /home/test 이며 쉘은 /bin/bash 를 쓴다  정도?
GECOS는 사용자 정보를 저장하는데
Full Name: Only
Room Number []: 105
Work Phone []: 010
Home Phone []: 055
뭐 이런거? 위대로 쓰니까 GECOS 에 Only,105,010,055 이렇게 들어가있네
passwd 파일을 변경시킬수있는 명령어들로는
adduser – 유저 생성시
deluser – 유저 제거시
usermod – 유저 변경시
chfn – GECOS 변경시
기타등등 (만들기나름이겠지뭐)
shadow  권한 640 (root:shadow)
root:!:14606:0:99999:7:::
test:$6$j9YC72KG$ysrTy/UpuPez62gWPp/P0.glzzGm9JnpKmQ3TDn1ab..uT8TvHEpv9.IISjdjhQut4CXgA.RieQtVAPtiLq0w.:14643:0:99999:7:::
 – 아이디
 – 해시된 패스워드
 – 마지막 패스워드 바꾼날짜
 – 패스워드 변경까지 남은기간 (최소)
 – 패스워드 변경까지 남은기간 (최대)
 – 패스워드 만료전 경고기간
 – 패스워드 만료후 사용 가능한 기간
 – 계정 만료일
 – 사용치 않음
패스워드를 중점적으로 관리하기위해 따로 떨어져나온 파일이다 랄까 ..
해시된 패스워드에 대해 자세히 쓰자면
$6$j9YC72KG$ysrTy/UpuPez62gWPp/P0.glzzGm9JnpKmQ3TDn1ab..uT8TvHEpv9.IISjdjhQut4CXgA.RieQtVAPtiLq0w
으잌 매우길다 ㅋㅋ ($는 토큰이다)
첫번째는 해시방법 0-DES, 1-MD5, 2-Blowfish, 5-SHA-256, 6-SHA512  (6이므로 SHA512로 되어있음을 알수있다)
두번째는 SALT – 사전파일크랙을 방지하기위해 암호문에 추가하는 문자열.
세번째는 해시된 문자열 (MD5라고해서 MD5형식이 아니다… 위 해시방법을 Base 로 조금 다른 해시방법)
passwd 명령어를통해 조작할수있다.
group  권한 644 (root:root)
root:x:0:root,test
test:x:1002:
[GROUP_NAME]:[GPASSWD]:[GID]:[USER_LIST]
이런형태이며
USER_LIST 에는 여러명의 유저가 들어갈수있으며 , 콤마로 구분된다.
변경할수있는 명령어들은
groupadd  groupdel  groupmod  이런거 ?!
gshadow도 있는데 잘 안쓰이며 위 shadow와 비슷하므로 넘어간다

VirtualBox 컴퓨터 켤때 자동으로 머신 돌리기

/etc/init.d/wsv

#!/bin/sh
user=”wsv”
PATH=/home/only/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
DESC=”Virtual Box Wsv”
NAME=wsv
SCRIPTNAME=/etc/init.d/$NAME
VM_NAME=”Wsv”
USERNAME=only
do_start()
{
su $USERNAME -c “VBoxManage startvm ${VM_NAME} -type headless”
}
do_stop()
{
su $USERNAME -c “VBoxManage controlvm ${VM_NAME} acpipowerbutton && sleep 5”
}
case “$1” in
  start)
        echo -n “Starting $DESC: $NAME”
        do_start
        echo “.”
        ;;
  stop)
        echo -n “Stopping $DESC: $NAME”
        do_stop
        echo “.”
        ;;
  restart|force-reload)
        echo -n “not support”
        ;;
  *)
        echo “Usage: $SCRIPTNAME {start|stop|restart|force-reload}” >&2
        exit 1
        ;;
esac
exit 0
뭐 이런식으로 ?
update-rc.d  wsv defaults 99 1
맞나? (제일먼저  켜지고 제일먼저 꺼지게 )
뭐 하여튼 지금 이렇게 씀.
acpid 설치 필수 (안그러면 안꺼져 -_-)

ssh 키 가지고 로그인하기

ssh-keygen -t rsa

하면 저장위치묻고
그 키파일의 패스워드(로그인정보와 무관)
을 묻는다
fingerprint가 출력되면 제대로 생성된것.
아마 저장위치가 기본값으로 USER/.ssh/ 로 되어있을텐데
거기가보면
id_rsa
id_rsa.pub
가 생성되어있을텐데
간단하게 pub 이놈이 자물쇠 역할 (공개키) id_rsa가 열쇠역활(비밀키) 을 한다
id_rsa.pub를  authorized_keys로 이름을 변경하고
id_rsa를 클라이언트 부분으로 빼낸다. (아니면 거꾸로 authorized_keys이걸 서버에 업로드)
클라의 USER/.ssh/ 에 넣고
권한을 600 으로 준다음에
ssh-add 를 하게되면 패스워드를 묻는다.
위에 키 만들때 지정한 패스워드를 넣어주면 된다
이제 ssh host 로 패스워드 입력없이 접속할수 있다
(서버 설정에 따라 다르지만.. 일반적으로 키나 패스워드만 있으면 가능하다)

diff , patch 사용방법

간단한건데 안쓰니까 자꾸까먹네 ;;

이름        diff – 두 파일의 차이점을 비교한다.
사용법     diff [options] from-file to-file
옵션으로는 자주쓰는게
       -u     unified 출력 형식을 사용한다.
       -r     두 디렉토리를 비교할 때, 모든 하위 디렉토리는 재귀적으로(recursively) 비교한다.
       -N    –new-file    디렉토리 비교에서, 어떤 파일이 한 디렉토리에만 있다면 다른 디렉토
리에는 비어었는 파일이 있는 것처럼 비교한다. (간단하게 디렉토리내 새파일도 비교)
NAME       patch – apply a diff file to an original
SYNOPSIS       patch [options] [originalfile [patchfile]]
                      but usually just
                      patch -pnum <patchfile
이게 다인거같다 ㅇㅇ…
옵션으로 들어가는 -p는 patchfile 내 경로를 ‘ / ‘ 를 기준으로 하나를 벗겨낸다.
             /u/howard/src/blurfl/blurfl.c
          setting -p0 gives the entire file name unmodified, -p1 gives
             u/howard/src/blurfl/blurfl.c
          without the leading slash, -p4 gives
             blurfl/blurfl.c
man page 너무 잘되있다zz

시그널

 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP

 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX


시그널 이름 설명
SIGHUP 터미널을 읽어버렸을때 발생한다.
SIGABRT 프로그램의 비정상종료시 발생한다.
SIGINT Control-C 나 DELETE 키를 입력했을때 발생한다.
SIGIO 비동기적인 입출력이 발생했을때
SIGKILL 프로세스를 죽이기 위해서
SIGPIPE 단절된 파이프에 write 할경우 발생
SIGSEGV 잘못된 메모리 참조(주로 포인터를 잘못 썼을때)
SIGSTOP 프로세스의 일시중단 (Ctrl+z)
SIGSUSR1 사용자를 위해 정의된 시그널



SIGNULL …. 은 아니고 SIGNAL (시그날 인가 ;)
http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/system_programing/Signal/SignalHow
http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/system_programing/Signal/SignalHow2
http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/1/kill