1993.1.19
SUBJECT: "vipw"에 대하여
DESCRIPTION:
0. "vipw" 등장의 배경
* /etc/passwd file이 edit되는 동안 machine이 crash 나는 경우를 상정해 보자.
물론 대개의 경우 system이 rebooting한 뒤 "vi -r"로서 recovery가 되지만
예를 들어, tape 작업을 하다 root full이 나는 경우는 edit하던 file의 내용이
몽땅 날라가 버리고 size가 0가 되는 것과 같은 경우에는 어떻게 대처할 것인가.
* password file은 user가 system으로 login하는데 필요한 정보를 포함하고 있기 때문에
system operation에 있어 매우 중요한 file이다.
이처럼 중요한 file을 직접 edit한다는 것은 결코 좋은 방법이 아닐 것이다.
* 이런 문제를 해결코자 몇몇 BSD 계열의 system에서는 "vipw"를 사용하여
/etc/passwd file을 edit한다.
1. "vipw"란 ?
* "vipw"는 /etc/passwd를 copy하여 /etc/ptmp라는 file을 만든다.
그리고 (default로) vi editor를 사용하여 /etc/ptmp를 open한다.
edit가 끝나면 변경된 사항을 /etc/passwd에 write하고 /etc/ptmp를 지운다.
따라서 /etc/ptmp가 edit되는 동안
/etc/passwd는 disk에 원래 상태 그대로 잘 보존되어 있을 것이다.
앞서 password file edit시 system crash로 인해 password file 자체에 문제가 생기는
현상 따위에서는 충분히 보호가 되는 것이다.
* 또 "vipw"를 사용하고 있는 동안 다른 window/terminal에서 "vipw"를 사용하여
password file을 edit할 수는 없다.
"vipw: password file busy"라는 message가 나올 것이다.
물론 "vipw"를 사용하고 있더라도 다른 쪽에서 "vi"로 /etc/passwd를 열어 놓고 있다가
"vipw"보다 나중에 save한다면 "vipw"를 사용하여 작업했던 것이 도로아미타불 될 것이다.
"vipw"는 /etc/passwd file이 아니라 /etc/ptmp file을 locking하는 것이다.
그러므로 "vipw"는 "vi"가 /etc/passwd file을 어찌하는 것까지 막을 수 없는 것.
* "vipw"가 사용하는 default editor는 vi이지만
환경변수 "EDITOR"에 다른 editor를 setting하여 "vipw"에서 불러 쓸 수도 있다.
2. "vipw"와 /etc/rc file의 관계
* /etc/rc file에 보면 아래와 같은 script이 있다.
+-------------------------------------------------------------------------------+
| # attempt to rationally recover the passwd file if needed |
| if [ -s /etc/ptmp ]; then |
| if [ -s /etc/passwd ]; then |
| ls -l /etc/passwd /etc/ptmp |
| rm -f /etc/ptmp # should really remove the shorter |
| else |
| echo 'passwd file recovered from ptmp' |
| mv /etc/ptmp /etc/passwd |
| fi |
| elif [ -r /etc/ptmp ]; then |
| echo 'removing passwd lock file' |
| rm -f /etc/ptmp |
| fi |
+-------------------------------------------------------------------------------+
* system이 crash 났을 당시 "vipw"를 사용하고 있었다면
/etc/ptmp file이 delete되지 않고 남아 있을 수 있고
가능하다면 이를 통해 /etc/passwd를 recovery하도록 하는 routine이다.
Revision History
Created on Jan. 19 ,1993