Ubuntu/C++ :在 /usr/local/bin/ 中创建目录

Ubuntu/C++ :在 /usr/local/bin/ 中创建目录

我通常使用 mkdir 函数来创建目录(例如 mkdir("/home/dhw/test", S_IREAD|S_IWRITE) )

但是我无法在 /usr/local/bin 中创建目录。

我猜是权限问题。

我已经知道我可以做这项工作

system("sudo mkdir /usr/local/bin/test/");

并输入root密码。但我不想让用户手动获取root权限。

我应该怎么办?

答案1

为什么不让程序具有 suid 权限?但坦率地说,不应该触碰 /home 之外的目录。但是,如果你坚持这样做,只要 100% 确保内存检查是严格的并且没有漏洞,那么使用 suid 权限就可以解决问题。

另一种方法是,让该程序成为 root 组的成员。

总而言之,这是违反 FHS 的接触目录的奇怪要求。

答案2

这个问题已经有了公认的答案,但似乎有必要对 Unix 文件层次结构进行一些阐释。每个第一次接触 Unix 文件层次结构的人都想改变它,甚至连前任首席执行官史蒂夫·乔布斯(向他致敬)。Linux 的布局已在所谓的 FHS 中编纂(文件系统层次标准),其中列出了每个典型系统目录的位置和用途。 维基百科有一个简明的列表其中一些。Linux 标准库 (LSB)进一步概述了 LSB 兼容系统上必须存在的 API,其中部分由 FHS 指定。

Unix 的方式是将 Unix 系统文件与管理员文件隔离,并将这两者与用户文件进一步隔离。通常允许用户使用其主目录(通常在 /home 目录结构中)、/tmp、/var/tmp 以及系统可能根据设计或管理员配置允许的某些特定文件。

管理员通常可以控制系统,但 FHS 为管理员保留了一些目录。具体来说,/usr/local 和 /opt(包括一些其他相关目录)由系统保留供管理员使用。这些用于安装系统不维护或不提供的软件。

Linux 系统目前由所用发行版的创建者维护和管理,它将文件系统层次结构的其余大部分保留给自己。这种职责划分有助于维护系统的安全性和稳定性。必要时,管理员或发行版的软件包系统(如果有)可以进行修改。流行的软件包系统包括 Debian 的 apt、Novell 的 zypper、RedHat 的 yum 或 Gentoo 的 portage 软件包管理器。大多数这些软件包管理器都为管理员提供了控制系统软件包的选择、配置和维护的方法。

总之,应用程序程序员应该记住,用户对系统的访问权限是有限的,这是有充分理由的。除非是为了 FHS 中概述的目的之一,否则乱改系统目录可能不是正确的方向。

如果必须进行更改,可以使用一些工具来解决这个问题,包括明智地使用 sudo,PolicyKitACL和文件属性(修改模式, ETC。)。

原作者没有解释他需要的目录的用途,因此很难更具体地回答。我希望这个答案有用。

相关内容