首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用没有sudo的智能sudo

使用没有sudo的智能sudo
EN

Stack Overflow用户
提问于 2015-06-17 15:07:03
回答 2查看 8.5K关注 0票数 2

我有一个Ubuntu服务器(3.19.0-21-generic #21-Ubuntu SMP Sun Jun 14 18:31:11 UTC 2015 x86_64 Linux-3.19.0-21-generic-x86_64-with-Ubuntu-15.04-vivid)。它有一个4磁盘RAID-6阵列.通过定期使用以下Python代码询问每个磁盘,我会密切关注磁盘的健康状况:

代码语言:javascript
复制
t1 = time.time()
if ((t1 - self.lasttime) > (4.5*60)):
  self.vars     = commands.getoutput("sudo smartctl -A " + self.diskid + " |awk 'NR>4'").splitlines()
  self.health   = commands.getoutput("sudo smartctl -H " + self.diskid + " |awk 'NR>4'").splitlines()
  self.selftest = commands.getoutput("sudo smartctl -l selftest " + self.diskid + "  |grep '\# 1'")
  self.lasttime = t1

其中self.diskid是(显然是磁盘ID),例如/dev/sdc。我使用这些命令的输出来跟踪各种磁盘参数(例如温度和状态),并对网页上报告的数据进行后处理(图形化和文本状态)。

我还喜欢监视日志,但上面的命令使用了大量类似于以下内容的垃圾邮件journalctl

代码语言:javascript
复制
Jun 17 16:46:07 boson sudo[18429]: beheer : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/sbin/smartctl -l selftest /dev/sdc
Jun 17 16:46:07 boson sudo[18429]: pam_unix(sudo:session): session opened for user root by (uid=0)
Jun 17 16:46:07 boson sudo[18429]: pam_unix(sudo:session): session closed for user root

其中之一是针对每个smartctl命令发出的,该命令对每个磁盘重复。这使得在浏览日志时很难发现奇怪的地方。我知道journalctl的过滤功能,它们没有真正的帮助。它也会导致日志变得不合理的大,我认为这是一个问题。

因此,为了减轻journalctl,我想我可能放弃了sudo。但是,显然smartctl需要根权限.

我将nobody ALL=NOPASSWD:/usr/sbin/smartctl添加到/etc/sudoers中。

例如,smartctl -H /dev/sdc似乎可以工作,但返回一个错误:

代码语言:javascript
复制
Smartctl open device: /dev/sdc failed: Permission denied

因此,我将我的管理员帐户添加到disk组中。

现在,smartctl -H /dev/sdc似乎仍然工作,但返回此消息。

代码语言:javascript
复制
Probable ATA device behind a SAT layer
Try an additional '-d ata' or '-d sat' argument.

这就是我被困在那里的地方。

对于那些想知道:

代码语言:javascript
复制
$ sudo smartctl -H /dev/sdc
smartctl 6.4 2014-10-07 r4002 [x86_64-linux-3.19.0-21-generic] (local build)
Copyright (C) 2002-14, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

因此,使用sudo给出了预期的结果。

安装了smartmontools

代码语言:javascript
复制
$ dpkg -l smartmontools
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                        Version            Architecture       Description
+++-===========================-==================-==================-===========================================================
ii  smartmontools               6.3+svn4002-2      amd64              control and monitor storage systems using S.M.A.R.T.


$ systemctl list-units |grep smart
  smartd.service        loaded active running   Self Monitoring and Reporting Technology (SMART) Daemon
EN

回答 2

Stack Overflow用户

发布于 2015-10-05 04:20:06

  1. 限制可以运行此命令的用户。就像这样:sudo chmod o-x /usr/sbin/smartctl && sudo chown :admin /usr/sbin/smartctl
  2. 使用sudo chmod u+s /usr/sbin/smartctl允许任何运行此命令的人--它将使用根权限运行。

我认为这应该在安装脚本中运行,因为smartctl命令在没有根权限的情况下是无用的,应该只由管理组运行。

票数 3
EN

Stack Overflow用户

发布于 2016-03-11 20:57:42

因此,我将管理员帐户添加到磁盘组中。 现在,smartctl -H /dev/sdc似乎仍然工作,但返回此消息。 SAT层后面可能的ATA设备尝试另一个'-d ata‘或'-d sat’的论点。

您是否按建议尝试了额外的-d ata-d sat?在我的设置下,添加设备类型(我的-d ata)使其工作,一旦用户在‘磁盘’组。

我简短地启动了strace,它似乎有一个ioctl()调用来确定所使用的设备类型需要根权限或其他什么?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30895493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档