小编Ale*_*lke的帖子

如何运行想要从普通用户的 systemd 服务成为 root 的进程?

我有一项开始使用 systemd 的服务。服务用户和组更改为非特权用户。

[Service]
...
User=regular_user
Group=regular_user
...
Run Code Online (Sandbox Code Playgroud)

在某些时候,服务需要启动另一个进程,该进程有望成为 root。另一个进程设置了它的 's' 位,它setuid()用来成为 root。

如果我启动它,这个过程就可以正常工作。然而,不知何故,当服务尝试启动它时,该setuid()函数返回一个错误:

不允许操作。

我已经看到了一些有关功能的选项,但我不知道是否需要使用这些选项来使setuid()功能在我的服务中正常工作。我尝试了一些东西,到目前为止没有任何帮助。

例如,我试过:

AmbientCapabilities=CAP_SETGID CAP_SETUID
SecureBits=keep-caps
Run Code Online (Sandbox Code Playgroud)

虽然这个过程似乎不再产生错误,但它仍然没有做它应该做的事情(同样,如果我在我的控制台中运行那个过程,它工作得很好!)

setuid systemd services capabilities

6
推荐指数
1
解决办法
1233
查看次数

"netstat -p"/"ss -p" 不显示监听端口的进程

在我的 CentOS 7sudo ss -plt*:30565,曾经在上列出了一个标记为 LISTENING 的端口,但在其行的进程列中没有任何信息。其他侦听端口像往常一样显示它们的拥有进程,例如users:(("sshd",pid=1381,fd=3)),但那一行没有任何进程信息。lsof -i :30565或者netstat -p也没有产生任何信息。

我无法重现这一点,而且我很难想象“非进程”可能正在侦听端口的情况(因为我很确定 Linux 在 tcp-listening 进程终止时会执行预期的清理工作)。由于它也发生在多个程序中,我能想到的唯一解释是这是 CentOS 的“有意但非常 rootkit-y”的行为,但我肯定遗漏了一些东西。这可能是什么原因造成的?

linux networking lsof tcp netstat

6
推荐指数
1
解决办法
3324
查看次数

有没有一种简单的方法可以等效于`sed ...` 用多个值替换同一行?

我有一个文件,我想用 shell 脚本中的数据替换一些变量

-A INPUT -i lo -s @LOCAL_IP@ -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

这里我想用IP地址替换@LOCAL_IP@,我使用以下内容:

... | sed -e 's/@LOCAL_IP@/192.168.1.1/' | ...
Run Code Online (Sandbox Code Playgroud)

我的 shell 脚本中的变量中可能有 192.168.1.1,但这是提供基本思路。

现在,我有另一个规则,如下所示:

-A INPUT -i @PUBLIC_INTERFACE@ -p tcp -m tcp --dport 22
            -d @PUBLIC_IP@ -s @ADMIN_IPS@ --syn -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

(这是一条很长的行,为了便于阅读,在此处分解)

真正的输入文件将是输入文件中的许多行,大多数没有@ADMIN_IPS@,例如:

-A INPUT -i @PUBLIC_INTERFACE@ -p tcp -m tcp --dport 80 -d @PUBLIC_IP@ --syn -j ACCEPT
-A INPUT -i @PUBLIC_INTERFACE@ -p tcp -m tcp --dport 22 -d @PUBLIC_IP@ -s @ADMIN_IPS@ --syn -j ACCEPT
-A …
Run Code Online (Sandbox Code Playgroud)

sed array shell-script text-processing template

5
推荐指数
1
解决办法
450
查看次数

为什么 df 和 df -h 显示不同的值?df -h 如何进行计算?

df -h 究竟是如何工作的?如果我运行df,我会得到这个:

Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/simfs      41943040 7659828  34283212  19% /
Run Code Online (Sandbox Code Playgroud)

如果我运行df -h,我会得到这个:

Filesystem      Size  Used Avail Use% Mounted on
/dev/simfs       40G  7.4G   33G  19% /
Run Code Online (Sandbox Code Playgroud)

问题是如何获得相同的数字?

41943040 / 1024 / 1024 = 40 好的,让我们将其他人除以 1024。

7659828 / 1024 / 1024 = 7,304981
Run Code Online (Sandbox Code Playgroud)

那么也许到1000?

7659828 / 1000 / 1000 = 7,659828
Run Code Online (Sandbox Code Playgroud)

如何df -h得到7.4G?

34283212 / 1024 / 1024 = 32,695, which is ±33G
Run Code Online (Sandbox Code Playgroud)

虽然 df 是开源的,但我已经克隆了 repo …

disk-usage coreutils

5
推荐指数
1
解决办法
3024
查看次数

有没有办法以更少的方式返回到第 1 列?

有时,我的软件(通常在测试时)会输出很长的行,所以我使用 -S 命令行选项,这意味着我看到的是一行而不是许多屏幕的数据。

偶尔,我喜欢验证这些数据,这意味着我可以在很长(宽)的行中滚动。

完成后,我希望能够使用密钥返回到第 1 列。我尝试了 0 和 1 和 ^(即像在 vim 中一样)但它看起来不起作用。我认为即使您认为这是一个重要功能,也可能没有办法......

less

5
推荐指数
1
解决办法
215
查看次数

VirtualBox 中支持的 CPU 配置文件列表在哪里?

我想我找到了 VirtualBox 的 CPU 配置文件列表。我只是找不到它了。

\n\n

我可以使用以下命令查看当前主机 CPU 信息:

\n\n
vboxmanage list hostcpuids\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我想用我的一台当前未启动的虚拟机测试各种配置文件。像这样的东西:

\n\n
VBoxManage modifyvm "myVM" --cpu-profile "Intel Core i7\xe2\x80\x936700K"\n
Run Code Online (Sandbox Code Playgroud)\n\n

仅当配置文件不存在时,虚拟机才会失败(根本不会启动)。所以我想知道如何找到适用于我的主机系统的 CPU 配置文件列表?

\n\n

更新:

\n\n

来自/proc/cpuinfo(64 条中的一项):

\n\n
processor   : 63\nvendor_id   : GenuineIntel\ncpu family  : 6\nmodel       : 85\nmodel name  : Intel(R) Xeon(R) Silver 4216 CPU @ 2.10GHz\nstepping    : 7\nmicrocode   : 0x500002c\ncpu MHz     : 800.882\ncache size  : 22528 KB\nphysical id : 1\nsiblings    : 32\ncore id     : 15\ncpu cores   : 16\napicid      : 63\ninitial apicid  : …
Run Code Online (Sandbox Code Playgroud)

cpu virtualbox

5
推荐指数
1
解决办法
1万
查看次数

GUI 准备好后 Systemd 运行脚本?

我在 pi 上运行 raspbian。我创建了一个 systemd 脚本,它在启动时运行 node.js 应用程序。

脚本:

#!/usr/bin/env bash
cd /home/pi/pop_machine && /usr/bin/npm start
Run Code Online (Sandbox Code Playgroud)

系统服务:

[Service]
ExecStart=/home/pi/pop_machine/start_pop.sh

[Install]
WantedBy=default.target
Run Code Online (Sandbox Code Playgroud)

如果我手动运行该脚本但不在启动时运行该脚本。我想知道是否是因为它试图在其依赖项之前运行。

我已经看到人们在运行之前需要联网,通过添加一行到[install]是否有类似的东西我可以等到运行 GUI 应用程序的一切准备就绪?

我假设我只需要 x-window?

startup systemd

4
推荐指数
1
解决办法
7741
查看次数

我应该与运行网站的同一用户一起部署吗?

我有一个由 Nginx 提供服务的网站,我最近为其设置了 travis 构建和部署。

Nginx 以www-data用户身份运行网站。我创建了一个用户,deploy以便 Travis 可以通过 SSH 登录服务器并部署网站。部署的文件以deploy用户作为所有者存储,这与运行网站的用户不同 ( www-data)。

我担心使用此设置运行网站时会出现权限问题。我应该使用相同的用户www-data/deploy来运行和部署网站吗?使用这种方法,允许运行网站的用户通过 SSH 远程登录是否会出现问题?

请赐教我。

ssh permissions webserver nginx deployment

3
推荐指数
1
解决办法
1051
查看次数

如何创建 debian 包以将文件安装到 /home/user

我创建了一个 Debian 包,我想将文件安装到目录/home/user/myapp而不是/usr/bin

但是安装deb后,所有者/home/user/myapp是root

我希望安装deb后,所有者应该是用户,所以我添加了postinst来做后期工作:

#postinst
chown -R user /home/user/myapp
Run Code Online (Sandbox Code Playgroud)

但我总是收到错误“chown:...不允许操作”

任何的想法?

debian

2
推荐指数
1
解决办法
4613
查看次数

Journalctl 如何添加带有“-- Reboot --”日志消息的行?

我注意到,在将journalctl日志保存在磁盘上的计算机上,在重新启动时,我会在重新启动之前和之后的消息之间看到一条线,如下所示:

blah
blah
blah
-- Reboot --
blah
blah
blah
Run Code Online (Sandbox Code Playgroud)

Journalctl 如何知道在该位置添加该行?

logs journalctl systemd-journald

2
推荐指数
1
解决办法
1668
查看次数