我想用英特尔引脚工具检测 open-ssh 服务器。除了遵循命令之外,我不知道有什么方法可以做到这一点。
$PIN_HOME/pin -t somepintool.so -- /usr/sbin/sshd
所以,我主要想知道如何使用 pin 工具使用 systemctl 来检测服务,但是,由于我没有看到任何方法,如果我知道如何在不使用 systemctl 的情况下停止 sshd 服务,我可以处理这个问题。
我自己的想法是杀死 sshd 进程。这是不是一个好主意?还有其他建议吗?
先感谢您。
答案1
如果您有两个不应同时运行的服务,请考虑Conflicts=
在该[Unit]
部分中添加条目您的测试服务:
Conflicts=
以空格分隔的单位名称列表。配置负面需求依赖性。如果一个单元
Conflicts=
在另一个单元上有设置,则启动前者将停止后者,反之亦然。请注意,此设置独立于 和排序依赖关系After=
并与之 正交Before=
。如果与单元 B 冲突的单元 A 计划与 B 同时启动,则事务将失败(如果两者都是事务的一部分)或修改为固定(如果其中一个或两个都需要)工作不是交易的必需部分)。在后一种情况下,不需要的作业将被删除,或者如果两者都不需要,则将启动冲突的单元并停止冲突的单元。
所以这可能有效(未经测试):
pin-sshd.service
[Unit]
Description=Pin debugging of sshd (copied from sshd.service)
After=syslog.target network.target auditd.service
Conflicts=sshd.service
[Service]
ExecStart=/path/to/pin -t somepintool.so -- /usr/sbin/sshd -D -e
[Install]
WantedBy=multi-user.target
这种方式systemd
可以确保您没有同时运行两个服务并显示正确停止和启动。我看到的大多数服务都使用它Conflicts=shutdown.target
,所以看起来它通常用于确保服务在关闭之前完成,但没有什么可以阻止您将其用于其他目的!
答案2
我不确定我是否理解为什么sshd
在不使用的情况下杀死systemctl
会有所帮助,但是,没有什么可以阻止您告诉 systemdpin
在启动时使用sshd
;跑步
sudo systemctl edit ssh.service
或者
sudo systemctl edit sshd.service
(取决于您拥有的文件 - Debian 衍生品使用ssh.service
,Fedora 和 RHEL 衍生品使用 `sshd.service),然后输入
[Service]
ExecStart=/path/to/pin -t somepintool.so -- /usr/sbin/sshd -D $SSHD_OPTS
然后重新启动sshd
...
覆盖将存储在名为/etc/systemd/system/ssh(d?).service.d/override.conf
;的代码片段中删除它将恢复默认sshd
定义。