c로 만드는 cgi에서 파일 다루기 2 --;
글쓴이: mano1024 / 작성시간: 월, 2003/03/03 - 9:05오후
아랫글에 보니까 c로 만드는 cgi에서 파일 다루기에 대한 내용이 나와 있는데,
그거 보구 해결이 안돼서, 다시 올립니다.
상황은 비슷한데, 저는 cgi에서 호출해서 다루어야 할 파일이 /etc 및에 있는 파
일 이라서 퍼미션을 바꾸기가 부담스럽네요. ^^;
그넘들은 퍼미션을 바꾸지 않고 해결할 방법이 없을까요?
제가 열고 쓰고 해야 할 파일은 퍼미션이 644입니다.
지금은 무식하게 아파치를 루트로 실행( httpd.conf에서 USER, GROUP를
root로 주어서 )시키고 있는데,
음.. 이것도 좀( 어떤 게시판에 가보니까 자살 행위라고 --;; 하더군요 )..
고민이군요..
찾아보니까, setuid같은 걸 쓰거나 하라고 되어 있는데.. setuid(0)를 프로그램
에 추가해도 파일에 접근이 안돼는 군요( 아파치를 nobody로 실행 시킬때 ).
좋은 해결 방안이 없을까요?
읽어 주셔서 감사합니다.
Forums:
동작할 프로그램이 아마도 루트로 설정되어 있어야 할겁니다.setu
동작할 프로그램이 아마도 루트로 설정되어 있어야 할겁니다.
setuid 비트를 설정해주세요 아마도 실행할 프로그램을
chmod 4755 로 설정해 두면 될듯 하네요(루트로 말입니다.)
그럼 고운 하루...
=========================
CharSyam ^^ --- 고운 하루
=========================
엇
일단 cgi 파일의 권한을 바꿔주어야 하지 않나요?
외부 사람들에게 실행 권한을..
아파치가 root로 돌아가서 상관없나... 그것때문에 고생한 적이 많아서 그냥
한번 적어 보았습니다.
[re]
1) 아파치는 nobody 로 돌리시고
2) CGI 에 4755 퍼미션을 주시고
3) CGI 내부에서 setuid(0); 을 호출해주시면 됩니다.
파일의 속성은 4755 로 주시고. 파일의 소유자는 root 로
안녕하세요~
일반적으로 cgi 를 작성한후 그 cgi 의 속성을 4755 로
파일의 소유자를 root 로만 설정하면 그 cgi 는 root 권한으로 작동됩니다.
물론 소유자를 nobody 로 하면 nobody권한으로 작동하겠지요?
행복하세요~
(위에 글들도 이 예기입니다.)
음.. 다시 한번..
안녕하세요?
답글 달아주셔서 감사하고요,
그런데 아직 해결이 안돼서 다시 질문 올립니다.
답글에 나와있는 것처럼, cgi의 퍼미션은 4755 소유주는 root( 그룹도 root )
로 하고요,
http 데몬은 USER nobody, GROUP nobody로 실행 시켰습니다.
그런데 이번에는 무서운( -.- ) Internal Server Error 가 뜨는 군요..
퍼미션을 755로 하면 다시 제대로 뜹니다.
아, 그리고 메인에 setuid(0)도 넣었고요..
혹 아파치에 무슨 다른 설정이 필요한가요?
??? 잘 모르겠네요..
다시 한번 답글 부탁드립니다.
좋은 하루 되시고요..
Re: 음.. 다시 한번..
안녕하세요~
내부오류가 발생한다면 딱히 넘겨줘야 하는 인자가 있으면 그걸 문자열로 만들어서 임의로 넣어서 테스트를 해보세요. 그래야 어떤 문구를 내뱉고 죽는지 알수 있기 때문이죠. 그냥 웹브라우저에서 호출하면 500번에러만 달랑 나오니 루트가 아닌 다른 계정 셀상에서 직접 실행해보시기 바랍니다.(전 그렇게 디버깅하거든요. --;;;; sql 쿼리도 잘들어갔나~~ 하고 찍어보기도 하고 말이죠. 문자열을 찍고 죽도록 버그난 곳을 잘판단하면서요..)
그리고 setuid(0)은 안해줘도 됩니다. 소유주가 root 라면요. root 의 uid 가 0 이거든요.
행복하세요~
쉘에서 실행 해보면..
쉘에서 실행해 보니 라이브러리가 링크가 안됀다고 나옴니다. cgi프로그램이
라이브러리를 참고하도록 되어 있거든요.
그런데 모든 라이브러리에 퍼미션 777을 주어도 마찬가지로 나옵니다.
LD_LIBRARY_PATH 환경변수도 제대로 설정되어 있고요..
그리고 만약 코드에 버그가 있다면 아파치를 루트로 실행했을때도 오류가
나야 할텐데 그렇지는 안거든요.
cgi에서 접근하는 모든 파일의 퍼미션을 777로 바꾸어도
결과는 마찬가지입니다.
라이브러리 링크하는 부분에서 문제가 생기는 것 같은데..
원인을 모르겠군요.. 흑흑. --;;
C로 cgi
makefile에서
target.cgi : objs
$(CC) -o target.cgi objs
chmod u+s target.cgi
그런데, 간혹 파일을 이동하는중에 stickbit가 떨어져버리는 경우가
있는데 제대로 잘 붙어있나 확인만 하면 문제없이 잘 돌어갔습니다.
(그래도 안되면 /var/log/httpd/error_log 보시고 해결하시기를.. :o )
공유라이브러리 경우 제대로 링크가 안된경우 웹브라우저로 보면 그냥 인터널서버에러만 뜨는데 shell에서 cgi-bin/target.cgi 이케 실행했을경우 라이브러리를 못 읽어 온다고 메시지가 뜹니다.
환경:아파치1.3.20, c로 작성한 cgi
쩝쩝..
---------------------------------------------------------
.................
그넘들은 퍼미션을 바꾸지 않고 해결할 방법이 없을까요?
제가 열고 쓰고 해야 할 파일은 퍼미션이 644입니다.
지금은 무식하게 아파치를 루트로 실행( httpd.conf에서 USER, GROUP를
root로 주어서 )시키고 있는데,
..........................
에 추가해도 파일에 접근이 안돼는 군요( 아파치를 nobody로 실행 시킬때 ).
좋은 해결 방안이 없을까요?
.....................
---------------------------------------------------------------
파일을 읽기만 할것인지 읽고 쓸것인지의 내용이 없내요..
제가 원문을 잘못읽은건 아니죠? 제일중요한 내용이 없는데 어떻게 답변을해요?
그리고 /etc 디렉토리 퍼미션도 없네요..
읽기만 할꺼면 /etc 에 일반사용자에 x 권한만 있어도 되요.
일고 쓰기 까지 하려면.. group 정도 열어두거나 setuid 사용하시거나.
----------------------------------------------------------------------------
----------------------------------------
--------------------------------------------------------------
제가 열고 쓰고 해야 할 파일은 퍼미션이 644입니다.
--------------------------------------------------------------
요렇게 써 놨는데요..
읽기도 해야돼고 쓰기도 해야 된다는 말이고요.
읽고 써야할 파일의 퍼미션이 644라고..
음.. 정보가 더 있어야 하나요?
댓글 달기