写点什么

Smartctl 打开设备遇到 Permission denied 问题排查过程记录

作者:耳东@Erdong
  • 2022 年 6 月 24 日
  • 本文字数:1438 字

    阅读完需:约 5 分钟

今天使用 Zabbix 监控系统对磁盘监控的时候发现一个问题,smartctl 命令不能用普通用户去执行。


smartcl 是磁盘管理工具 Smart 提供的命令,使用这个命令来获取磁盘的一些状态信息,比如下面这样:


[root@Erdong-TEST ~]# smartctl -A /dev/nvme0n1smartctl 7.0 2018-12-30 r4883 [x86_64-linux-3.10.0-693.el7.x86_64] (local build)Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF SMART DATA SECTION ===SMART/Health Information (NVMe Log 0x02)Critical Warning: 0x00Temperature: 29 CelsiusAvailable Spare: 100%Available Spare Threshold: 10%Percentage Used: 0%Data Units Read: 80 [40.9 MB]Data Units Written: 0Host Read Commands: 1,897Host Write Commands: 10Controller Busy Time: 0Power Cycles: 10Power On Hours: 923Unsafe Shutdowns: 7Media and Data Integrity Errors: 0Error Information Log Entries: 0Warning Comp. Temperature Time: 0Critical Comp. Temperature Time: 0
[root@Erdong-TEST ~]#
复制代码


Smart 工具的 smartctl 命令只能用 root 去执行,是不能用普通用户执行的。


但是当 Zabbix 监控系统使用这个命令监控的时候,缺省是使用 zabbix 这个系统里创建的用户来执行的,这个时候只能使用 root 权限来执行,比如添加 sudo 权限给 zabbix 用户来执行这个命令。


给 zabbix 用户 root 权限以后继续执行这个命令,这个时候就会报错:


[zabbix@Erdong-TEST ~]$ smartctl -A /dev/nvme0n1smartctl 7.0 2018-12-30 r4883 [x86_64-linux-3.10.0-693.el7.x86_64] (local build)Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org
Smartctl open device: /dev/nvme0n1 failed: Permission denied
复制代码


这里又提到了一个没权限,这个没有权限是 /dev/nvme0n1 这个块设备没有权限。查看块设备发现它的数组是 disk ,这个组有读写权限,那么给 zabbix 用户添加到 disk 组中,那么就可以解决上边的问题。


[root@Erdong-TEST ~]# ll -h /dev/nvme0n1brw-rw---- 1 root disk 259, 0 5月  31 10:43 /dev/nvme0n1[root@Erdong-TEST ~]#
复制代码


添加到组可以使用这个命令:


usermod -a -G disk zabbix
复制代码


如果到这里你的问题解决了的话,那么恭喜。


我接着遇到了新的问题:



[zabbix@Erdong-TEST ~]$ smartctl -A /dev/nvme0n1smartctl 7.0 2018-12-30 r4883 [x86_64-linux-3.10.0-693.el7.x86_64] (local build)Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org
Read NVMe Identify Controller failed: NVME_IOCTL_ADMIN_CMD: Permission denied
复制代码


NVME_IOCTL_ADMIN_CMD 是 NVME 的一个函数,这我不知道要怎么给函数授权了。


所以我用了一个终极大招,我修改了 Zabbix Agent 的启动用户,修改成了 root ,现在一下就解决问题了。


对于 Zabbix 遇到权限问题,Zabbix 官方的建议是在 sudo 命令的文件 /etc/sudoers 文件中对命令进行授权,并且最好遵循最小授权的原则。我这次在执行过程中,到最后进入到了函数的权限管理,是没什么办法了,只能使用 root 用户来解决了。


如果你们有其他的方法,欢迎交流讨论。

发布于: 刚刚阅读数: 4
用户头像

耳东@Erdong

关注

还未添加个人签名 2020.05.24 加入

主要研究分享运维技术,专注于监控、CICD、操作系统、云原生领域,公众号【耳东学堂】,知识星球同名,坚持原创,希望能和大家在运维路上结伴而行 邮箱:erdong@mail.erdong.site

评论

发布
暂无评论
Smartctl 打开设备遇到 Permission denied 问题排查过程记录_Linux_耳东@Erdong_InfoQ写作社区