我有一项开始使用 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)
虽然这个过程似乎不再产生错误,但它仍然没有做它应该做的事情(同样,如果我在我的控制台中运行那个过程,它工作得很好!)
在我的 CentOS 7sudo ss -plt
上*:30565
,曾经在上列出了一个标记为 LISTENING 的端口,但在其行的进程列中没有任何信息。其他侦听端口像往常一样显示它们的拥有进程,例如users:(("sshd",pid=1381,fd=3))
,但那一行没有任何进程信息。lsof -i :30565
或者netstat -p
也没有产生任何信息。
我无法重现这一点,而且我很难想象“非进程”可能正在侦听端口的情况(因为我很确定 Linux 在 tcp-listening 进程终止时会执行预期的清理工作)。由于它也发生在多个程序中,我能想到的唯一解释是这是 CentOS 的“有意但非常 rootkit-y”的行为,但我肯定遗漏了一些东西。这可能是什么原因造成的?
我有一个文件,我想用 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) 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 …
有时,我的软件(通常在测试时)会输出很长的行,所以我使用 -S 命令行选项,这意味着我看到的是一行而不是许多屏幕的数据。
偶尔,我喜欢验证这些数据,这意味着我可以在很长(宽)的行中滚动。
完成后,我希望能够使用密钥返回到第 1 列。我尝试了 0 和 1 和 ^(即像在 vim 中一样)但它看起来不起作用。我认为即使您认为这是一个重要功能,也可能没有办法......
我想我找到了 VirtualBox 的 CPU 配置文件列表。我只是找不到它了。
\n\n我可以使用以下命令查看当前主机 CPU 信息:
\n\nvboxmanage list hostcpuids\n
Run Code Online (Sandbox Code Playgroud)\n\n但我想用我的一台当前未启动的虚拟机测试各种配置文件。像这样的东西:
\n\nVBoxManage 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 条中的一项):
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) 我在 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?
我有一个由 Nginx 提供服务的网站,我最近为其设置了 travis 构建和部署。
Nginx 以www-data
用户身份运行网站。我创建了一个用户,deploy
以便 Travis 可以通过 SSH 登录服务器并部署网站。部署的文件以deploy
用户作为所有者存储,这与运行网站的用户不同 ( www-data
)。
我担心使用此设置运行网站时会出现权限问题。我应该使用相同的用户www-data
/deploy
来运行和部署网站吗?使用这种方法,允许运行网站的用户通过 SSH 远程登录是否会出现问题?
请赐教我。
我创建了一个 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:...不允许操作”
任何的想法?
我注意到,在将journalctl日志保存在磁盘上的计算机上,在重新启动时,我会在重新启动之前和之后的消息之间看到一条线,如下所示:
blah
blah
blah
-- Reboot --
blah
blah
blah
Run Code Online (Sandbox Code Playgroud)
Journalctl 如何知道在该位置添加该行?
systemd ×2
array ×1
capabilities ×1
coreutils ×1
cpu ×1
debian ×1
deployment ×1
disk-usage ×1
journalctl ×1
less ×1
linux ×1
logs ×1
lsof ×1
netstat ×1
networking ×1
nginx ×1
permissions ×1
sed ×1
services ×1
setuid ×1
shell-script ×1
ssh ×1
startup ×1
tcp ×1
template ×1
virtualbox ×1
webserver ×1