[질문] passwd명령의 동작원리 ???
글쓴이: cjynim / 작성시간: 일, 2007/03/25 - 12:49오전
안녕하세요 ... 요즘 리눅스를 공부하다가 SetUID에 대해서 공부를 했습니다.
거기에서 예를 든 명령이 passwd명령인데여 여기에 SetUID가 set 되어있어서 일반 계정의 사용자들이
passwd명령을 통해 root만이 읽을 수 있는 shadow 파일에 접근해서 패스워드를 변경하는 거라고
책에 나와 있더라구여 ~
여기서 제 궁금증이 일기 시작했습니다. shadow파일은 분명이 root도 읽을 수만 있는데 passwd명령에
SetUID를 set하여 일반사용자가 실행하여 root권한으로 명령을 실행한다 해서 어떻게 shadow파일에
비밀번호를 기록할 수 있을까??? 하고 말입니다. 그래서 passwd명령에 SetUID를 unset 한 후 root계정
에서 passwd명령을 실행 시켜 보니 잘 돌아가더라구여 ~ 그래서 이번엔 일반 계정에서 실행 시켜 보니
전혀 실행이 되질 않습니다...
shadow파일 같은 경우 root도 읽기만 가능한데 어떻게 shadow파일의 내용을 passwd명령을 통해서
바꿀수 있는거죠???
Forums:
setuid가 set
setuid가 set 되어있으면, effective uid가 사용자가 아니라 바이너리의 소유자가 됩니다.
권한 검사는 effective uid를 기준으로 합니다.
질문하신 분의
질문하신 분의 말뜻은... 제가 보기에는, effective uid가 root가 되었다 하더라도, 어쨌거나 /etc/shadow 파일의 퍼미션은 400, r-------- 이고, 'w'가 없는데 어떻게 write가 가능하냐...인 것 같네요. :-)
뭐 passwd 프로그램의 소스를 들여다봐야겠습니다만, 필요하면 중간에 퍼미션을 바꿔서 기록한 후 다시 되돌려놓지 않을까요? root가 무슨 일을 할 때 파일의 퍼미션은 문제가 안 될 거라 생각합니다. 퍼미션을 바꿔버리면 그만이니.
root가 아닌 일반 사용자의 경우도, 자기 소유의 파일이라면 write 퍼미션 없는 건 별 문제가 안 됩니다. 텍스트 파일 하나를 400 퍼미션 주시고,
* vi로 열어서 ("읽기전용"이라고 나옴)
* 수정하고 ("읽기 전용 파일을 고친다"고 경고함)
* :w 로 저장하려면 읽기전용이라면서 안 되지만 (따라서 중요한 파일을 실수로 덮어쓰는 걸 막는 의미는 있겠죠)
* :w! 로 저장하면 됩니다. :-) 사용자가 수작업으로 write 퍼미션 주고, 저장하고, 다시 write 퍼미션을 없애는 과정을 그냥 vi가 알아서 해 주는 거겠거니라고 생각하고 있습니다. (제가 틀렸을 수도 있지만)
좋은 하루 되세요!
좋은 답변 감사합니다 ~
제가 바로 궁금했던 내용입니다 ...
좋은 답변 감사드립니다 . 수고하세여 ~~~~
vim 소스
"root가 아닌 일반 사용자의 경우도, 자기 소유의 파일이라면 write 퍼미션 없는 건 별 문제가 안 됩니다. :w! 로 저장하면 됩니다. :-) 사용자가 수작업으로 write 퍼미션 주고, 저장하고, 다시 write 퍼미션을 없애는 과정을 그냥 vi가 알아서 해 주는 거겠거니라고 생각하고 있습니다."
궁금해서 확인해 봤습니다.
해당 코드는 Vim 7.0의 fileio.c(리비전 1.90) 3709행부터 있습니다.
http://vim.cvs.sourceforge.net/vim/vim7/src/fileio.c?revision=1.90&view=markup#l_3709
한참 내려가서 4245행부터 퍼미션을 되돌려 놓는 코드가 나옵니다.
http://vim.cvs.sourceforge.net/vim/vim7/src/fileio.c?revision=1.90&view=markup#l_4245
댓글 달기