2017-09-05 14 views
1

非常に限られた権限(limited_user)を持つroot以外のユーザーとしてNode.jsプロセスを実行します。root以外のユーザーが特定の他のユーザーにprocess.setuidを許可する

しかし、このアプリケーションの中には、(他のセキュリティ上の予防措置のなかでも)私はそれほど特権のないユーザーとして実行したいと思われる潜在的な攻撃可能な部分があります。私はプログラムのこの部分を別のファイルに入れて実行したいと思います。childProc.execSync("node my_dangerous_subprocess.js"); このファイルの中には、process.setuid('very_limited_user');を使用して別のユーザーに切り替えることができます。

root/sudoとしてメインプロセスを実行している限り、動作します。しかし、私はそれを望んでいません。可能であれば、sudo権限なしでプロセスをlimited_userで実行する必要があります。

だから、Ubuntuの16.04 LS上で実行されている、私はprocess.setuidを経由して、特定の他のユーザ(very_limited_user)に切り替えるには、特定の非rootユーザー(limited_user)を可能にするために何ができるのでしょうか?

Node.jsのバージョンは6.10.2です。

答えて

1

sudoコマンドを使用して一部のプログラムを管理者として実行することはできませんが、sudoコマンドを使用して特定のユーザーとして一部のプログラムを実行することもできます。

sudoを、パスワードを要求せずに特定のユーザーとして特定のコマンドを実行できるように設定できるかどうかわかりません。

だから、あなたがどうなるのかです:

childProc.execSync("sudo -u very_limited_user node my_dangerous_subprocess.js"); 

私はsudoコンフィギュレーションファイルを認識していないだから私自身がこれをしないだろう(と私はsudoをそのようにそれらのファイルを破壊することを恐れてだろうもはや動作しません)しかし、私は十分にCをプログラムすることができます。

#include <stdio.h> 
#include <unistd.h> 

int main() 
{ 
    int i; 
    i=geteuid(); 
    setreuid(i,i); 
    i=getegid(); 
    setregid(i,i); 
    execlp("node","node","my_dangerous_subprocess.js",NULL); 
    fprintf(stderr,"Could not execute node!\n"); 
    return 1; 
} 

私は、グループIDをプログラムをコンパイルし、ユーザIDを変更したい("node"execlp()の引数として2回出現していることに注意してください。):

は、私は次のプログラムを記述します得られた実行可能ファイル(この例ではCソースファイルは、「my_dangerous_part.c」と命名された)のフラグ:

gcc -o my_dangerous_part.bin my_dangerous_part.c 
sudo chown less_privileged_user:less_privileged_group my_dangerous_part.bin 
sudo chmod 6755 my_dangerous_part.bin 

そしてIは、PRを実行することができこのようなもの:

childProc.execSync("/directory_containing_the_file/my_dangerous_part.bin"); 
関連する問題