system 함수의 안정성

devscott의 이미지

안녕하세요

저희 고객사에서 개발한 어플리케이션이 있는데

void CGameCommon::makeDir( const char * path ) {
  char buff[1024];
  sprintf(buff,"mkdir -p %s",path);
 system(buff);
}

이런 함수를 이용하여 디렉토리를 생성하고 잇습니다.

문제는 한번 system 호출에서 signal 11, segmentation fault 를
냈다며
시스템 os 문제를 제기 하고 있습니다.
( system 함수는 os측의 처리를 부르기위하여 어플리케이션으로 부터 호출되었기때문...)

경험에 의하면 system 함수를 이용하는것은
좋은 개발내용은 아닌듯합니다.
자주 문제가 생겼던 경험도 있는데

문제는 딱히 system 함수를 쓰면 안된다는
이론적인 내용을 전달할 배경지식이 없어서
조언 드립니다.

system 함수대신 디렉토리 생성 함수를 사용하라는
배경 지식에 대해서 한말씀 부탁드립니다.

미리 감사드립니다.

nthroot의 이미지

system 함수를 이용하여 mkdir 을 하게 될 경우 mkdir 명령이 /bin/mkdir 이라고 보장할 수 없는 문제가 있겠네요. 함수를 쓰는것도 최악의 경우엔 보장할 수 없긴 마찬가지긴 하지만 system보다 는 더 안전하네요.

외부 명령은 가능하면 피하고 제품안에 명령을 호출해야 하는 경우엔..fork/execl/waitpid 를 사용해서 system처럼 블락되어 제어권을 잃는 경우는 피하고... 가능하면 절대 경로로 명령을 실행해주는 것이 좋을 것 같네요.

------식은이 처------
길이 끝나는 저기엔 아무 것도 없어요. 희망이고 나발이고 아무 것도 없어.

jick의 이미지

Dialog box: 설치 디렉토리를 입력하세요
사용자: dummy; sudo rm -Rf /
프로그램: makeDir("dummy; sudo rm -Rf /");

상황은 시궁창으로...

dorado2의 이미지

system 함수를 사용하면 앞서 지적된 보안 외에도 문제가 생길 수 있습니다.

memory pressure가 심한 상황인 경우 무거운 프로세스 내에서 system()을
실행하면 죽어버리는 경우가 가능합니다. 그런 의미에서 fork/exec도 비슷한 문제를 가지고 있을 것 같네요.

직접 구현하시던지, 아니면 다른 방법을 사용하시는게 좋을 듯 합니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.