免密码执行特定需要 root 权限的程序

在下常用 smartctl 看看 SSD 的状态(温度和写入量)。可这个软件要 root 权限才能执行,有的地方比较麻烦。

本文介绍配置 sudoers 文件,使普通用户可免密码执行特定需要 root 权限的程序。


首先可以确认 smartctl 是要 root 权限的。

$ ./smartctl -a /dev/nvme0
smartctl 6.6 2017-11-05 r4594 [x86_64-linux-4.13.0-39-generic] (local build)
Copyright (C) 2002-17, Bruce Allen, Christian Franke, www.smartmontools.org

Smartctl open device: /dev/nvme0 failed: Permission denied

那么就来配置 sudoers 文件。sudoers 文件详细的文档见 https://www.sudo.ws/man/1.8.17/sudoers.man.html。不过看起来挺费事的,这里简单记录下配置方法。

使用命令 sudo visudo 编辑 sudoers 文件。(若想用 vim 编辑,可以执行 sudo EDITOR=vim visudo

在下的系统是 Ubuntu 16.04.4,默认的 sudoers 文件如下:

#
# This file MUST be edited with the 'visudo' command as root.                   
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults    env_reset
Defaults    mail_badpass
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL 

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL 

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL 

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

在这个文件最后一行(为什么)加入:

weiyulan ALL=(ALL) NOPASSWD: /home/weiyulan/smartmontools-6.6/smartctl

如果你要参考的话,记得把你的用户名替换最前面的 "weiyulan",并把程序的路径替换最后的路径。

然后保存退出就立即生效了。

social