• Linux 基础教程 43-su和sudo命令


        在使用Linux系统中,有时候还需要做身份切换,这是为什么?

    • 使用普通账号:系统日常操作的好习惯
        虽然使用root对系统进行各种操作不受权限等方面的限制,但却存在重大的安全隐患,假如有人不小心输入的命令 rm -rf /。因此为了安全,一般都建议尽量以普通用户身份来进行系统日常操作,而在需要用户超级权限来管理和配置系统时才需要切换到 root用户。
    • 用较低权限启动系统服务
        相对于系统安全,我们必须要以某些系统账号执行某些程序。如MySQL,我们则可以新建一个mysql账号来专门执行MySQL服务或程序。这样可以最大限度的保证系统安全。
    • 系统安全策略限制
        为了系统安全,禁止远程以root账户登录系统是基本的安全策略手段

        基于以上考虑,在日常应用中都是使用普通账户进行登录和常用操作。如果需要维护系统或安装、更新软件时,则需要切换到root身份进行操作。而常用的方式主要有两个:

    • su:可以切换到指定的用户,如果切换到root,则需要知道root的密码
    • sudo:提前设置好sudo权限,执行以sudo 命令,则可以以root身份执行命令,相比于su而言,可以保证root密码不会泄漏。

    su

        su全称为:switch user,其主要功能为进行任何身份的切换,其常用用法如下所示:

    基本用法

    su [选项] [用户名]
    su -c 命令
    

    常用选项如下所示:

    选项 解释
    -,-l 切换身份的同时初始化HOME/SHELL/USER/LOGNAME/PATH等变量
    -c command 仅执行一次指定的命令,而后恢复原来的身份
    -m 使用当前的环境设置而不读取新用户的配置文件
    -s SHELL 运行指定的SHELL,仅支持/etc/shells中支持的SHELL

    su注意事项

    • 若要完整切换到新用户的环境,必须要使用su - username或su -l username。这种功能类似于Windows注销当前用户再登录到指定用户
    • su -,-l:如果后面不指定用户名,则默认切换至root账户。
    • 使用root切换到任意其他账户,不需要输入密码,而反过来则需要输入密码。

    用法示例

    1、切换到root

    [admin@localhost ~]$ su -
    密码:
    上一次登录:六 8月 18 18:10:46 CST 2018pts/2 上
    最后一次失败的登录:六 8月 18 18:17:04 CST 2018从 58.218.92.37ssh:notty 上
    最有一次成功登录后有 142 次失败的登录尝试。
    [root@localhost ~]# id
    uid=0(root) gid=0(root) 组=0(root)
    

    root用户的后缀是 # ,而普通用户为 $

    2、执行指定命令行后即返回原来的身份

    [admin@localhost ~]$ head -n 2  /etc/shadow
    head: 无法打开"/etc/shadow" 读取数据: 权限不够
    [admin@localhost ~]$ su - -c "head -n 2  /etc/shadow"
    密码:
    root:$6$UbRYE8f8cxI757Lw$BJjLlD./2Om51RcIQadxZ8LbKpWzaVDISDpXd5rNPergZQWH2VAPF7LXRp/HCjx95xk2rd.Lw2Tiggs8Cr1WG0::0:99999:7:::
    bin:*:17632:0:99999:7:::
    

    sudo

        su使用起来非常方便,但同样也存在安全隐患。在一台服务器上面,如果有多人使用,在使用su命令切换到root后,则大家都知道了root密码,那么以后其他用户均可以以root用户身份登录和维护服务器,则安全策略形同虚设了。那该如何是好?Linux系统中则提供了另外一个命令sudo

    基本用法

        sudo主要功能是以其他用户身份执行命令,而要输入的密码也仅仅是当前用户身身的密码而非root账户密码,类似于Windows系统中的以管理员身份运行。其常用用法如下所示:

    sudo [选项] [命令]
    

    常用选项如下所示:

    选项 解释
    -b 在后台执行指定的命令
    -u 以指定用户身份运行,如不指定则默认为root
    -e 编辑文件而不是运行命令

    执行流程

    • 1、当用户执行sudo时,系统会在/etc/sudoers文件查找该用户是否有执行sudo的权限。
    • 2、若用户拥有执行sudo权限后,则输入用户自身的密码确认
    • 3、若密码确认成功,即可执行sudo后面的命令
    • 4、若切换身份与执行者身份相同,则无需要输入密码
        基于以上流程,能否使用sudo则要看/etc/sudoers中的设置

    基本配置

    • 1、单一用户可执行root所有命令
    [root@localhost ~]# visudo
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)       ALL # 系统默认
    admin   ALL=(ALL)       ALL # 用户增加
    

    各项解释如下所示:
    root/admin:用户账号,指定哪些账号可使用sudo命令
    ALL=(ALL):登录者的来源主机名=可切换的身份
      登录者的来源主机名:设置账号可由哪一台网络主机连接过来,即设置可信任主机。
      可切换的身份:账号可以切换成什么身份来执行后续的命令
    ALL:可执行的命令:这个路径必须以绝对路径来填写
      ALL是特殊关键字,代表任何身份、任何主机和任何命令的意思。

    • 2、利用用户组和免密码的功能
        相比较于通过单个用户而言,通过用户组来控制更加方便灵活。
    # 修改用户的属组,只用户属于wheel则可以执行sudo命令
    [root@localhost ]# usermod -a -G wheel admin
    
    [root@localhost ~]# visudo
    ## Allows people in group wheel to run all commands
    %wheel  ALL=(ALL)       ALL # %wheel:代表任何组
    
    # 使用sudo 命令而不需要输入密码
    %wheel  ALL=(ALL)       NOPASSWD: ALL
    
    • 3、有限制的命令操作
        以上两种方法,可以方便用户利用root身份执行任何事情,如果想给用户分配部分权限执行命令,该如何配置?
    [root@localhost ~]# visudo
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)       ALL
    # 该用户仅有执行 ls 的权限,路径必须为绝对路径
    admin   ALL=(ALL)       /usr/bin/ls
    # 添加用户的执行sudo命令的排除权限,! 表示不可执行
    admin   ALL=(ALL)   !/usr/bin/ls,!/usr/bin/passwd,!/usr/bin/passwd root
    
    • 4、通过别名批量设置权限
    [root@localhost ~]# visudo
    # 批量设置别名
    # User_Alias ADMINS = jsmith, mikem
    User_Alias ADMINS = admin,test,surpassme
    
    # 批量设置命令权限
    ## Command Aliases
    Cmnd_Alias SOFTWARE = !/usr/bin/rpm,!/usr/bin/up2date,!/usr/bin/yum
    
    # 设置sudo的限制命令
    ADMINS ALL=(root) SOFTWARE
    

    通过别名进行权限设置均需要使用大写字符

    • 5、搭配su使用
          在很多时间我们需要大量执行很多root的工作,所以一直使用sudo会觉得很麻烦,那有没有简单的办法使sudo搭配su,一次性转换为root,而且还是用户自身的密码?方法如下所示:
    [root@localhost ~]# visudo
    # 批量设置别名
    # User_Alias ADMINS = jsmith, mikem
    User_Alias ADMINS = admin,test,surpassme
    
    # 设置sudo的限制命令
    ADMINS ALL=(root) /usr/bin/su -
    # 使用按以下输入即可,即可直接切换为root用户
    [root@localhost ~]# sudo su -
    

    本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:
    MyQRCode.jpg

  • 相关阅读:
    一个奇怪的SystemClock_Config问题解决方法
    Keil5下载STM32库
    Entry point (0x08000000) points to a Thumb instruction but is not a valid Thumb code pointer.
    Error: failed to execute 'C:KeilARMARMCC'的解决办法
    C#委托的介绍(delegate、Action、Func、predicate)
    CopyFromScreen在屏幕缩放情况下需要做处理
    C# CEF 封装UserControl
    一个单js文件也可以运行vue
    vue自学入门-3(vue第一个例子)
    vue自学入门-1(Windows下搭建vue环境)
  • 原文地址:https://www.cnblogs.com/surpassme/p/9556999.html
Copyright © 2020-2023  润新知