0

私のMakefileのこの単純なインストールターゲットを考えると:

install: zrm $(CONF)
        install -D -m 0755 -o mysql -g mysql conf/lvm0.conf $(DESTDIR)/$(CONFDIR)/lvm0/mysql-zrm.conf
        install -D -m 0755 -o mysql -g mysql conf/inc1.conf $(DESTDIR)/$(CONFDIR)/inc1/mysql-zrm.conf
        install -D -m 0755 -o mysql -g mysql conf/dump0.conf $(DESTDIR)/$(CONFDIR)/dump0/mysql-zrm.conf

        install -d -m 0755 -o mysql -g mysql $(DESTDIR)/$(PLUGIN)
        install    -m 0755 -o mysql -g mysql post-backup-st-zrm.pl $(DESTDIR)/$(PLUGIN)

        install -d -m 0755 -o root -g root $(DESTDIR)/$(BINDIR)
        install    -m 4755 -o root -g root zrm $(DESTDIR)/$(BINDIR)

ルートmake installとして(または使用して)簡単に実行でき、美しくインストールされます。foo(非特権)ユーザーとして、呼び出すとエラーが返されます(-oオプションにはスーパーユーザーが必要です)。sudomake install

これを変更して、両方を実行できるようにする必要がありsudo make installます。make install DESTDIR=/tmp/fooまたは、これを.debまたは.rpmにパッケージ化して、Makefileからインストールターゲットを呼び出すだけでもかまいません。

私にとって最良の解決策は何でしょうか?cpへのインストール呼び出しを置き換えますか?-oを削除し、chown / chmodを配置しますか?

ありがとうございました。

4

1 に答える 1

1

makeinstall コマンドを、コマンドラインでオーバーライドできる変数にすることができます。

INSTALL_USER = mysql
INSTALL_GROUP = mysql
INSTALL = install -d -m 0755 -o $(INSTALL_USER) -g $(INSTALL_GROUP)
INSTALL_DIR = $(INSTALL) -d

とにかく、パッケージング システムがあなたのメイクファイルに対処できることを期待しています。なぜなら、それは他の人が書いたものだからです。Debian パッケージのビルドは root として実行されます (または、通常はfakerootを介して root として実行されるふりをします)、許可され、所有権の変更が表示されます。

Debian ポリシーでは、やむを得ない理由がない限り、すべてのファイルを root が所有する必要があるため、設定したアクセス許可は許可されないことに注意してください。ファイルを所有する理由がわかりませんmysql(または、プラグインと構成ファイルを root が所有できない mysql 固有の理由を見逃したのでしょうか?)。その理由はセキュリティ上の問題です。誰かがファイルを として上書きできたとしてもmysql、実行可能ファイルや構成ファイルにコードを挿入することはできません。

とにかく、ディストリビューションのメンテナーは、あなたが設定したパーミッションを上書きしたいと思うかもしれないので、これについて悩まないでください。

于 2010-08-19T09:16:12.493 に答える