$(SUDO_USER)debian包makefile中的变量

时间:2012-01-20 18:02:53

标签: debian packaging

所以我正在制作一个debian软件包,但是在复制完所有文件后我做了一些我想做的权限设置时遇到了麻烦。它是一个联网的应用程序,使用libpcap。通常它需要root权限,但这是一个很大的安全问题。 (因为我的程序中的任何妥协都意味着对攻击者的完全root访问权限)因此,我们将创建一个具有pcap权限的组的路径,然后将安装用户添加到该组。

在makefile中,它看起来像:

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

如果您运行“sudo make install”,那么完全正常。但是当我尝试在debian包中的postinst脚本中执行此操作时,我得到了这个:

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

显然因为$(SUDO_USER)变量为空。怎么办呢?我是否必须提示用户输入他/她的用户名?听起来非常难看。 或者你可能不应该在debian包中进行这种配置?

(IE:Wireshark在这里有同样的问题,但它们似乎只是让用户,而不是安装时的权限。)

2 个答案:

答案 0 :(得分:1)

你做得对:你不应该知道“安装用户”的用户名,因为可能没有。想象一下你的包是由apt-cron运行的,那么“安装用户”的整个概念是没有意义的。

添加具有相应权限的系统范围组,并在安装日志中留言,要求用户将其添加到组中。或者,使用可能适合您目的的预先存在的系统组。

答案 1 :(得分:-1)

你绝对可以获得安装用户的用户名,只需删除那些大括号,因为bash将其解释为一个函数

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

但你必须记住:

1)这在某些GUI应用程序中不起作用,例如Ubuntu Software Center

2)这绝对是一种不好的做法。所有软件包必须在首次启动时设置其特定于用户的环境。