c로 만드는 cgi에서 파일 다루기 2 --;

mano1024의 이미지

아랫글에 보니까 c로 만드는 cgi에서 파일 다루기에 대한 내용이 나와 있는데,

그거 보구 해결이 안돼서, 다시 올립니다.

상황은 비슷한데, 저는 cgi에서 호출해서 다루어야 할 파일이 /etc 및에 있는 파

일 이라서 퍼미션을 바꾸기가 부담스럽네요. ^^;

그넘들은 퍼미션을 바꾸지 않고 해결할 방법이 없을까요?

제가 열고 쓰고 해야 할 파일은 퍼미션이 644입니다.

지금은 무식하게 아파치를 루트로 실행( httpd.conf에서 USER, GROUP를

root로 주어서 )시키고 있는데,

음.. 이것도 좀( 어떤 게시판에 가보니까 자살 행위라고 --;; 하더군요 )..

고민이군요..

찾아보니까, setuid같은 걸 쓰거나 하라고 되어 있는데.. setuid(0)를 프로그램

에 추가해도 파일에 접근이 안돼는 군요( 아파치를 nobody로 실행 시킬때 ).

좋은 해결 방안이 없을까요?

읽어 주셔서 감사합니다.

charsyam의 이미지

동작할 프로그램이 아마도 루트로 설정되어 있어야 할겁니다.

setuid 비트를 설정해주세요 아마도 실행할 프로그램을

chmod 4755 로 설정해 두면 될듯 하네요(루트로 말입니다.)

그럼 고운 하루...

=========================
CharSyam ^^ --- 고운 하루
=========================

부활의 이미지

일단 cgi 파일의 권한을 바꿔주어야 하지 않나요?
외부 사람들에게 실행 권한을..
아파치가 root로 돌아가서 상관없나... 그것때문에 고생한 적이 많아서 그냥
한번 적어 보았습니다.

dotri의 이미지

1) 아파치는 nobody 로 돌리시고
2) CGI 에 4755 퍼미션을 주시고
3) CGI 내부에서 setuid(0); 을 호출해주시면 됩니다.

ironiris의 이미지

안녕하세요~
일반적으로 cgi 를 작성한후 그 cgi 의 속성을 4755 로
파일의 소유자를 root 로만 설정하면 그 cgi 는 root 권한으로 작동됩니다.
물론 소유자를 nobody 로 하면 nobody권한으로 작동하겠지요?
행복하세요~
(위에 글들도 이 예기입니다.)

mano1024의 이미지

안녕하세요?

답글 달아주셔서 감사하고요,

그런데 아직 해결이 안돼서 다시 질문 올립니다.

답글에 나와있는 것처럼, cgi의 퍼미션은 4755 소유주는 root( 그룹도 root )

로 하고요,

http 데몬은 USER nobody, GROUP nobody로 실행 시켰습니다.

그런데 이번에는 무서운( -.- ) Internal Server Error 가 뜨는 군요..

퍼미션을 755로 하면 다시 제대로 뜹니다.

아, 그리고 메인에 setuid(0)도 넣었고요..

혹 아파치에 무슨 다른 설정이 필요한가요?

??? 잘 모르겠네요..

다시 한번 답글 부탁드립니다.

좋은 하루 되시고요..

ironiris의 이미지

mano1024 wrote:

그런데 이번에는 무서운( -.- ) Internal Server Error 가 뜨는 군요..

퍼미션을 755로 하면 다시 제대로 뜹니다.

아, 그리고 메인에 setuid(0)도 넣었고요..

안녕하세요~
내부오류가 발생한다면 딱히 넘겨줘야 하는 인자가 있으면 그걸 문자열로 만들어서 임의로 넣어서 테스트를 해보세요. 그래야 어떤 문구를 내뱉고 죽는지 알수 있기 때문이죠. 그냥 웹브라우저에서 호출하면 500번에러만 달랑 나오니 루트가 아닌 다른 계정 셀상에서 직접 실행해보시기 바랍니다.(전 그렇게 디버깅하거든요. --;;;; sql 쿼리도 잘들어갔나~~ 하고 찍어보기도 하고 말이죠. 문자열을 찍고 죽도록 버그난 곳을 잘판단하면서요..)
그리고 setuid(0)은 안해줘도 됩니다. 소유주가 root 라면요. root 의 uid 가 0 이거든요.
행복하세요~

mano1024의 이미지

쉘에서 실행해 보니 라이브러리가 링크가 안됀다고 나옴니다. cgi프로그램이

라이브러리를 참고하도록 되어 있거든요.

그런데 모든 라이브러리에 퍼미션 777을 주어도 마찬가지로 나옵니다.

LD_LIBRARY_PATH 환경변수도 제대로 설정되어 있고요..

그리고 만약 코드에 버그가 있다면 아파치를 루트로 실행했을때도 오류가

나야 할텐데 그렇지는 안거든요.

cgi에서 접근하는 모든 파일의 퍼미션을 777로 바꾸어도

결과는 마찬가지입니다.

라이브러리 링크하는 부분에서 문제가 생기는 것 같은데..

원인을 모르겠군요.. 흑흑. --;;

jh-park의 이미지

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 사용하시거나.


----------------------------------------------------------------------------

mano1024의 이미지

--------------------------------------------------------------
제가 열고 쓰고 해야 할 파일은 퍼미션이 644입니다.
--------------------------------------------------------------

요렇게 써 놨는데요..

읽기도 해야돼고 쓰기도 해야 된다는 말이고요.

읽고 써야할 파일의 퍼미션이 644라고..

음.. 정보가 더 있어야 하나요?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.