sudo命令使用的几个场景

在linux系统下,普通用户无法直接执行root用户权限下的命令,如果想让普通用户执行只有root用户才能执行的操作命令。
下面罗列下经常使用sudo命令的几个场景:

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

那么哪些用户可以临时获得root权限呢?这就需要在/etc/sudoers文件中进行配置(或者直接使用visudo命令,不过只能在root用户下执行):
(1)授权给单个用户:
[[email protected] ~]# visudo
.....
# User privilege specification
wangshibo ALL=(ALL) ALL
参数解释:
1)第一个字段wangshibo指定的是用户:可以是用户名,也可以是别名。每个用户设置一行,多个用户设置多行,也可以将多个用户设置成一个别名后再进行设置。
2)第二个字段ALL指定的是用户所在的主机:可以是ip,也可以是主机名,表示这个sudo设置后的文件即/etc/sudoers只在这个主机上生效,ALL表示在所有主机上都生效!限制的一般都是本机,也就是限制使用这个文件的主机;如果指定为"192.168.1.88="表示这个文件只有在这台主机上生效,如果拷贝到别的机子上是不起作用的!一般都指定为"ALL"表示所有的主机,不管文件拷到那里都可以用。
3)第三个字段(ALL)括号里指定的也是用户:指定以什么用户身份执行sudo,即使用sudo后可以享有所有账号下的权限。如果要排除个别用户,可以在括号内设置,比如ALL=(ALL,!root,!ops)。也可以设置别名
4)第四个字段ALL指定的是执行的命令:即使用sudo后可以执行所有的命令。也可以设置别名。NOPASSWD: ALL表示使用sudo的不需要输入密码。

如果我们想让用户wangshibo只能在本主机(主机名为test-huanqiu)以root账户执行/bin/chown、/bin/chmod 两条命令,那么就应该这样配置:
[[email protected] ~]# visudo
.......
# User privilege specification
wangshibo test-huanqiu=(root) /bin/chown,/bin/chmod
如果wangshibo用户登录之后运行sudo命令,不满足上面三个条件命令均失败。

(2)授权给用户组:
[[email protected] ~]# visudo
.....
# 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来挂载:
[[email protected] ~]$ sudo mount /dev/sda7 /mnt
[sudo] password for wangshibo:
首次使用会要求你输入当前用户的密码,系统确实输入正确即以 root 权限来执行 mount 命令,接下来一段时间(默认为5分钟)再次使用 sudo 命令就不需要输密码了。

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

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

实例说明:
使用guohuihui用户在/tmp目录下创建了一个文件,默认情况下,wangshibo用户对这个文件是没有操作权限的
[[email protected] ~]# su - guohuihui
[[email protected] ~]$ vim /tmp/guohuihui
[[email protected] ~]$ cat /tmp/guohuihui
sdfasdfsd

现在给wangshibo用户设置了sudo权限,编辑上面文件时,忘了在命令前面加sudo命令了
[[email protected] ~]$ vim /tmp/guohuihui
编辑完,直接输入w保存时,会报错说没有权限:
"/tmp/guohuihui"
"/tmp/guohuihui" E212: Can‘t open file for writing
Press ENTER or type command to continue

这个时候可以按:w !sudo tee %就可以正常保存了。轻松搞定!!效果如下:
:w !sudo tee %                   //回车
sdfasdfsd
12345666

W12: Warning: File "/tmp/guohuihui" has changed and the buffer was changed in Vim as well
See ":help W12" for more info.
[O]K, (L)oad File:

这个时候回车,然后再输入q退出,查看发现刚才输入的内容已经保存下来了:
[[email protected] ~]$ cat /tmp/guohuihui
sdfasdfsd
12345666

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

其实,也大可不必这样,巧妙的做法是:
只要输入 sudo !! 即可,这里的 !! 代表上一条命令。如:

实例说明:
[[email protected] ~]$ cat /etc/sudoers|tail -3
cat: /etc/sudoers: Permission denied
[[email protected] ~]$ sudo !!
sudo cat /etc/sudoers|tail -3

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d

----------------------------------------------------------
在linux终端下:
输入!! 表示上一个命令
输入Esc+.(符号点) 表示上一个命令中的最后一部分
cd - 表示切换到上一个路径下
cd和cd ~ 表示切换到当前用户家目录下
----------------------------------------------------------

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

实例说明:
[[email protected] ~]$ sudo cd cd /sys/kernel/debug/
sudo: cd: command not found
在这种情况,我们又没有root账户的密码,我们怎样执行该命令呢?
有种办法就是使用sudo获得root shell 的权限,然后在root shell中执行该命令。
进入root shell 很简单,输入sudo bash确认本用户的密码即可(如果/etc/sudoers里配置了无密码使用sudo,就不需要驶入密码),此时你会发现命令提示符显示当前 root。一旦获得root shell,你就可以执行任何命令而不需要在每条命令前输入sudo了。
[[email protected] ~]$ sudo bash                   //或者sudo su - 或者 sudo -s,其实就使用sudo命令切换到root下
[[email protected] wangshibo]# cd /sys/kernel/debug/
[[email protected] debug]#

我们可以使用 type 命令来查看命令的类型,如:
[[email protected] ~]$ type cd
cd is a shell builtin
[[email protected] ~]$ type umask
umask is a shell builtin

5.sudo 操作记录日志
作为一个Linux系统的管理员,不仅可以让指定的用户或用户组作为root用户或其它用户来运行某些命令,还能将指定的用户所输入的命令和参数作详细的记录。
而sudo的日志功能就可以用户跟踪用户输入的命令,这不仅能增进系统的安全性,还能用来进行故障检修。
但是要记录sudo的日志还要一些简单的配置:
1)创建sudo日志文件
我们将sudo日志文件放置在/var/log/sudo.log 文件中:
[[email protected] ~]$ sudo touch /var/log/sudo.log
2)修改/etc/rsyslog.conf配置文件(有些版本系统的这个文件名为/etc/syslog.conf),在该文件加入下面一行:
[[email protected] ~]$ sudo vim /etc/rsyslog.conf
.........
local2.debug /var/log/sudo.log //空白不能用空格,必须用tab
3)修改/etc/sudoers 配置文件
注意网上很多关于sudo日志文件配置都缺少这一步!在该文件中加入下面一行:
[[email protected] ~]$ sudo vim /etc/sudoers
........
Defaults logfile=/var/log/sudo.log
4)重启 syslog 服务:
[[email protected] ~]$ sudo service rsyslog restart

5)最后,就可以查看sudo日志记录了:
经过上面的配置,sudo的所有成功和不成功的sudo命令都记录到文件/var/log/sudo.log 中。
例如我上面运行几条sudo 命令之后,查看该文件的记录如下:
[[email protected] ~]$ cat /var/log/sudo.log
Dec 3 11:28:38 : wangshibo : TTY=pts/0 ; PWD=/home/wangshibo ; USER=root ;
COMMAND=/sbin/service rsyslog restart
Dec 3 11:29:49 : wangshibo : TTY=pts/0 ; PWD=/home/wangshibo ; USER=root ;
COMMAND=/bin/cat /etc/passwd
Dec 3 11:29:56 : wangshibo : TTY=pts/0 ; PWD=/home/wangshibo ; USER=root ;
COMMAND=/usr/bin/vim /root/a.sh
Dec 3 11:30:35 : guohuihui : user NOT in sudoers ; TTY=pts/0 ;
PWD=/home/guohuihui ; USER=root ; COMMAND=/usr/bin/vim /root/a.shsa
Dec 3 11:30:47 : guohuihui : user NOT in sudoers ; TTY=pts/0 ;
PWD=/home/guohuihui ; USER=root ; COMMAND=/usr/bin/vim /root/a.sh

linux下的其他权限可以参考:linux系统下的权限知识梳理

时间: 2024-10-08 23:51:07

sudo命令使用的几个场景的相关文章

linux sudo 命令

简单的说,sudo 是一种权限管理机制,管理员可以授权于一些普通用户去执行一些 root 执行的操作,而不需要知道 root 的密码.严谨些说,sudo 允许一个已授权用户以超级用户或者其它用户的角色运行一个命令.当然,能做什么不能做什么都是通过安全策略来指定的.sudo 支持插件架构的安全策略,并能把输入输出写入日志.第三方可以开发并发布自己的安全策略和输入输出日志插件,并让它们无缝的和 sudo 一起工作.默认的安全策略记录在 /etc/sudoers 文件中.而安全策略可能需要用户通过密码

3周第3次课 su命令 sudo命令 限制root远程登录

一. su命令 适合情景:多用户之间的切换,登入到相应用户环境,执行命令.类似于 windows 的切换用户 扩展命令:id . whoami  查看当前用户名 语法 : su [-] [操作命令] username 快捷键:ctrl-d  退出当前用户 常用操作示范: 1. 加"-"的意思是,切换用户的同时切换环境变量,不跟 工作目录停留在当前,切换不彻底 #su - aming 切换到aming用户,此时提示符由"#"变成"$" 2.在普通用

sudo命令: 在其他用户下操作root用户权限

一. 场景: 在某个远程服务器 A 上,用 账户1 登陆, 想要在root用户的目录下创建一个 .sh文件, 如果直接 用 touch test.sh 创建,会提示权限不足 此时可以用sudo命令: 用法(sudo+空格+刚才的命令),例如: 1. 创建test.sh文件 sudo touch test.sh 2.编辑sh文件 sudo vi test.sh 3.保存 (1)保存退出 敲击esc, 然后输入 :wq ,回车退出 (2)不保存直接退出 敲击esc,然后输入:q! 4. 添加可执行权

Linux操作系统下的Sudo命令

查看.修改或者执行某些命令需要root用户的权限,如果不想直接切换到root用户,就可以使用sudo命令.sudo命令用于针对单个命令授予临时权限.sudo仅在需要时授予用户权限,减少了用户因为错误执行命令损坏系统的可能性.使用方法是在原有命令之前加上sudo+空格.用法示例:以root用户的身份修改主机名为zhidao$ sudo hostname zhidao

3.7 su命令 3.8 sudo命令 3.9 限制root远程登录

3.7 su命令 3.8 sudo命令 3.9 限制root远程登录 3.7 su命令 su aming su - aming 切换用户的时候要加上 su - 这样才切换的彻底 切换到user5下面 因为之前 user5 的用户被锁定了 在切换到root下 更改下user5 的密码 但是前缀显示 -bash-4.5  是因为user5 用户没有家目录 先查看变user5的 所属主 所属组 退出aming 进入root用户 创建一个 目录 但是这样 前缀还是一样,是因为 /home/user5/

sudo命令

某个用户能够以另外一个用户的身份通过哪些主机执行什么命令 1,文件在/etc/sudoers 打开的命令是:visudo 一个sudo条目:who which_hosts=(runas) commands 别名必须全部而且只能使用 大写英文字母的组合 用户别名:User_Alias USERRADMIN= 用户的用户名 组名:使用%引导 还可以包含其他已经用户别名 Host_Alias 主机名 IP 网络地址 其他主机别名Runas_Alias: 用户名 %组名 其它的Runas别名Cmnd_A

使用sudo命令

1.Centos7 默认所有用户都不可以使用sudo,我希望让经理组中的用户可以使用sudo命令,并且使用sudo命令不需要输入密码. Visudo –f /etc/sudoers %jingli   ALL=(ALL)          NOPASSWD: ALL

sudo命令詳解

1.sudo命令功能:控制指定用戶 通過哪些遠程主機 以哪個用戶身份 执行哪些命令 sudo配置文件在/etc/sudoers /etc/sudoers:輸寫格式 誰 通過遠程主機=(以誰的身份) 執行這些命令 例如:root ALL=(ALL) ALL root用戶通過任意遠程主機以所有用戶身份執行所有命令 注意:man sudoers 可查看详细的输写格式 2.別名定義:別名取名必須全部使用大寫字母,當后面有多個,用逗號隔開 别名之间可以嵌套. 用户别名     User_Alias    

[转]linux sudo 命令

转自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/11/11/2245341.html “Sudo”是Unix/Linux平台上的一个非常有用的工具,它允许系统管理员分配给普通用户一些合理的“权利”,让他们执行一些只有超级用户或其他 特许用户才能完成的任务,比如:运行一些像mount,halt,su之类的命令,或者编辑一些系统配置文件,像/etc/mtab,/etc /samba/smb.conf等.这样以来,就不仅减少了root