2010-07-12 4 views
1

일부 불행한 이유로 워크 스테이션 당 한 명의 사용자가 독점적 이진 라이브러리를 다중 사용자 워크 스테이션 설치로 변환해야합니다.사용자 종속 파일 내용

현재 설정. 사용자는 라이브러리에 링크 된 프로그램을 사용합니다. 이 라이브러리는 하드 코드 된 경로 (예 : /usr/local/thelib/main.conf)를 사용하여 여러 작업 디렉토리에 대한 여러 경로가 포함 된 시스템 전체 구성 파일을 읽습니다. wdir에는 그 자체로 많은 사용자 데이터 파일이 들어 있습니다.

희망 결과. 동일한 워크 스테이션에서 여러 명의 사용자를 관리 할 수 ​​있습니다. 물론 사용자는 라이브러리를 통해 다른 사용자의 데이터를 읽거나 변경할 수 없으며 각 사용자마다 다른 작업 디렉토리에 라이브러리를 제공하는 경우 유닉스 권한으로 처리해야합니다.

동시에 여러 사용자가 라이브러리를 사용할 수 있으므로 런타임시/usr/local의 구성 파일을 옵션으로 사용할 수 없습니다.

환경 변수 나 현재 유닉스 사용자에 따라 /usr/local/thelib/main.conf 파일에 다른 내용을 제공하기 위해 FUSE를 사용하려고 생각했습니다. 그런 다음 환경 변수 var는 구성 파일을 생성하는 코드 내에서 스위치로 사용됩니다.

내가 파이썬, 펄 또는 C

워크 스테이션은 꽤 최근의 커널 최신 GNU/리눅스 데비안이나 우분투 배포판을 실행을 사용하여 편하지입니다.

So. 당신 생각 :

  • FUSE를 사용 하시겠습니까?
  • 다른 종류의 래퍼를 만들겠습니까? chroot (2)를 사용하여 janneb - per?
  • Linux에서 허용되는 다른 용도로 사용 하시겠습니까?

나는 기능적인 것을 생산할 수있을 것이라고 알고 있지만 지금 당장은 바퀴를 다시 만들고 싶지 않기 때문에 지역 사회의 조언을 구할 것입니다.

감사합니다. Florian

+1

언제든지 구성 파일에 상대 경로가 허용됩니까? 그렇다면 라이브러리를 사용하기 전에 CWD를 변경하는 무언가를 해킹 할 수 있습니다. –

+0

'/ usr/local/thelib/main.conf '경로가 정말로 라이브러리에 하드 코딩되어 있다면, 작성한 사람의 디자인 결정은 꽤 어렵습니다. –

+0

@David : 많은 자유 소프트웨어가 실제로/etc를 사용하지만, 재 컴파일이 쉽고 경로를 쉽게 수정할 수 있으므로 중요하지 않습니다. –

답변

2

LD_PRELOAD를 사용하여 open() 호출을 가로채는 작은 스텁을로드하고 ~/.main.conf를 열 수 있습니다 (공유 객체라고 가정). 그런 다음 응용 프로그램 시작 루틴에서 LD_PRELOAD가 올바른 값으로 설정되어 있는지 확인하고, 그렇지 않으면 올바른 환경으로 응용 프로그램을 다시 시작하십시오.

+0

최상의 솔루션 인 것 같습니다. 지금이 래퍼를 작성하려고합니다. 고맙습니다 ! – madflo

2

간단한 방법은 응용 프로그램이 라이브러리 init 함수를 호출하기 전에 chroot()를 호출하는 것입니다. 예 : $ HOME/theapp에 chroot하면 각 사용자는 $ HOME/theapp 아래의 개인 작업 디렉토리뿐만 아니라 $ HOME/theapp/usr/local/thelib/main.conf에 개인 구성 파일을 가질 수 있습니다.

+0

'chroot (2)'는 루트 권한이 필요하므로 appu root를 setuid하고 최대한 빨리 권한을 삭제해야합니다. –

+0

나는 그것이 현재로서는 가장 간단한 해결책 인 것처럼 보인다는 것에 동의한다. 좋은 오래된 chroot (2). – madflo