两个 setuid 程序/usr/bin/bar和/usr/bin/baz,共享一个配置文件foo。配置文件的模式是0640,因为它包含敏感信息。一个程序运行为bar:bar(即作为用户栏,组栏);另一个作为baz:baz. 更改用户不是一种选择,甚至更改组也不可取。
我希望将单个配置文件硬链接为/etc/bar/foo和/etc/baz/foo。但是,这失败了,因为据我所知,该文件必须属于root:bar或root:baz.
可能的解决方案:创建一个新组,barbaz其成员为bar和baz。让foo属于root:barbaz。
这对我来说似乎是一个非常严厉的解决方案。有没有更简洁、更简单的方法来foo在两个程序之间共享配置文件?
目前,我正在维护该文件的两个相同副本。这有效,但显然是错误的。什么是正确的?
有关信息:我对 Unix 组几乎没有经验,对 setgid(2) 没有任何经验。
在我的 Debian GNU/Linux 9 系统上,当执行二进制文件时,
为什么?
我假设零初始化提高了安全性,但是,如果对于堆,那么为什么不也为堆栈呢?堆栈也不需要安全性吗?
据我所知,我的问题并不是针对 Debian 的。
示例 C 代码:
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
const size_t n = 8;
// --------------------------------------------------------------------
// UNINTERESTING CODE
// --------------------------------------------------------------------
static void print_array(
const int *const p, const size_t size, const char *const name
)
{
printf("%s at %p: ", name, p);
for (size_t i = 0; i < size; ++i) printf("%d ", p[i]);
printf("\n");
}
// --------------------------------------------------------------------
// INTERESTING CODE
// --------------------------------------------------------------------
int main()
{
int …Run Code Online (Sandbox Code Playgroud) 550 relay not permitted
Run Code Online (Sandbox Code Playgroud)
这是 Exim4 从我的 Debian 笔记本电脑发送的电子邮件退回时的错误消息。
奇怪的是,只有第一封电子邮件会被退回。第二封和后续电子邮件通过中继并到达目的地就好了。但是,如果我重新启动笔记本电脑,重新启动后的第一封电子邮件会再次退回。
在端口 587 上的 STARTTLS 之后,中继受明文密码保护。X.509 证书是真实的,而不是蛇油。我管理中继服务器和笔记本电脑。如果重要的话,中继服务器也在 Debian 上运行 Exim4。Postfix 不涉及。
我想可以通过将笔记本电脑配置为每次启动时发送一封虚拟电子邮件(或者甚至可能只是一个 SMTP EHLO?)来解决这个问题,但这种行为似乎很奇怪。我难住了。如果你知道我接下来应该调查什么来解决这个问题,你会给我建议吗?
我已经镜像了 100 GiB 的文件。在我的镜像上,一些时间戳和文件权限可能是错误的。我想使用 rsync 来解决这个问题。
我下载的服务器有超过 100 GiB 的文件。我的镜像从每个源目录中镜像某些文件。它不反映整个目录。
如何告诉 rsync 修复我的时间戳和文件权限,而无需重新下载 100 GiB?
有关信息,我现在正在尝试rsync -av --list-only HOST::MODULE >/tmp/list.txt. 一旦我获取了这些数据,如果你们没有人能告诉我更好的答案,我将编写一个脚本来根据数据来处理我的每个文件。
但是没有更简洁的方法来完成这项工作吗?
(有这个问题,但它似乎没有回答我需要的。)
该stat命令是否提供或确实bash提供了一种直接的方法来检查是否FILENAME引用了文件而不是目录?
使用bashand stat,这是我丑陋的解决方案:
if RESPONSE="$(LC_ALL=C stat -c%F FILENAME)"\
&& [ "$RESPONSE" = 'regular file'\
-o "$RESPONSE" = 'regular empty file' ]
then
# do something ...
fi
Run Code Online (Sandbox Code Playgroud)
另请参阅此相关问题。