setuid시 공유 라이브러리(solaris)

fanuk의 이미지

setuid를 쓰는 프로그램을 짜고 있는데 (root권한)

hpux에서는 setuid써도 shared library를 잘 찾는데

sun에서는 libstdc++.so.2.10.0가 없다고 하네요(setuid안쓰면 잘 찾습니다.)

아마 LD_LIBRARY_PATH 환경변수가 엎어써져버리는 것 같은데

같은 프로그램(setuid안쓰는 버전)을 루트로 로긴해서 (su -) 사용하면 잘 되고

그냥 루트로(su) 사용하면 저 메세지가 나옵니다.

su로 로긴하면 LD_LIBRARY_PATH 환경변수가 없어지더군요

su - 면 /etc/profile 에 내용이 들어갑니다.

어딘가 global하게 LD_LIBRARY_PATH를 정해주는 conf 파일이 있을 것 같은데

grep으로 뒤져가면서 찾아봐도 영향을 주는게 없군요.

어떻게 해결해야 할까요?

OS세팅으로 해결하면 좋고 그게 아니면 프로그램상에서 LD_LIBRARY_PATH를 넘겨주는 방법을 택하는게 좋을까요?

fanuk의 이미지

질문을 정리해보겠습니다. 어제는 정신이 없어서..
우선 언어는 c++이고 컴파일러 gcc,

MACADDRESS를 얻어야 하는 프로그램입니다.

SOLARIS와 HPUX에서 root 권한이 아니면

MACADDRESS를 얻을 수가 없는 관계로

#if (defined SOLARIS) || (defined HPUX)
    uid_t uid = getuid();
    setuid(0);
#endif
    if( getMacAddress() < 0 )
    {
        mnStat -= 2;
    }
#if (defined SOLARIS) || (defined HPUX)
    setuid(uid);
#endif

이와같이 코딩하고

만들어진 바이너리를

루트계정으로

chmod 4755 myprog

chown root myprog

해준 뒤 일반 계정으로 실행을 해보면

HP-UX 11.00에서는 문제가 없는데 SunOS 5.8에서는

ld.so.1: ./printsys: fatal: libstdc++.so.2.10.0: open failed: No such file or directory
Killed

이런 메세지가 뜹니다.

ldd를 써보면

 118 $ ldd -s printsys

   find object=libstdc++.so.2.10.0; required by printsys
    search path=:/opt/sfw/lib:/usr/local/libwww/lib  (LD_LIBRARY_PATH)
    ignore path=.  (insecure directory name)
    ignore path=/opt/sfw/lib  (insecure directory name)
    ignore path=/usr/local/libwww/lib  (insecure directory name)
    search path=/usr/lib  (default)
    trying path=/usr/lib/libstdc++.so.2.10.0
        libstdc++.so.2.10.0 =>   (file not found)

프로그램 내부적으로는 해결 할 수 없을 듯 한데..

(아마 보안상 막힌 것 같습니다.)

libstdc++.so.2.10.0 을 /usr/lib 에 복사해두면 잘 되더군요.

OS전체적 설정을 바꾸거나 해서 default directory를 늘이는 방법을 알고 싶습니다. /opt/sfw/lib가 default directory에 포함되면 될 것 같은데요

관련 config 파일등 설정 방법을 알려주시면 감사하겠습니다.

서지훈의 이미지

/etc/ld.so.conf <=== 여기다 등록을 히시고...
$ ldconfig <=== 이놈으로 적용을 시키시면 됩니다.

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

fanuk의 이미지

감사합니다. 답변을 힌트 삼아 검색해 보니

crle라는 명령어가 있더군요.

crle -u -l PATH

-u 를 빼먹고 써서 OS날릴뻔한 위기를 겪었지만 -_-

다행히 복구했습니다..;;

기본으로 /var/ld/ld.conf 파일이 없어서

crle -l /usr/lib:/opt/sfw/lib

로 해 줬습니다.

처음에 /usr/lib 빼먹었다가 명령어 아무것도 안먹고 root로긴도 안되고 죽는줄 알았죠 ㅡ.ㅡ

아무튼 좋은 경험 했습니다. -_-

서지훈의 이미지

헉~~~ 지금 다시보니...
리눅스가 아니었네요...

여하튼 잘 해결하셨다니 다행입니다...^^

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

juicy의 이미지

저도 오늘 위의 fanuk 님처럼 crle 명령을 잘 못써서 SunOS 서버에 치명적인 문제가 발생해 버렸습니다. 덕분에(?) 여러 사람들 고생시키게 해버렸습니다. crle 명령 조심해서 써야 합니다.

익명 사용자의 이미지

getenv() setenv()를 수행해서,
LD_LIBRARY_PATH 환경변수 값을 제대로 세팅하도록 하시는것이 좋아 보입니다.

익명 사용자의 이미지

* 참고로 비교적 널리사용되는 시스템별 공유라이브러리의 환경변수는 다음과 같습니다.
Linux : LD_LIBRARY_PATH
Solaris : LD_LIBRARY_PATH, LD_LIBRARY_PATH_64
HP-UX : SHLIB_PATH, LD_LIBRARY_PATH (64 bits)
Compaq (Digital) Tru64 : LD_LIBRARY_PATH
AIX : LIBPATH
SGI : LD_LIBRARY_PATH, LD_LIBRARYN32_PATH, LD_LIBRARY64_PATH
Win32 : PATH
MacOS X: DYLD_LIBRARY_PATH, DYLD_FALLBACK_LIBRARY_PATH
VMS : SYS$SHARE
OS/390 :LIBPATH
...

댓글 달기

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