我可以使用以下命令列出所有 megaraid 适配器上的物理驱动器:
megacli -PDList -aALL
Run Code Online (Sandbox Code Playgroud)
这将为每个适配器显示一个适配器 #,然后列出连接到它们的物理驱动器。
PDList 输出中的各个设备也有一个设备 ID,用于 smartctl 命令,例如设备 ID 3:
smartctl -a -d sat+megaraid,3 /dev/sda
Run Code Online (Sandbox Code Playgroud)
两个命令都使用相同的设备 ID,所以没问题。但是我们如何正确地将适配器 # 映射到设备节点?
在 CentOS 6 上运行 smartmontools-5.43-1.el6。查看源代码似乎需要从 ioctlSG_GET_SCSI_ID或SCSI_IOCTL_GET_BUS_NUMBER在命名设备节点上获取的总线编号 / host_no 。这是否与 MegaCLI 输出中使用的“适配器编号”相同?
实际上,就我而言,我可能可以将其硬编码到 /dev/sda,但我想知道是否有更好的方法。
我有一个用于 Zabbix 的自定义用户参数,它调用硬件 RAID CLI 工具(arcconf / megacli)并检查是否有任何阵列降级。由于这些工具都是root权限的,我配置了sudoers允许zabbix用户无需密码即可访问:
Defaults:zabbix !requiretty
Cmnd_Alias ZABBIX_MEGACLI_CMDS = /opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -Lall -aALL
zabbix ALL = (ALL) NOPASSWD: ZABBIX_MEGACLI_CMDS
Run Code Online (Sandbox Code Playgroud)
在 CentOS 5 上,zabbix_agentd 不受限制地运行,一切正常。在 CentOS 6 上,代理现在在单独的 zabbix_agent_t 域中运行。这引起了问题。最初无法执行 sudo 二进制文件本身,但我添加了此策略:
sudo_exec(zabbix_agent_t)
Run Code Online (Sandbox Code Playgroud)
现在它以不同的方式消亡:
type=AVC msg=audit(1407137597.193:157): avc: denied { create } for pid=3145 comm="sudo" scontext=unconfined_u:system_r:zabbix_agent_t:s0 tcontext=unconfined_u:system_r:zabbix_agent_t:s0 tclass=unix_dgram_socket
type=SYSCALL msg=audit(1407137597.193:157): arch=c000003e syscall=41 success=no exit=-13 a0=1 a1=80002 a2=0 a3=1 items=0 ppid=3121 pid=3145 auid=0 uid=496 gid=495 euid=0 suid=0 fsuid=0 egid=495 sgid=495 fsgid=495 tty=(none) ses=3 comm="sudo" exe="/usr/bin/sudo" subj=unconfined_u:system_r:zabbix_agent_t:s0 key=(null)
type=AVC msg=audit(1407137597.193:158): …Run Code Online (Sandbox Code Playgroud) Kerberos HOWTO 中经常有类似这样的词:
将密钥表安全地传输(通过闪存驱动器、磁盘或加密连接)到客户端主机。
是否以 root 用户身份登录客户端主机、运行 kinit 以获取管理帐户的凭据以及从客户端运行 kadmin 还不够好?