web-dev-qa-db-ja.com

ソースからアプリケーションをインストールする最後のステップでmakeをrootとして実行しないようにするにはどうすればよいですか?

ソースからアプリケーションをインストールする最後のステップとして、rootとしてmake installを実行することには常に消極的です。結局のところ、Makefileから任意のコードを実行することができます。適切な引用符がないために、Makefileコマンドは、ソースコードディレクトリ外のファイルを含め、削除するはずのないものを削除することはすでに私に起こりました。

このため、make installをrootとして実行しないようにし、rootとしてのアクティビティを、任意のコードを実行しない基本的な操作(ファイルのコピーやアーカイブの抽出など)に制限する方法を探しています。

1
Zoltan

いくつか検索したところ、ほとんどのソースパッケージ(少なくともautotoolsまたはcmakeを使用するもの)では、コンパイルに使用されるPREFIXとは異なるディレクトリにインストールできることがわかりました。DESTDIR環境変数で目的の場所を指定するだけです。

私は次のことをすることになりました:

firejail --x11=none --net=none --whitelist="$PWD" # Enter sandbox
./configure # (or similar)
make
DESTDIR=dest make install # install application into dest
exit # from firejail

pkgname="$(basename "$PWD")" # (or specify desired package name manually)
fakeroot tar czf "$pkgname.tgz" -C dest . # pack the installed files into a .tgz archive
fakeroot alien --version=$(date +%F) -k "$pkgname.tgz" # create a .deb package from the .tgz archive

最後のコマンドでSudo alien -iの代わりにfakeroot alienを使用して、パッケージをすぐにインストールすることもできます。または、アプリケーションをパッケージに変換したくない場合は、最後の行(alienを呼び出す)をSudo tar xzf "$pkgname.tgz" -C /に置き換えて、パッケージをrootとして抽出できます。

ここで注意すべきいくつかの事柄:

  • Rootとして潜在的に有害なコマンドを実行することを単に回避する代わりに、コンパイルとインストールはサンドボックス内で行われます。これはさらに安全です(ただし完全にオプションです)。
  • 私はcheckinstallを放棄し、代わりにalienを使用しました。これは、ファイル操作の監視と取り消しを醜く信頼性の低いハッキングに依存しないため、少しクリーンで安全なソリューションです。
0
Zoltan