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 软件包:用户和组的主要内容,如果未能解决你的问题,请参考以下文章

win10本地用户和组在哪里

用户和组管理用户和组管理

win10系统本地用户和组在哪

win10本地用户和组下有这么多组,哪些可以删除?如何删除?

Linux用户和组管理未完成

LINUX中的用户和组