setuid시 공유 라이브러리(solaris)
글쓴이: fanuk / 작성시간: 목, 2003/11/27 - 7:59오후
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를 넘겨주는 방법을 택하는게 좋을까요?
Forums:
추가정보 -_-
질문을 정리해보겠습니다. 어제는 정신이 없어서..
우선 언어는 c++이고 컴파일러 gcc,
MACADDRESS를 얻어야 하는 프로그램입니다.
SOLARIS와 HPUX에서 root 권한이 아니면
MACADDRESS를 얻을 수가 없는 관계로
이와같이 코딩하고
만들어진 바이너리를
루트계정으로
chmod 4755 myprog
chown root myprog
해준 뒤 일반 계정으로 실행을 해보면
HP-UX 11.00에서는 문제가 없는데 SunOS 5.8에서는
이런 메세지가 뜹니다.
ldd를 써보면
프로그램 내부적으로는 해결 할 수 없을 듯 한데..
(아마 보안상 막힌 것 같습니다.)
libstdc++.so.2.10.0 을 /usr/lib 에 복사해두면 잘 되더군요.
OS전체적 설정을 바꾸거나 해서 default directory를 늘이는 방법을 알고 싶습니다. /opt/sfw/lib가 default directory에 포함되면 될 것 같은데요
관련 config 파일등 설정 방법을 알려주시면 감사하겠습니다.
/etc/ld.so.conf <=== 여기다 등록을 히시고...
/etc/ld.so.conf <=== 여기다 등록을 히시고...
$ ldconfig <=== 이놈으로 적용을 시키시면 됩니다.
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
감사합니다. 답변을 힌트 삼아 검색해 보니crle라는 명령어가 있
감사합니다. 답변을 힌트 삼아 검색해 보니
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);
저도 오늘 위의 fanuk 님처럼 crle 명령을 잘 못써서 SunOS
저도 오늘 위의 fanuk 님처럼 crle 명령을 잘 못써서 SunOS 서버에 치명적인 문제가 발생해 버렸습니다. 덕분에(?) 여러 사람들 고생시키게 해버렸습니다. crle 명령 조심해서 써야 합니다.
getenv() setenv()를 수행해서, LD_LIBRARY_PA
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
...
댓글 달기