zoukankan      html  css  js  c++  java
  • sudo 命令

    su命令和su -命令最大的本质区别就是

    前者只是切换了root身份,但Shell环境仍然是普通用户的Shell;

    而后者连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误。

    su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;

    而用su -命令切换以后,工作目录变成root的工作目录了。用echo $PATH命令看一下su和su -以后的环境变量有何不同。以此类推,要从当前用户切换到其它用户也一样,应该使用su -命令。如图:

    一、su :Switch User  用于切换用户用

    语法:

    用法:su [选项]... [-] [用户 [参数]... ]
    Change the effective user id and group id to that of USER.
     
      -, -l, --login               make the shell a login shell
      -c, --command=COMMAND        pass a single COMMAND to the shell with -c
      --session-command=COMMAND    pass a single COMMAND to the shell with -c
                                   and do not create a new session
      -f, --fast                   pass -f to the shell (for csh or tcsh)
      -m, --preserve-environment   do not reset environment variables
      -p                           same as -m
      -s, --shell=SHELL            run SHELL if /etc/shells allows it
          --help            显示此帮助信息并退出
          --version         显示版本信息并退出
     
    注:单独的"-"选项隐含了-l。如果不指定用户,则假设其为root。

    e.g  su - USER -c 'COMMAND'

    二、SUDO

    2.1、什么是sudo ?

      sudo 是可以让某个用户不需要拥有管理员的账号密码,可以执行管理员的权限的

      作为管理员可以指派某些用户可以执行某些特定命令。

      授权之后,能够让某用户以另外一个用户的身份运行命令

      配置文件:sudoers

    2.2、语法

    ## Syntax:
    
    ##  user   HOST=(RUNAS)  TAG:COMMAND   
    ##  用户 登录的主机=(可以变换的身份) 可以执行的命令 TAG:只支持在授权项加标签 
    四个字段所代表的含义分别是:
    
    who:运行命令者的身份---用户帐号,也就是我们想要配置的让哪个系统帐号可以使用sudo命令
      USERNAME
      #uid
      User_Alias
      %group
      %#gid
    where:通过哪些主机---允许用户从哪些地方连接到这台主机,linux作为服务器,管理员是有可能从别的主机远程连接过来的 (whom):以哪个用户的身份---允许切换的身份which: 运行哪些命令---允许执行的命令

    在命令前面加上"!"来表示不可执行的命令

    2.3、Who别名:

     此外sudo还支持别名的定义,我们通过引用定义好的别名可以提供工作效率:
           who                      User_Alias
           which_hosts          Host_Alias
           runas                    Runas_Alias
           command             Cmnd_Alias

    2.3.1、别名语法:

      Alias_Type  NAME=item1,item2,...

    注:NAME必须使用全大写字母

    2.3.2、Alias_Type如下:

    e.g

    netuser1   ALL=(root)  NETADMIN

    netuser2   ALL=(root)  NETADMINCMNDS

     User_Alias NETADMIN = netuser1,netuser2

    Cmnd_Alias NETADMINCMNDS = /usr/sbin/ip

         

     
     root    ALL=(ALL)    ALL     #允许root用户执行任意路径下的任意命令 

      %wheel   ALL=(ALL)   NOPASSWD: ALL      #允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令


    允许wheel用户组的用户以root权限修改其他用户的密码。 前面多了一个
    %”,用来表示用户组 后面的"NOPASSWD:"即表示不需要输入密码就可以执行命令

    常用参数如下: (标注的须记住)

    sudo [-u user] COMMAND

    -V: 显示版本编号
    -l:查看当前用户可以使用的所有sudo命令
    -b:将要执行的指令放在后台执行
    -g:以指定组执行
    -u username/#uid 不加此参数,代表要以root的身份执行命令,而加了此参数,可以以username的身份执行命令(#uid为该username的UID)。
    -K:移除时间戳文件
    -k:时间戳为元年(下次就必须输入密码)---将会强迫使用者在下次一次执行sudo时询问密码(不论有没有超过N分钟)
    -v:更新时间戳,时间戳默认5分钟,五分钟到就需要再次密码,使用-v可以续5分钟。
    关于时间戳这个东西。我们默认使用sudo执行命令的时候,第一次是需要输入密码的,短时间内再次执行sudo命令是不需要再次输入密码的。
    这个时间是有时间戳控制的。我们可以指定
    -k修改时间戳为元年,下次在sudo执行命令就必须输入密码。

    -p prompt 可以更改问密码的提示语,其中%u会替换为使用者的账号名称,%h会显示主机名称。 
    -s 执行环境变量中的 SHELL 所指定的 Shell ,或是 /etc/passwd 里所指定的 Shell。 
    -H 将环境变量中的HOME(宿主目录)指定为要变更身份的使用者的宿主目录。(如不加-u参数就是系统管理者root。) 
    要以系统管理者身份(或以-u更改为其他人)执行的命令。

    E.G

    a)设置了某个用户组具有sudo权限之后,只需要使用usermod命令把相应的用户添加到该用户组就可以了:

    usermod -a -G wheel linuxidcuser

    b)有限制的命令操作:

    %users ALL=(root) /usr/bin/passwd

    允许users用户组的用户以root权限修改其他用户的密码。

    当用户以"sudo passwd"或者"sudo passwd root"方式运行命令的时候,可以直接把root用户的密码改掉,这真是太危险了,必须要把这两条命令禁止调,在命令前面加上"!"来表示不可执行的命令,

    如下所是: %users ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root

    c)racle2用户可以在任何地点以root的身份执行命令useradd(无需密码)和userdel(需要密码).

    oracle2 ALL=(root) NOPASSWD:/usr/sbin/useradd, PASSWD:/usr/sbin/userdel


    d) 看到NOPASSWD不需要密码,看到PASSWD需要密码
    User_Alias USERADMIN=test1,test2
    USERADMIN ALL=(root) NOPASSWD:USERADMINCMNDS
    Cmnd_Alias USERADMINCMNDS = /usr/sbin/useradd, /usr/sbin/usermod,/usr/bin/passwd [a-z]*,!/usr/bin/passwd root  

    5、便于管理

    在sudoers文件的最后面有如下几行,利用include引入/etc/sudoers.d目录下的配置文件,

    https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_009.html

  • 相关阅读:
    js中break/continue
    js实现连接的两种放法
    jsdate对象toLocaleString()方法小结
    接口学习小节
    c# 装箱和拆箱
    c#数据类型学习
    return 作用域
    js中break/continue
    ArcGIS Runtime for Android开发教程V2.0(9)基础篇查询检索
    【转】ArcGIS 10.1 地图发布以及缓存管理
  • 原文地址:https://www.cnblogs.com/liuzhiyun/p/11937764.html
Copyright © 2011-2022 走看看