2012-01-20 12 views
0

私はdebianパッケージを作っていますが、すべてのファイルがコピーされた後にやりたいパーミッション設定に問題があります。これはネットワークアプリケーションであり、libpcapを使用します。通常はroot権限が必要ですが、セキュリティ上の大きな問題です。 (私のプログラムの妥協は攻撃者への完全なルートアクセスを意味するため)代わりに、pcap権限が付与されたグループを作成し、そのグループにインストールユーザーを追加するという手順に進みます。 makefileで

は、それは次のようになります。あなたは "sudoはmake install" を実行した場合、完全に正常に動作します

setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/myProgram 
groupadd -f myGroup 
usermod -a -G myGroup $(SUDO_USER) 

。 $(SUDO_USER)変数が空であるため、明らかに

var/lib/dpkg/info/myProgram-1.0.postinst: line 13: SUDO_USER: command not found 
Usage: usermod [options] LOGIN 

Options: 
    -c, --comment COMMENT   new value of the GECOS field 
    -d, --home HOME_DIR   new home directory for the user account 
    -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE 
    -f, --inactive INACTIVE  set password inactive after expiration 
           to INACTIVE 
    -g, --gid GROUP    force use GROUP as new primary group 
    -G, --groups GROUPS   new list of supplementary GROUPS 
    -a, --append     append the user to the supplemental GROUPS 
           mentioned by the -G option without removing 
           him/her from other groups 
    -h, --help     display this help message and exit 
    -l, --login NEW_LOGIN   new value of the login name 
    -L, --lock     lock the user account 
    -m, --move-home    move contents of the home directory to the 
           new location (use only with -d) 
    -o, --non-unique    allow using duplicate (non-unique) UID 
    -p, --password PASSWORD  use encrypted password for the new password 
    -s, --shell SHELL    new login shell for the user account 
    -u, --uid UID     new UID for the user account 
    -U, --unlock     unlock the user account 
    -Z, --selinux-user   new SELinux user mapping for the user account 

:私はDebianパッケージ内のpostinstスクリプト内でこれを実行しようとする。しかし、私はこれを取得します。これ以外にどのように行われますか?ユーザーにユーザー名を入力する必要がありますか?それはひどく醜いと思う。 あるいは、あなたはこの種の設定をdebianパッケージで行うことは想定されていませんか?

(IE:Wiresharkのは、ここで同じ問題を持っていますが、彼らはまったくインストール時の権限と混乱をユーザーに任せる、といないように見える)

答えて

1

あなたは右のそれを得た:あなたはそうではありません"インストールしているユーザ"のユーザ名を知っているはずです。あなたのパッケージがapt-cronによって実行されているとしたら、 "ユーザーのインストール"という概念全体は意味をなさない。

適切な権限を持つシステム全体のグループを追加し、ユーザーがグループに追加する必要があるメッセージをインストールログに残します。あるいは、目的に合った既存のシステムグループを使用してください。

-1

あなたは間違いなくbashの関数として

#!/bin/sh 
# postinst script 
usermod -a -G myGroup $SUDO_USER 
# Do everythhing that you could imagine 

しかし、あなたはそれを忘れてはならないことを解釈するので、ちょうどそれらの中括弧を削除し、ユーザーのインストールのユーザー名を取得することができます。

1)これは中動作しませんUbuntu Software CenterなどのいくつかのGUIアプリケーション

2)間違いなく間違いです。すべてのパッケージは、最初の起動時にユーザー固有の環境を設定する必要があります。

関連する問題