Linux系统中有许多的系统命令和服务为了安全性考虑,因此只有root超级用户才可以去使用。如果普通用户需要做此类操作,则可以使用su - 命令(减号(-)指完全切换到新的用户,即把环境变量信息也变更为新的用户,而不保留原始的用户信息)切换到root帐号来操作,但是每次得输入root帐号的密码,无疑会暴露了root超级管理员的密码。因此我们可以使用sudo程序来把特定命令的执行权限赋予给指定的用户,这样既可保证了正常工作的同时也避免了泄露root超级用户密码。

使用 visudo 命令或 vi编辑/etc/sudoers 配置文件
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
rusky ALL=(ALL) ALL --添加这一行

rusky 允许使用sudo的用户名
ALL 允许任何终端(任何机器)使用sudo
(ALL) 允许以任何用户执行sudo
ALL 允许sudo权限执行所有命令

测试:

[root@rhel7 ~]# su - rusky
Last login: Fri Jul 21 04:29:02 EDT 2017 on pts/0
[rusky@rhel7 ~]$ ls /root/
ls: cannot open directory /root/: Permission denied
[rusky@rhel7 ~]$ sudo ls /root --使用sudo来查看/root目录文件
[sudo] password for rusky:
anaconda-ks.cfg Desktop Documents Downloads Music Pictures Public Templates Videos
[rusky@rhel7 ~]$ shutdown
Must be root.
[rusky@rhel7 ~]$ sudo shutdown --使用sudo来关机
Shutdown scheduled for Fri 2017-07-21 04:32:17 EDT, use 'shutdown -c' to cancel.
[rusky@rhel7 ~]$
Broadcast message from root@rhel7.rusky.com (Fri 2017-07-21 04:31:17 EDT): The system is going down for power-off at Fri 2017-07-21 04:32:17 EDT!

例:rusky属于admin组
1. 如果想把admin组的用户都sudo不用密码那么可以将这一行换为:
%admin ALL=(ALL) NOPASSWD: NOPASSWD ALL

2. 如果仅仅想让rusky用户sudo不需密码,则可修改为如下行:
rusky ALL = (ALL) NOPASSWD: ALL

3. 如果让rusky用户sudo不用密码即可执行某几个命令,可以写成这样:
rusky ALL = NOPASSWD: /usr/bin/abc.sh, /usr/sbin/adduser

注意:有时添加"rusky ALL = NOPASSWD: ALL"这样一行;但是,rusky执行sudo时还是需要输入密码,这是为什么?
原来是这一行在"%admin ALL=(ALL) ALL"组策略之前,后面的组配置覆盖了前面的配置,而rusky属于admin组,所以需要密码。
这时,只需要将%admin行用#注释掉即可。

Linux 系统sudo命令的更多相关文章

  1. 【转载】Linux系统下命令行连接蓝牙设备 查看查找 蓝牙

    Linux系统下命令行连接蓝牙设备 2018年11月26日 10:47:27 Zz笑对一切 阅读数:741   1.打开系统蓝牙 sudo service bluetooth start 1 进入bl ...

  2. 查看linux系统版本命令 (转)

    查看linux系统版本命令 分类: Linux 知识小结2011-10-10 15:26 240162人阅读 评论(9) 收藏 举报 linuxredhatdebianx86susesun 一.查看内 ...

  3. Linux系统ifconfig命令找不到,centos ifconfig Command not found

    centos ifconfig Command not found,Linux系统ifconfig命令找不到 >>>>>>>>>>>& ...

  4. Linux系统基础命令

    这是看itercast的学习笔记 Linux系统基础命令 日期时间 命令date用以查看.设置当前系统时间:格式化显示时间: +%Y--%m--%d 命令hwclock(clock)用以显示硬件时钟时 ...

  5. Linux系统-解压缩命令集合

    Linux系统-解压缩命令集合 linux zip命令 zip -r myfile.zip ./* 将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件. ...

  6. LINUX系统VMSTAT命令详解

    linux系统vmstat命令详解 [转自 https://www.cnblogs.com/wensiyang0916/p/6514820.html] vmstat 1    1表示每秒采集一次vms ...

  7. Linux系统——awk命令

    awk命令不仅仅是Linux系统的命令,也是一种编程语言,用来处理数据和生成报告(Exel),处理的数据可以是一个或多个文件(标准输入和管道获取标准输入).可在命令行上编辑操作,也可以写成awk程序运 ...

  8. 给大家介绍一下linux系统高级命令

    输出重定向(mip.0834jl.com) ;覆盖文件内容 回声' 123 ' 测试;覆盖原始内容 回声' 123 ' 测试;原始存在(共存) echo 'ken2 '(www.jl0834.com) ...

  9. spark实验(一)--linux系统常见命令及其文件互传(2)

    2.使用 Linux 系统的常用命令 启动 Linux 虚拟机,进入 Linux 系统,通过查阅相关 Linux 书籍和网络资料,或者参考 本教程官网的“实验指南”的“Linux 系统常用命令”,完成 ...

随机推荐

  1. Tomcat报BAD packet signature 18245错误的原因

    今天在启动服务器时,报了一个BAD packet signature 18245错误 详细错误如下: 2009-6-5 11:09:11 org.apache.jk.common.MsgAjp pro ...

  2. [转]C++之多态性与虚函数

    面向对象程序设计中的多态性是指向不同的对象发送同一个消息,不同对象对应同一消息产生不同行为.在程序中消息就是调用函数,不同的行为就是指不同的实现方法,即执行不同的函数体.也可以这样说就是实现了“一个接 ...

  3. C++运算符重载(成员函数方式)

    一.运算符重载 C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作.如果将C++中这些现存的运算符直接作用于用户自定义的类型数据上,会得到什么样 ...

  4. ubuntu下如何查看软件安装目录以及安装版本

    1)aptitude show 软件名 例如aptitude show kde-runtime 显示如下 ****@ubuntu:~$ aptitude show kde-runtime 软件包: k ...

  5. 通过java读取HDFS的数据 (转)

    原文链接:通过java读取HDFS的数据 通过JAVA直接读取HDFS中的时候,一定会用到FSDataInputStream类,通过FSDataInputStream以流的形式从HDFS读数据代码如下 ...

  6. 使用自由软件Icarus Verilog Simulator进行仿真

    Icarus Verilog Simulator(http://iverilog.icarus.com/home)使用iverilog作为源代码编译器,编译生成vvp程序文本,使用vvp作为运行时引擎 ...

  7. 网站日志访问记录组件UserVisitLogsHelp开源了!

    之前在<一种基于自定义代码记录用户访问日志在Sharepoint网站的应用方法!>一文利用本人几年前的开发的UserVisitLogsHelp组件进行了网站用户访问日志记录,可用于网站分析 ...

  8. pytorch hook使用

    由于pytorch会自动舍弃图计算的中间结果,所以想要获取这些数值就需要使用钩子函数. 钩子函数包括Variable的钩子和nn.Module钩子,用法相似. import torch from to ...

  9. Memento 备忘录 快照模式 MD

    备忘录模式 简介 在不破坏封装的前提下,捕获一个对象的[内部状态],并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态. 角色: 发起人Originator:要被备份的成员,它提供 ...

  10. vue-router路由知识补充

    1.render函数 var app = new Vue({ el: '#app', router, render: h => h(App) //新添加的函数操作 }) 我们新加了render: ...