• (6)sudo命令详解(每周一个linux命令系列)


    首先说句抱歉,最近事情比较复杂,停更了一阵子。我又回来啦

    多用户管理

    我们常用的windows个人系统虽然可以设置多用户,但是实际上是不可以多用户同时登陆的(这个我实验过,我以前用windows服务器的时候,多用户可以同时登陆,自以为个人版的也可以,结果啪啪打脸啊),这就使得这功能很鸡肋,而且大家也很少在windows中使用多用户这个功能。
    而linux是多用户系统,不同用户可以同时登陆进行操作,私以为linux的用户管理要比windows好太多了,当然也略复杂。其中最主要的就是,并不是每个人都有最高权限,因为linux系统认为你有足够的能力管理自己的系统,系统本身不会对你的行为做限制,当然也不为你的行为买单。
    我们认为用户一般分为两类,一类是root用户,拥有最高权限,一类是普通用户,拥有不完全的权限,普通用户可以在有需要的时候,提升权限来执行命令。

    sudo命令

    sudo就是这样一个命令,他可以做的事情就是,可以提权到另一个用户来执行这个用户可以执行的任务。

    命令格式:

    sudo -u <用户名> <命令> //如果省略-u 则默认为root用户
    

    注:如果需要输入密码,输入的是当前用户的密码。提权到新用户身份,命令是以新用户身份来执行的,因此创建文件和文件夹等属于此用户。

    su <用户名> //用来切换用户  如果需要输入密码,输入的是要切换到的用户的密码
    

    给用户增加sudo权限

    useradd命令上一个文章已经提过,这样创建完用户就是普通用户,如果想给此用户增加sudo权限应该怎么操作呢?

    我们可以使用visudo命令,出于安全考虑,需要在root权限下才可以运行,这很好理解吧。

    输入命令后打开一个临时文件:"/etc/sudoers.tmp"

    也表明了这个权限的管理是记录在sudoers文件中,在centos中一般放在 /etc/sudoers文件中,我们也可以通过vi /etc/sudoers来操作,但是不建议这样做,因为使用visudo会有错误检测和提示,vi则没有

    文件如下:

    ## Allow root to run any commands anywhere 
    root	ALL=(ALL) 	ALL
    
    ## Allows members of the 'sys' group to run networking, software, 
    ## service management apps and more.
    # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
    
    ## Allows people in group wheel to run all commands
    %wheel	ALL=(ALL)	ALL
    
    ## Same thing without a password
    # %wheel	ALL=(ALL)	NOPASSWD: ALL
    
    ## Allows members of the users group to mount and unmount the 
    ## cdrom as root
    # %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
    
    ## Allows members of the users group to shutdown this system
    # %users  localhost=/sbin/shutdown -h now
    
    ## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
    #includedir /etc/sudoers.d
    

    上面并不是全部文件,我们只讲解其中一部分

    先说一下这两条

    ## Allow root to run any commands anywhere 
    root	ALL=(ALL) 	ALL
    ## Allows people in group wheel to run all commands
    %wheel	ALL=(ALL)	ALL
    
    

    这些代码就是用来控制权限的,代码格式为:

    源用户/组    主机 =  [(目的用户:组)] [是否需要输入密码验证] [命令1,命令2,...]
    
    其中ALL可以代替所有主机,或者所有命令。源用户/组的位置,如果是带'%'则代表是组,不带代表用户 其中命令和
    
    示例:
        //wheel组中的用户,通过任意主机登录,可以切换到任意其他用户,不需要密码  可以通过sudo执行所有命令
        %wheel	ALL=(ALL:ALL)	NOPASSWD: ALL   
        //用户张三 通过任意主机登录,可以切换到sudo组中的任意用户,不需要密码 可以以通过sudo执行所有命令
        zhangsan	ALL=(ALL:sudo)	NOPASSWD: ALL
    
    也可以不写其中的【目的用户和组】和【是否需要密码验证】的部分 如下:
        root   ALL=(ALL:ALL) ALL
        %wheel ALL=(ALL) ALL
    或者控制职能执行一些命令例如只能以通过sudo执行top命令(只是举个例子,当然普通用户也可以执行top命令)
    
        checktop ALL= /usr/bin/top  //这里最好使用绝对路径,否则可能会导致可以通过sudo执行一些其他路径下的同名程序带来安全隐患
    可以使用'*'作为通配符,可以使用'!'排除
        //可以运行/usr/bin/下的所有程序,但是/usr/bin/top除外
        checktop ALL=/usr/bin/*,!/usr/bin/top
    
    

    另外我们注意到其中有一行:#includedir /etc/sudoers.d

    这使得sudoers文件包含了/etc/sudoers.d中不以~号结尾的文件和不包含.号的文件,这些文件都会被解析成sudoers的配置加载。注意这一句的格式是固定的,就像是c文件中的#include类似。

    补充:

    查看命令的绝对路径 使用

    which <命令>

  • 相关阅读:
    Mbs Framework 简介
    回应老赵: 适合C# Actor的消息执行方式 中看也中用的解决方案
    Mini 容器学习笔记5—— 组件的获取
    JS控制文本框只能输入N个字符.
    【转】外挂编写原理
    【转】集合小节
    CSS样式的filter(滤镜效果)
    系统变量(%SystemRoot% ,%windir% ,%temp%,%system%)的表示方法
    客户端调用服务器控件
    Flash MX 认证考试(样题)
  • 原文地址:https://www.cnblogs.com/vinter/p/10272805.html
Copyright © 2020-2023  润新知