zoukankan      html  css  js  c++  java
  • su与sudo

    一、用户身份切换

       Linux系统中root用户具有超级管理员的权限,由于权限较大,稍不注意可能造成安全隐患,所以在工作中一般的使用普通用户来完成一些工作,但是如果涉及到的任务需要root用户的权限又该如何呢?

      此时,可以使用两个重要的命令即su和sudo命令。

    二、su命令

    (一)介绍

      su命令是用户身份切换的命令,假如当前如果是普通用户,但是需要root权限来完成某件工作时,你可以选择退出当前用户,重新以root用户登录;另一种方式就是无需重新登陆只需要使用su命令进行切换即可。

      超级用户向普通用户切换时无需密码验证,当时普通用户向超级用户或者普通用户都需要密码验证。su命令的使用可以通过man su查看详细用法,下面是重要的参数说明:

    参数选项 说明
    -l,--login 登录shell设置
    -c,--command 在一个shell下执行一个命令
    -m,--preserve-environment 切换用户时,不重置用户环境变量
    -s,--shell=SHELL 如果/etc/shells允许,则运行指定的shell

    su命令比较常用的是"-"和“-c”参数,其中“-”参数是切换用户后将其环境变量带过来,避免环境变量不一致的情况,"-c"参数上面已经详细说明了。

    [root@localhost ~]# su - xiaoshen -c ls -l /project

    (二)实例

    1、用户切换

    su命令切用户用户后,如果不加任何参数,这样并没有改变用户的登陆环境,所以需要使用“su -”。

    [root@localhost ~]# who am i
    root     pts/0        2021-01-02 10:34 (192.168.159.1)
    [root@localhost ~]# su - xiaoshen
    Last login: Sat Jan  2 10:44:57 CST 2021 on pts/0

    如果普通用户进行切换时需要使用密码:

    su: Authentication failure
    [xiaoshen@localhost ~]$ su -
    Password: 
    Last login: Sat Jan  2 10:34:18 CST 2021 from 192.168.159.1 on pts/0
    Last failed login: Sat Jan  2 12:12:44 CST 2021 on pts/0
    There was 1 failed login attempt since the last successful login.

    2、普通用户执行服务

    为了安全起见一般以普通用户来启动服务,所以一般可以在服务器启动时执行对应的脚本即可,在/etc.rc.local文件中设置:

    # 分用户方案启动服务
    su -xiaoshen -c '/bin/sh /project/script/run.sh'

    (三)su命令优缺点

      使用改命令确实操作方便,但是同时也会带来一些问题,如果过多的人同时切换到root,并且如果有一个人由于个人的失误,如修改密码等,将会造成其他人无法正常使用。所以此时可以使用sudo命令来解决。

      这样超级用户的密码掌握在少数管理员的手中,通过sudo来实现其他人对高级别权限的需求。

    三、sudo命令 

    sudo命令用来解决超级用户滥用,而且能让普通用户拥有一定的超级权限来管理系统。它的运行流程如下:

    其中时间戳的位置位于/var/db/sudo目录下:

    [root@localhost ~]# ll /var/db/sudo/
    total 0
    drwx------. 2 root test 15 Oct 13 21:20 test

      sudo比较重要的是它的配置文件/etc/sudoers,通过visudo工具来完成sudo的配置,使用这个工具会在添加规则后自动检查语法是否正确。当授权成功后可以切换到被授权的用户下通过sudo -l命令查看那些超级权限命令是被分配的。

      /etc/sudoers配置文件中的每一行就是一个规则,前面带#号的为注释说明内容,规则超过一行使用""续行。

      /etc/sudoers的规则分为两类:

    • 别名定义
    • 授权规则

     下面是主要的别名定义,通过visudo可以查看配置文件:

    # 定义主机别名,在定义授权规则时可以使用ALL来匹配所有的的主机
    ## Host Aliases
    ## Groups of machines. You may prefer to use hostnames (perhaps using
    ## wildcards for entire domains) or IP addresses instead.
    # Host_Alias     FILESERVERS = fs1, fs2
    # Host_Alias     MAILSERVERS = smtp, smtp2
    
    #定义用户别名,别名成员可以是用户、用户组(用户组前加%)
    ## User Aliases
    ## These aren't often necessary, as you can use regular groups
    ## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
    ## rather than USERALIAS
    # User_Alias ADMINS = jsmith, mikem
    
    #命令别名就是定义一个包含一堆命令的别名,即一组相关命令的集合
    ## Command Aliases
    ## These are groups of related commands...
    ...

    上述别名在系统中有多个用户,并且用户需要进行分组管理,给予不同的权限时可以使用。对于授权,加入test用户授予与root用户相同的权限:

    ## Allow root to run any commands anywhere
    root    ALL=(ALL)       ALL
    test    ALL=(ALL)      NOPASSWD:ALL
  • 相关阅读:
    bzoj 4017: 小Q的无敌异或
    [TJOI2014] Alice and Bob
    [TJOI2014] 上升子序列
    bzoj 3261: 最大异或和
    bzoj3087: Coci2009 misolovke
    bzoj3521: [Poi2014]Salad Bar
    bzoj4032: [HEOI2015]最短不公共子串
    bzoj1027: [JSOI2007]合金
    bzoj4637: 期望
    bzoj3919: [Baltic2014]portals
  • 原文地址:https://www.cnblogs.com/shenjianping/p/14209156.html
Copyright © 2011-2022 走看看