专栏首页小码农漫漫积累路linux-sudo指令配置权限

linux-sudo指令配置权限

目录

本文由刘遄老师的《Linux就该这么学》摘抄整理而成,写成博客方便自己后期查阅 该书非常棒,语言简练,通俗易懂,非常推荐,你可以点连接去学习~

sudo

应用场景与常识

尽管使用su命令后,普通用户可以完全切换到root管理员身份来完成相应工作,但这将暴露root管理员的密码,从而增大了系统密码被黑客获取的几率,这显然并不是最安全的方案。

接下来将介绍如何使用sudo命令把特定命令的执行权限赋予给指定用户,这样既可保证普通用户能够完成特定的工作,也可以避免泄露root管理员密码。

我们要做的就是合理配置sudo服务,以便兼顾系统的安全性和用户的便捷性。

sudo服务的配置原则也很简单 => 在保证普通用户完成相应工作的前提下,尽可能少地赋予额外的权限。

sudo命令用于给普通用户提供额外的权限来完成原本root管理员才能完成的任务

格式:sudo [参数] 命令名称

sudo 指令可选参数

参数

作用

-h

列出帮助信息

-l

列出当前用户可执行的命令

-u 用户名或UID值

以指定的用户身份执行命令

-k

清空密码的有效时间,下次执行sudo时需要再次进行密码验证

-b

在后台执行指定的命令

-p

更改询问密码的提示语

sudo 的功能

总结来说,sudo命令具有如下功能:

  • 限制用户执行指定的命令
  • 记录用户执行的每一条命令
  • 配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数
  • 验证密码的后5分钟内(默认值)无须再让用户再次验证密码

当然,如果担心直接修改配置文件会出现问题,则可以使用sudo命令提供的visudo命令来配置用户权限。

当然,如果担心直接修改配置文件会出现问题,则可以使用sudo命令提供的visudo命令来配置用户权限。(只有root管理员才可以使用visudo命令编辑sudo服务的配置文件。)

visudo: >>> /etc/sudoers: syntax error near line 111 <<<
What now?
Options are:
(e)dit sudoers file again
(x)it without saving changes to sudoers file
(Q)uit and save changes to sudoers file (DANGER!)

使用visudo命令配置sudo命令的配置文件时,其操作方法与Vim编辑器中用到的方法一致,因此在编写完成后记得在末行模式下保存并退出。

在sudo命令的配置文件中,按照下面的格式将第99行(大约)填写上指定的信息:

谁可以使用 允许使用的主机=(以谁的身份) 可执行命令的列表

[root@linuxprobe ~]# visudo
 96 ##
 97 ## Allow root to run any commands anywhere
 98 root ALL=(ALL) ALL
 99 linuxprobe ALL=(ALL) ALL

在填写完毕后记得要先保存再退出,然后切换至指定的普通用户身份,此时就可以用sudo -l命令查看到所有可执行的命令了

(下面的命令中,验证的是该普通用户的密码,而不是root管理员的密码,请读者不要搞混了):

[root@linuxprobe ~]# su - linuxprobe
Last login: Thu Sep 3 15:12:57 CST 2017 on pts/1
[linuxprobe@linuxprobe ~]$ sudo -l
[sudo] password for linuxprobe:此处输入linuxprobe用户的密码
Matching Defaults entries for linuxprobe on this host:
requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS
DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1
PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE
LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY
LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL
LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User linuxprobe may run the following commands on this host:
(ALL) ALL

接下来是见证奇迹的时刻!作为一名普通用户,是肯定不能看到root管理员的家目录(/root)中的文件信息的,但是,只需要在想执行的命令前面加上sudo命令就可以了:

[linuxprobe@linuxprobe ~]$ ls /root
ls: cannot open directory /root: Permission denied
[linuxprobe@linuxprobe ~]$ sudo ls /root
anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures Templates
Desktop Downloads Music Public Videos

效果立竿见影!

但是考虑到生产环境中不允许某个普通用户拥有整个系统中所有命令的最高执行权(这也不符合前文提到的权限赋予原则,即尽可能少地赋予权限),因此ALL参数就有些不合适了。

因此只能赋予普通用户具体的命令以满足工作需求,这也受到了必要的权限约束。

如果需要让某个用户只能使用root管理员的身份执行指定的命令,切记一定要给出该命令的绝对路径,否则系统会识别不出来。

我们可以先使用whereis命令找出命令所对应的保存路径,然后把配置文件第99行的用户权限参数修改成对应的路径即可:

[linuxprobe@linuxprobe ~]$ exit
logout
[root@linuxprobe ~]# whereis cat
cat: /usr/bin/cat /usr/share/man/man1/cat.1.gz /usr/share/man/man1p/cat.1p.gz
[root@linuxprobe ~]# visudo
 96 ##
 97 ## Allow root to run any commands anywhere
 98 root ALL=(ALL) ALL
 99 linuxprobe ALL=(ALL) /usr/bin/cat

在编辑好后依然是先保存再退出。再次切换到指定的普通用户,然后尝试正常查看某个文件的内容,此时系统提示没有权限。这时再使用sudo命令就可以顺利地查看文件内容了:

[root@linuxprobe ~]# su - linuxprobe
Last login: Thu Sep 3 15:51:01 CST 2017 on pts/1
[linuxprobe@linuxprobe ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
[linuxprobe@linuxprobe ~]$ sudo cat /etc/shadow
root:$6$GV3UVtX4ZGg6ygA6$J9pBuPGUSgZslj83jyoI7ThJla9ZAULku3BcncAYF00Uwk6Sqc4E36MnD1hLtlG9QadCpQCNVJs/5awHd0/pi1:16626:0:99999:7:::
bin:*:16141:0:99999:7:::
daemon:*:16141:0:99999:7:::
adm:*:16141:0:99999:7:::
lp:*:16141:0:99999:7:::
sync:*:16141:0:99999:7:::
shutdown:*:16141:0:99999:7:::
halt:*:16141:0:99999:7:::
mail:*:16141:0:99999:7:::
operator:*:16141:0:99999:7:::
games:*:16141:0:99999:7:::
ftp:*:16141:0:99999:7:::
nobody:*:16141:0:99999:7:::
………………省略部分文件内容………………

不知道你有没有发现,每次执行sudo命令后都会要求验证一下密码。虽然这个密码就是当前登录用户的密码,但是每次执行sudo命令都要输入一次密码其实也挺麻烦的,这时可以添加NOPASSWD参数,使得用户执行sudo命令时不再需要密码验证

[linuxprobe@linuxprobe ~]$ exit
logout
[root@linuxprobe ~]# whereis poweroff
poweroff: /usr/sbin/poweroff /usr/share/man/man8/poweroff.8.gz
[root@linuxprobe ~]# visudo
 96 ##
 97 ## Allow root to run any commands anywhere
 98 root ALL=(ALL) ALL
 99 linuxprobe ALL=NOPASSWD: /usr/sbin/poweroff

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Django-下载安装-配置-创建Django项目-三板斧简单使用

    The web framework for perfectionists with deadlines.

    suwanbin
  • python以ATM+购物车剖析一个项目的由来及流程

    suwanbin
  • MySQL-注释-Navicat基本使用-复杂查询练习题-解题思路-pymysql操作数据库-SQL注入-05

    我们使用 navicat 这个数据库图形化界面管理软件来简化数据库操作,提高开发效率

    suwanbin
  • 如何在Ubuntu 16.04上添加和删除用户

    您应该知道最基本任务之一是如何在新的Linux服务器上添加和删除用户。当您创建新系统时,您通常(例如在DigitalOcean Droplets上)默认情况下仅...

    一步
  • Debian入门教程:删除和授予用户Sudo权限

    启动新服务器时,会创建一个默认帐户命名为root。此用户具有完整系统的访问权限,应仅用于管理任务。作为根用户,这个账户对你的系统都没有限制,虽然root用户管理...

    angel_郁
  • su和sudo之间的区别以及如何在Linux中配置sudo

    张尧博客
  • 经典算法巡礼(二) -- 排序之选择排序

    选择排序,如冒泡排序一样,从名字中即可大概猜测其排序的原理。其工作原理就是从未排序的数组中选出最大(小)的元素,将其放置至数组的首(尾)部,重复此过程直至没有未...

    jiezhu
  • Linux中配置sudo免密钥

    今天周五,又是一个周中最美好的时候,因为明天不用上班啊,可以干自己想干的事情,想想就激动的不行。

    AsiaYe
  • 私域流量要回避的大坑

    很多企业欲将业务的中心从渠道转到用户身上,认为要了解用户喜好,和用户做一对一的互动,让其变成客户同时带来新客户。在移动互联网时代社会网络构建与消费者的直接连接,...

    用户6806031
  • Linux sudo权限提升漏洞(CVE-2019-14287)

    因为需要用户拥有root权限,这也意味着用户的sudoers中的runas说明符中具有特殊值ALL

    天钧

扫码关注云+社区

领取腾讯云代金券