请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

欣东微医疗技术论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 21|回复: 0

sudo命令

[复制链接]

455

主题

557

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
37489
QQ
发表于 2017-10-11 16:40:06 | 显示全部楼层 |阅读模式
    sudo命令用来以其他身份来执行命令,预设的身份为root。
    在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。
    用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
    语法
       sudo   (选项)   (参数)
       选项 -b:在后台执行指令;
               -h:显示帮助;
               -H:将HOME环境变量设为新身份的HOME环境变量;
               -k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;。
               -l:列出目前用户可执行与无法执行的指令;
               -p:改变询问密码的提示符号;
               -s:执行指定的shell;
              -u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;
              -v:延长密码有效期限5分钟;
              -V :显示版本信息。
       参数
              指令:需要运行的指令和对应的参数。
       实例
          配置sudo必须通过编辑/etc/sudoers文件,而且只有超级用户才可以修改它,还必须使用visudo编辑。之所以使用visudo有两个原因,一是它能够防止两个用户同时修改它;二是它也能进行有限的语法检查。所以,即使只有你一个超级用户,你也最好用visudo来检查一下语法。 visudo默认的是在vi里打开配置文件,用vi来修改文件。我们可以在编译时修改这个默认项。visudo不会擅自保存带有语法错误的配置文件,它会提示你出现的问题,并询问该如何处理,就像:
           >>> sudoers file: syntax error, line 22 << 此时我们有三种选择:键入“e”是重新编辑,键入“x”是不保存退出,键入“Q”是退出并保存。如果真选择Q,那么sudo将不会再运行,直到错误被纠正。
       现在,我们一起来看一下神秘的配置文件,学一下如何编写它。
      让我们从一个简单的例子开始:
      让用户Foobar可以通过sudo执行所有root可执行的命令。
      以root身份用visudo打开配置文件,可以看到类似下面几行:
             # Runas alias specification
             # User privilege specificationroot ALL=(ALL)ALL
     我们一看就明白个差不多了,root有所有权限,只要仿照现有root的例子就行,我们在下面加一行(最好用tab作为空白):
               foobar ALL=(ALL) ALL
      保存退出后,切换到foobar用户,我们用它的身份执行命令:
              [foobar@localhost ~]$ ls /root ls: /root: 权限不够
              [foobar@localhost ~]$ sudo ls /root PassWord:
            anaconda-ks.cfg
            Desktop install.log
             install.log.syslog
       好了,我们限制一下foobar的权利,不让他为所欲为。比如我们只想让他像root那样使用ls和ifconfig,把那一行改为:
             foobar localhost= /sbin/ifconfig, /bin/ls
      再来执行命令:
             [foobar@localhost ~]$ sudo head -5 /etc/shadow Password: Sorry, user foobar is not allowed to execute '/usr/bin/head -5 /etc/shadow' as root on localhost.localdomain.
            [foobar@localhost ~]$ sudo /sbin/ifconfigeth0 Linkencap:Ethernet HWaddr 00:14:85:EC:E9:9B...
       现在让我们来看一下那三个ALL到底是什么意思。
       第一个ALL是指网络中的主机,我们后面把它改成了主机名,它指明foobar可以在此主机上执行后面的命令。
       第二个括号里的ALL是指目标用户,也就是以谁的身份去执行命令。
        最后一个ALL当然就是指命令名了。

    sudo运行时,会默认重置环境变量为安全的环境变量,也即,但前设置的变量都会失效,只有少数配置文件中指定的环境变量能保存下来。
解决办法sudo -E
-E选项在man page中的解释是:
-E
The -E (preserve environment) optionindicates to the security policy that the user wishes to preservetheir existing environment variables. The security policy mayreturn an error if the -E option is specified and the user does nothave permission to preserve the environment.
简单来说,就是加上-E选项后,用户可以在sudo执行时保留当前用户已存在的环境变量,不会被sudo重置,另外,如果用户对于指定的环境变量没有权限,则会报错。
$ sudo -E bash test.sh       # 加上-E参数后就可以获取到变量
aaa

                                                                                            

                                                                                                                                                                                                                                                                                                                                                                                                                        

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|eastwill.org  

GMT+8, 2017-10-23 01:15 , Processed in 0.022561 second(s), 9 queries , Apc On.

Powered by Eastwill! X3.2

© 2001-2013 Eastwill Inc.

快速回复 返回顶部 返回列表