Debian 软件包:用户和组
Posted
技术标签:
【中文标题】Debian 软件包:用户和组【英文标题】:Debian package:user and group 【发布时间】:2014-02-18 02:14:38 【问题描述】:最近我用cmake/cpack做一个debian包,我make成功了,但是我在电脑上安装(sudo dpkg -i mypcakge.deb),我发现一个问题:安装程序的用户和组是root :root. 由于某种原因,我的问题应该在特定的用户/组中运行。我不知道该怎么做,你能帮帮我吗?
另外,我不想在安装包后用 chown(..) 修改用户和组。有没有办法在 CMakeLists 中添加一些东西来做到这一点?
【问题讨论】:
我认为很多 Debian 打包者都不熟悉 Cmake 来创建 Debian 包。您能否发布一些背景资源的链接,或者只是一个显示您如何操作的 sn-p? 【参考方案1】:它不仅与 CMake 相关,而且通常在使用 debhelper 和/或非标准用户名时。
debian/rules
中常用的dh(1)
默认会调用dh_fixperms(1)
,会默认重置所有者和权限。
基本上有三种方法可以保留您想要的所有者/权限:
如果你使用一些标准的 Debian 系统用户/组,你可以跳过
或覆盖dh_fixperms(1)
,您可以指定要覆盖所有者/组的文件。确保您的包预先依赖于包含所需用户/组的正确版本的 base-passwd
包。
您可以在 debian/rules
中覆盖 here(参见 dh_fixperms(1)
手册页):
override_dh_fixperms:
dh_fixperms --exclude matchname
Debian docs有更多信息。
如果您创建自己的用户并且希望文件/目录归他们所有,则需要使用postinst
脚本。在里面,你首先需要create users/groups if they don't already exist,然后做类似的事情
chown myuser:mygroup /var/log/mydir
chmod 0750 /var/log/mydir
或者,您可以使用(也在您的postinst and postrm 脚本中)dpkg-statoverride(8) 更改您(或其他)文件的所有者、组和权限,如下所示:
for i in /usr/bin/foo /usr/sbin/bar; do
# only do something when no setting exists
if ! dpkg-statoverride --list $i >/dev/null 2>&1; then
#include: debconf processing, question about foo and bar
if [ "$RET" = "true" ] ; then
dpkg-statoverride --update --add sysuser root 4755 $i
fi
fi
done
您还应该像这样处理删除:
for i in /usr/bin/foo /usr/sbin/bar; do
if dpkg-statoverride --list $i >/dev/null 2>&1; then
dpkg-statoverride --remove $i
fi
done
【讨论】:
以上是关于Debian 软件包:用户和组的主要内容,如果未能解决你的问题,请参考以下文章