2014-12-17 4 views
0

node.js mkdirp를 사용하여 다른 사용자 영역에 디렉토리를 만들려고합니다.node.js with mkdir/mkdirp 및 setuid

다른 말로하면, 나는 사용자 foo와 bar를 가지고 있습니다. 나는 mkdirp를 foo 사용자로 실행시키고 바 영역에 디렉토리를 생성하고 싶습니다.

이전 SO 게시물에서 많은 실험을 통해이 작업을 수행 할 수없는 것으로 보입니다. 나는 두 bar를 foo의 그룹에 넣고, usermod, foo를 bar의 그룹에 넣고, setfacl으로 광범위하게 시도했다.

이것은 내가 할 수있는 것으로 생각하면 조금 이상합니다. su foo;을 열고 바의 디렉토리에서 디렉토리를 만들고, 터치하고, 삭제하는 등의 작업을 수행하십시오.

나는 일반 fs.mkdir 명령을 사용하여 시도해 보았지만 동일한 문제 (아마도 놀랄 일은 없음)가 있습니다. 코드는 아래에 있습니다.

노드 프로그램이 처음 시작될 때 setuid/setgid를 사용하여 실행 권한을 사용자 'root'에서 'foo'사용자로 다운 그레이드합니다.

내 질문 : 루트 권한을 어떻게 든 유지할 수 있지만 mkdirp 명령 만 실행하면 될만큼 루트 권한을 길게 제한 할 수 있습니까?

귀하의 시간과 배려에 감사드립니다. 내 실험적인 코드는 다음과 같습니다 :

fs = require('fs') ; 
process.setgid(556); // foos groupid 
process.setuid(560); // foos userid 

fs.mkdir('/test1/test2/testTester/', 0770, function(err){ 
    if (err) console.error(err) else console.log('works!'); 
}); 

ID foo는;

UID = 560 (foo는) GID = 556 (foo는) 그룹 = 556 (foo에) (512) (바)

ID 바;

UID = 515 (바) GID = 512 (바) 그룹 = 512 내가 (지금은) 해결 솔루션을 발견

답변

0

(바) - 사용 visudo를하고 부여 사용자 foo는 MKDIR 권한 :

visudo; 다음 줄을 포함 ## :

foo는 ALL = (ALL) NOPASSWD :/빈 /에서 mkdir/빈/대한 Chown 여기

내 작업 Node.js를 테스트 스크립트는 다음과 같습니다

exec = require('exec'); 

process.setgid(556); // foo's groupid 
process.setuid(560); // foo's userid 

exec('sudo /bin/mkdir --parents /test1/test2/testTester/; ', function(error,stdout,stderr){ 
    if (error == '') {  // null does not work here for some reason 
     exec('sudo /bin/chown bar:bar /test1/test2/testTester/; ', function(error,stdout,stderr){ 
      if (error != '') { 
       console.log('chown exec error: ' + error);  
      } 
     }); 
    } else { 
     console.log('mkdir exec error: ' + error); 
    } 
}); 

언제나처럼 모든 의견을 환영하며 높이 평가합니다.