文档章节

sudo命令情景分析

流云cc
 流云cc
发布于 2016/11/16 20:01
字数 1813
阅读 17
收藏 0
点赞 0
评论 0

来自:hazir

转载自:http://www.cnblogs.com/hazir/p/sudo_command.html

 

Linux 下使用 sudo 命令,可以让普通用户也能执行一些或者全部的 root 命令。本文就对我们常用到 sudo 操作情景进行简单分析,通过一些例子来了解 sudo 命令相关的技巧。

情景一:用户无权限执行 root 命令

普通用户登录 shell 之后,如果自身没有权限访问某个文件或执行某个命令时,若该用户获得root授权,那么就可以在需要执行的命令之前加上 sudo,临时切换到root用户的权限,完成相关的操作。在sudo于1980年前后被写出之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须要先告知超级用户的密码,而sudo使一般用户不需要知道超级用户的密码即可获得权限。

那么哪些用户可以临时获得 root 权限呢?这就需要在 /etc/sudoers 文件中进行配置:

授权给单个用户:

# User privilege specification
guohl   ALL=(ALL) ALL

上面这个例子中:

  • guohl:允许使用 sudo 的用户名
  • ALL:允许从任何终端(任何机器)使用 sudo
  • (ALL):允许以任何用户执行 sudo 命令
  • ALL:允许 sudo 权限执行任何命令

如果我们想让用户 test 只能在本主机(主机名为guohl-pc)以 root 账户执行/bin/chown、/bin/chmod 两条命令,那么就应该这样配置:

# User privilege specification
test   guohl-pc=(root) /bin/chown,/bin/chmod

如果test 登录之后运行 sudo 命令,不满足上面三个条件命令均失败。

授权给用户组:

# Allow members of group sudo to execute any command
# (Note that later entries override this, so you might need to move it further down)
%sudo ALL=(ALL) ALL

和授权给单个用户类似,只不过将用户名在这里换成%组名,所有在该组中的用户都按照此规则进行授权。对于该例,所有在 sudo 组内的用户都有在任何终端(第一个ALL)、以任何用户(第二个ALL)、执行任何命令(第三个ALL)的权限,查看 /etc/group 文件可以知道哪些用户属于 sudo 组。

举例:

如果当前帐号在 /etc/sudoers 文件中被授予 sudo 的权限,那么你就可以将任何 root 命令作为 sudo 命令的参数,使用 root 权限来执行该命令。举例来说,挂载一个文件系统只能由 root 来执行,但是一个普通用户也可以使用 sudo 来挂载:

$sudo mount /dev/sda7 /mnt
[sudo] password for guohailin:

首次使用会要求你输入当前用户的密码,系统确实输入正确即以 root 权限来执行 mount 命令,接下来一段时间(默认为5分钟)再次使用 sudo 命令就不需要输密码了。

情景二:vim 编辑后发现忘记使用 sudo

我们经常会遇到这样的一个囧境:使用 vim 对某个文件进行编辑,编辑完之后,按 ESC 之后回到普通模式,再按 :wq 准备保存退出时,发现没有权限对该文件进行修改,我们在使用 vim 命令时忘记在前面加 sudo 了。我就经常出现这种问题,之前的做法是只能不保存强退,再加上 sudo 重新编辑。

但是今后我们再也不需要用这么愚蠢的做法了,我们可以在 vim 的普通模式下,按 :w !sudo tee % ,这样就可以 root 权限来保存文件了,你也无需因为自己一时忘记加个 sudo 而沮丧懊恼了!

情景三:执行 root 命令忘记加 sudo

我们还会遇到这样稍微好一点的情形:输入一个长长的命令,按 Enter 之后出现无权限操作,因为我们忘记加 sudo 了。大多人的做法是按  回到上一条命令,在该命令之前加上 sudo,再执行该命令。

以后,我们无需这样了,只要输入 sudo !! 即可,这里的 !! 代表上一条命令。如:

$ head -n 4 /etc/sudoers
head: cannot open `/etc/sudoers' for reading: Permission denied

$ sudo !!
sudo head -n 4 /etc/sudoers
# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#

情景四:shell 内置命令如何使用 sudo

shell 是一个交互式的应用程序,在执行外部命令时通过 fork 来创建一个子进程,再通过 exec 来加载外部命令的程序来执行,但是如果一个命令是 shell 内置命令,那么只能直接由 shell 来运行。sudo 的意思是,以别的用户(如root)的权限来 fork 一个进程,加载程序并运行,因此 sudo 后面不能跟 shell 的内置命令,如:

$ sudo cd /sys/kernel/debugfs
sudo: cd: command not found

在这种情况,我们又没有 root 账户的密码,我们怎样执行该命令呢?有种办法就是使用 sudo 获得root shell 的权限,然后在root shell 中执行该命令。进入root shell 很简单,输入sudo bash 确认本用户的密码即可,此时你会发现命令提示符显示当前是 root。一旦获得root shell,你可以执行任何命令而不需要在每条命令前输入sudo了。

另外,常用的shell 内置命令在这里 有简单介绍,我们可以使用 type 命令来查看命令的类型,如:

$ type ls
ls is /bin/ls
$ type umask
umask is a shell builtin

情景五:sudo 操作记录日志

作为一个 Linux 系统的管理员,不仅可以让指定的用户或用户组作为root用户或其它用户来运行某些命令,还能将指定的用户所输入的命令和参数作详细的记录。而sudo的日志功能就可以用户跟踪用户输入的命令,这不仅能增进系统的安全性,还能用来进行故障检修。但是要记录sudo的日志还要一些简单的配置:

  • 创建sudo日志文件
    我们将sudo日志文件放置在 /var/log/sudo.log 文件中:

      $ sudo touch /var/log/sudo.log
  • 修改 /etc/rsyslog.conf 配置文件
    我使用系统为Ubuntu13.04 为改名字,但有些系统名为/etc/syslog.conf,注意不同发行版之间的差别,在该文件加入下面一行:

      local2.debug    /var/log/sudo.log    #空白不能用空格,必须用tab
  • 修改 /etc/sudoers 配置文件
    注意网上很多关于sudo日志文件配置都缺少这一步!在该文件中加入下面一行:
      Defaults    logfile=/var/log/sudo.log
  • 重启 syslog 服务:
      $ sudo service rsyslog restart
  • 查看 sudo 日志记录:
    经过上面的配置,sudo 的所有成功和不成功的sudo
    命令都记录到文件/var/log/sudo.log 中,例如我运行几条sudo 命令之后,查看该文件的记录如下:

      $ cat sudo.log 
      Sep 20 22:10:51 : guohailin : TTY=pts/1 ; PWD=/var/log ; USER=root ;
          COMMAND=/bin/cat /etc/sudoers
      Sep 20 22:11:36 : guohailin : TTY=pts/1 ; PWD=/var/log ; USER=root ;
          COMMAND=/usr/sbin/service rsyslog restart
      Sep 20 22:11:45 : guohailin : TTY=pts/1 ; PWD=/var/log ; USER=root ;
          COMMAND=/bin/ls
      Sep 20 22:12:08 : guohailin : TTY=pts/1 ; PWD=/var/log ; USER=root ;
          COMMAND=/bin/ls /root/

本文转载自:

共有 人打赏支持
流云cc
粉丝 0
博文 19
码字总数 4552
作品 0
太原
架构师
如何在vi中保存更改过的只读文件

是否会和我一样经常碰到这样的情景:在VIM中编辑了一个系统配置文件,当需要保存时才发现当前的用户对该文件没有写入的权限。如果已经做了很多修改,放弃保存的确很懊恼,只好先保存在用户的...

mj4738
2011/11/21
0
0
3周第3次课 su命令 sudo命令 限制root远程登录

一、 su命令 适合情景:多用户之间的切换,登入到相应用户环境,执行命令。类似于 windows 的切换用户 扩展命令:id 、 whoami 查看当前用户名 语法 : su [-] [操作命令] username 快捷键:c...

须及春
2017/11/02
0
0
如何在VIM中保存编辑的只读文件

你是否会和我一样经常碰到这样的情景:在VIM中编辑了一个系统配置文件,当需要保存时才发现当前的用户对该文件没有写入的权限。如果已经做了很多修改,放弃保存的确很懊恼,只好先保存在用户...

mj4738
2011/10/25
0
0
uboot-2009.11之nand_init()分析

下面对nand flash的初始化代码nandinit()进行分析: 1.如果定义(CONFIGCOMMANDS & CFGCMDNAND)没定义(CFGNANDLEGACY) 则startarmboot()调用driver/nand/nand.c中的nandinit(),否则如果定义(...

liufazhang
2011/10/20
0
0
避免’sudo echo x >’ 时’Permission denied’

原文:http://blog.csdn.net/hejinjingtom_com/article/details/7767127 https://stackoverflow.com/questions/6207951/bash-wrong-pipe-output-when-using-sudo-sh-c 避免’sudo echo x >’......

Tenderrain
2017/11/06
0
0
Ubuntu下安装odoo避免’sudo echo x >’ 时’Permission denied’

避免’sudo echo x >’ 时’Permission denied’ 即解决echo 命令时权限不足的问题 1 问题示例 sudo echo a > 1.txt -bash: 1.txt: Permission denied 2 问题分析: bash 拒绝这么做,说是权...

晴难自控
01/10
0
0
linux配置shadowsocks客户端

在使用ubuntu的时候,有需要翻墙的需求,那么下面介绍在linux下进行shadowsocks的客户端配置 以下内容基本上和这个链接内容一致 http://aitanlu.com/ubuntu-shadowsocks-ke-hu-duan-pei-zhi...

HillYoung
2016/02/23
30.6K
1
Linux 6.8 sudo 日志审计

公司内Linux服务器启用了SUDO权限管理,但还是有一定的风险,所以为了便于管理和后续维护,开启sudo日志审计的功能,对用户执行的sudo命令的操作行为进行记录,但又不记录其他的命令。 一、r...

lrq110120
2017/05/18
0
0
菜鸟学习之linux用户行为日志审计方案

今天学习了了sudo日志审计,专门对使用sudo命令系统的用户记录其执行的相关命令信息 说明:所谓sudo命令日志审计,不记录普通用户操作,而是记录执行sudo命令的用户操作 1、安装sudo命令,sysl...

菜鸟八哥
07/03
0
0
user is not in the sudoers file.

场景: 在CentOS中创建了一个新用户user,在调用sudo命令时,报:“user is not in the sudoers file. This incident will be reported” 错误,无法执行sudo命令。 分析: 在ubuntu中由于禁...

空心大白菜
2014/05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mybaitis 通过Mapping 实现多表查询

1.实体类 1.1 用于做多表查询的类 public class CustomerCard { private Integer id;//主键 private String cardNumber; private Integer customerId;//用户id private String customerName;......

kuchawyz
9分钟前
0
0
Java语言学习(八):集合类框架

Java中提供了各种数据集合类,这些类主要用于保存复杂结构的数据。下面将介绍常用的几种集合类的用法。 ArrayList集合可以看做一个动态的数组,比普通数组更加灵活,更适合保存未知数量的数据...

海岸线的曙光
10分钟前
0
0
SpringBoot下Redis相关配置是如何被初始化的

参考网页 SpringBoot集成Redis的原理 https://blog.csdn.net/hry2015/article/details/74276423 https://blog.csdn.net/hry2015/article/details/75451705 application.yml配置文件中的属性是......

karma123
11分钟前
1
0
数据库事务的四大特性以及事务的隔离级别

本篇讲述数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别。 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是...

Java大蜗牛
18分钟前
0
0
Spring Boot 整合 MyBatis/通用Mapper/PageHelper分页插件

整合MyBatis 整合通用Mapper 1. POM依赖配置 <properties><mapper.starter.version>2.0.3-beta1</mapper.starter.version></properties><!-- 通用Mapper --><dependency><groupId>t......

OSC_fly
27分钟前
0
0
CentOS7 双网卡绑定

环境 操作系统 CentOS7.5,禁用 NetworkManager 服务 网卡 eth0 网卡 eth1 绑定网卡 bond0 网卡 eth0 配置 修改 /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=EthernetBOOTPROTO=noneD......

Colben
29分钟前
0
0
zk实战--rpc框架集群化

在看此篇内容时需要浏览下面内容 netty实战--手写rpc框架 前文功能简介以及功能扩充 利用netty来实现一个点对点的rpc调用。客户端和服务端都是靠手写地址进行socket同学的,无法1对多,也无法...

xpbob
45分钟前
12
0
springboot 发送邮件

获取授权码 添加配置 # 账号和密码spring.mail.username=aaa@qq.comspring.mail.password=bbb# 服务器地址spring.mail.host=smtp.qq.comspring.mail.properties.mail.smtp.ssl.en...

阿豪boy
45分钟前
0
0
如何使用GNU Ring?

文章名:如何使用GNU Ring? 作者:冰焰火灵X 1079092922@qq.com 文章许可:CC BY-SA 4.0 ##1. 安装 下载GNU Ring 点击左边选择你的系统版本(这里以 GNU/Linux 为例,我使用的是Mint 18.3)...

ICE冰焰火灵X
48分钟前
4
0
深入理解springMVC

什么是spring MVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而...

Java填坑之路
54分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部