所以我正在制作一个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在这里有同样的问题,但它们似乎只是让用户,而不是安装时的权限。)
答案 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)这绝对是一种不好的做法。所有软件包必须在首次启动时设置其特定于用户的环境。