`
david_je
  • 浏览: 369375 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

运行sudo不需要输入密码

 
阅读更多

      最近CI有两个job中编译的时候需要不同的环境,分别依赖同一个包的不同版本,而且运行加载库包的时候需要用到sudo的权限。由于Jenkins在运行的时候使用的是非root账户,所以就必须输入密码。但是jenkins servr现在不支持tty的插件,而且jenkins是由几个Unit公用的,要安装新的插件走的流程比较复杂,短期内不可能。为了达到目标,只能考虑到其他的方法了。

      Google一下知道了一个叫做sudoers的文件可以达到目的。官方解释是,sudoers可以决定用户的sudo权限,这个文件在/etc/sudoers。管理员可以通过添加用户到sudoers文件来控制运行sudo命令时候的行为,比如是否需要密码(英文没有选好,翻译成中文也说不好,悲剧啊)。所以,正好满足我的需求,也不需要去走那个复杂的流程。

     这里记录一下我是怎么做的:

    

>sudo visudo
#不能使用vi或者vim去打开,应该使用visudo命令来打开

 

 

    文件如下:

    

# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
# Failure to use 'visudo' may result in syntax or file permission errors
# that prevent sudo from running.
#
# See the sudoers man page for the details on how to write a sudoers file.
#

# Host alias specification

# User alias specification

# Cmnd alias specification

# Defaults specification
Defaults        env_reset
Defaults        env_keep += "BLOCKSIZE"
Defaults        env_keep += "COLORFGBG COLORTERM"
Defaults        env_keep += "__CF_USER_TEXT_ENCODING"
Defaults        env_keep += "CHARSET LANG LANGUAGE LC_ALL LC_COLLATE LC_CTYPE"
Defaults        env_keep += "LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME"
Defaults        env_keep += "LINES COLUMNS"
Defaults        env_keep += "LSCOLORS"
Defaults        env_keep += "SSH_AUTH_SOCK"
Defaults        env_keep += "TZ"
Defaults        env_keep += "DISPLAY XAUTHORIZATION XAUTHORITY"
Defaults        env_keep += "EDITOR VISUAL"
Defaults        env_keep += "HOME MAIL"

# Runas alias specification

# User privilege specification
root    ALL=(ALL) ALL
%admin  ALL=(ALL) ALL

# Uncomment to allow people in group wheel to run all commands
# %wheel        ALL=(ALL) ALL

# Same thing without a password
# %wheel        ALL=(ALL) NOPASSWD: ALL

# Samples
# %users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users  localhost=/sbin/shutdown -h now

 

 

     所以,从上面的解释来说,在#User privilege Speciation后面加上目标username就可以了,比如:

    

username ALL=(ALL) ALL

 

 

    我这里使用的是用户名是MSTV,看好了,是大写的,添加如下行:

    

MSTV ALL = (ALL) ALL

 

 

   保存,结果报错,如下:

   

visudo: Warning: User_Alias `MSTV' referenced but not defined

 

    看来这个文件不认识'MSTV',因为没有设置User_Alias, 查看cat /etc/passwd|grep MSTV, 没有搜到,查看sudoers果然有个设置User_Alias的地方。那就设置吧。查看设置的语法:

    

User_List ::= User |
              User ',' User_List
 
User ::= '!'* user name |
         '!'* #uid |
         '!'* %group |
         '!'* %#gid |
         '!'* +netgroup |
         '!'* %:nonunix_group |
         '!'* %:#nonunix_gid |
         '!'* User_Alias

    User_list可以有一个或者多个用户名,user ID(前面必须加#),系统的group(前面必须加%),Group ID(前面要加%#), netgroups(前面必须加+), Non-Unix group(前面加上%:), Non-Unix gid(前面必须加上%:)等等。

 

    所以,我改成了:

   

User_Alias MSTV_ = MSTV

    结果,还是报错, 看来不能使用MSTV这个用户名,那就使用uid吧,运行ls -ln,查看uid是504,所以:

    

User_Alias MSTV = #504

    :wq, 这下终于不报错了。

   由于,我只想在使用特定命令的时候带sudo,不需要输入密码,所以,可以指定哪些特定的命令。在这里使用的是Cmnd_Alias来指定:

   

Cmnd_Alias FINALIZER5 = /usr/local/jenkins/Finalizer/Finalizer-5.0.0.70600-macosx-x86/Xcode/install-xcode-finalizer-wrapper.sh
Cmnd_Alias FINALIZER4 = /usr/local/jenkins/Finalizer/Finalizer-4.1.1.1-macosx-x86/Xcode/install-xcode-finalizer-wrapper.sh

  

    组成新的rule,就是:

   

MSTV    ALL=(ALL) NOPASSWD: FINALIZER4, FINALIZER5

 

    :wq 保存,没有错误输出,sudo -l,查看一下,

Matching Defaults entries for MSTV on this host:
    env_reset, env_keep+=BLOCKSIZE, env_keep+="COLORFGBG COLORTERM", env_keep+=__CF_USER_TEXT_ENCODING, env_keep+="CHARSET LANG
    LANGUAGE LC_ALL LC_COLLATE LC_CTYPE", env_keep+="LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME", env_keep+="LINES COLUMNS",
    env_keep+=LSCOLORS, env_keep+=SSH_AUTH_SOCK, env_keep+=TZ, env_keep+="DISPLAY XAUTHORIZATION XAUTHORITY", env_keep+="EDITOR
    VISUAL", env_keep+="HOME MAIL"

User MSTV may run the following commands on this host:
    (ALL) ALL
    (ALL) NOPASSWD: /usr/local/jenkins/Finalizer/Finalizer-4.1.1.1-macosx-x86/Xcode/install-xcode-finalizer-wrapper.sh, (ALL)
    /usr/local/jenkins/Finalizer/Finalizer-5.0.0.70600-macosx-x86/Xcode/install-xcode-finalizer-wrapper.sh

 

    可以看到这条规则生效了,测试一下,运行这两个命令前面带上sudo,很顺利,不需要输入密码,就执行成功了。反过来执行一个其他的命令,带上sudo,就需要密码。可见sudoers已经生效了。

     

    这里,主要参考的文档是:http://www.sudo.ws/sudo/sudoers.man.html,另外sudo也有很多命令含有意思,输入sudo -h,可以得到:

    

sudo
usage: sudo -h | -K | -k | -L | -V
usage: sudo -v [-AknS] [-g groupname|#gid] [-p prompt] [-u user name|#uid]
usage: sudo -l[l] [-AknS] [-g groupname|#gid] [-p prompt] [-U user name] [-u user name|#uid] [-g groupname|#gid] [command]
usage: sudo [-AbEHknPS] [-C fd] [-g groupname|#gid] [-p prompt] [-u user name|#uid] [-g groupname|#gid] [VAR=value] [-i|-s]
            [<command>]
usage: sudo -e [-AknS] [-C fd] [-g groupname|#gid] [-p prompt] [-u user name|#uid] file ...

Options:
  -A            use helper program for password prompting
  -b            run command in the background
  -C fd         close all file descriptors >= fd
  -E            preserve user environment when executing command
  -e            edit files instead of running a command
  -g group      execute command as the specified group
  -H            set HOME variable to target user's home dir.
  -h            display help message and exit
  -i [command]  run a login shell as target user
  -K            remove timestamp file completely
  -k            invalidate timestamp file
  -L            list supported sudoers Defaults values
  -l[l] command list user's available commands
  -n            non-interactive mode, will not prompt user
  -P            preserve group vector instead of setting to target's
  -p prompt     use specified password prompt
  -S            read password from standard input
  -s [command]  run a shell as target user
  -U user       when listing, list specified user's privileges
  -u user       run command (or edit file) as specified user
  -V            display version information and exit
  -v            update user's timestamp without running a command
  --            stop processing command line arguments
分享到:
评论

相关推荐

    Linux 中不输入密码运行 sudo 命令的方法

    sudo命令允许受信任的...在运行sudo命令之前,系统将提示该组的每个成员输入密码。这增加了额外的安全层,是向用户授予sudo权限的首选方式。 如下图: 但是,在某些情况下,例如运行自动脚本,您可能需要配置sudoer

    sudo提权自动输入密码--java执行交互式命令

    参考了java版的expect4j,expectj的原理,进行了极大的简化,可完成基本的功能: 1,运行java代码,执行交互式命令 2,sudo提权,自动输入密码(echo "password" | sudo -S mkdir /opt/test)

    Linux命令su、sudo、sudo su、sudo -i使用和区别.doc

    sudo 与 su 两个命令的最大区别是:sudo 命令需要输入当前用户的密码,su 命令需要输入 root 用户的密码。另外一个区别是其默认行为。sudo 命令只允许使用提升的权限运行单个命令,而 su 命令会启动一个新的 shell,...

    linux sudo命令详解

    简单的说,sudo 是一种权限管理机制,管理员可以授权于一些普通用户去执行一些 root 执行的操作,而不需要知道 root 的密码。 严谨些说,sudo 允许一个已授权用户以超级用户或者其它用户的角色运行一个命令。当然,...

    sudo命令 以系统管理者的身份执行指令

    sudo 是一种权限管理机制,管理员可以授权于一些普通用户去执行一些 root 执行的操作,而不需要知道 root 的密码。 sudo 允许一个已授权用户以超级用户或者其它用户的角色运行一个命令。当然,能做什么不能做什么都...

    sudo命令及权限管理命令

    一、sudo命令 概念: sudo是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令,如...当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个

    解析PyCharm Python运行权限问题

    先通过 which python 获得 python 指令所在路径: $ which python /usr/bin/python ...第二步 让当前用户执行 sudo python 不需要输入密码执行: sudo visudo -f /etc/sudoers.d/python 此时会自动创建 /etc/

    浅析Ubuntu Linux Server的用户安全问题

    启用root帐号仅需运行sudo passwd root,然后根据提示输入密码即可激活root。如果要关闭root用户,仅需运行sudo passwd –l root即可。Root帐号的密码和普通用户使用sudo的密码没有任何联系。root帐号和普通帐号的...

    三次密码错误退出系统

    用的codeblocks软件,三次输入密码,如果正确则继续,否则会强制退出系统。应用的C++语言,运行很是完美,适合初学者参考学习借鉴

    Linux sudo命令的概念与使用

    1.sudo介绍  sudo是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令,如halt,reboot,su等等。...当用户调用sudo并且输入它的密码时,用户获得了一张

    sud:极简sudo替代

    如果内置了PAM支持,则它可能还会要求您输入确认密码。 动机 该软件是对主要Linux和BSD发行版所采用的sudo工具的直接响应,同时增加了其复杂性并。 考虑到我们一直我打算借助SUD最终行动起来并创新这一发展领域。 ...

    Linux实用“sudo”配置选项

    无论是Linux还是其他类的UNIX系统,都只允许root用户运行全部命令并执行软件包的安装、更新、移除以及其他一些会对系统造成重要修改的特定操作。...  而后提示该调用用户输入密码(通常为该用户的密码,也可为目标

    Linux下的十项实用“sudo”配置选项

    无论是Linux还是其他类的UNIX系统,都只允许root用户运行全部命令并执行软件包的安装、更新、移除以及其他一些会对系统造成...而后提示该调用用户输入密码(通常为该用户的密码,也可为目标用户的密码,或者以NOPASSW

    iOS程序调试工具simject.zip

    simject 的安装(需要安装最新版本的Theos)git clone https://github.com/angelXwind/simject.gitcd simject/make setup注:在此过程中,你需要通过sudo输入密码登录。请注意,当你输入密码时什么也不显示,这...

    myxrgsu锐捷校园网登陆客户端

    ...cd myxrgsu 将lib中的文件拷贝到 /usr/lib中: ...运行程序 sudo myxrgsu 前两个是输入登陆锐捷的用户名和密码 DHCP 选择 1 使用DHCP 其他都默认0 博客地址http://blog.csdn.net/a8887396/article/details/8794378

    MySQL的安装配置教程详细讲解.docx

    mysql安装配置教程 MySQL是一种流行的开源关系型数据库管理系统(RDBMS),用于存储和检索数据。以下是MySQL的安装和配置的...输入刚刚设置的root密码。 在Windows上安装MySQL: 1. 下载MySQL Installer: 从MySQL

    Mac下搭建php开发环境教程

    打开“系统设置偏好(System Preferences)” -&gt; “共享(Sharing)” -&gt; “Web共享(Web Sharing)”打开“终端(terminal)”,然后(注意:sudo需要的密码就是系统的root帐号密码)运行“sudo apachectl start”...

Global site tag (gtag.js) - Google Analytics