1 su与su - 的区别

1.1命令说明

su对应是是no-login shell的方式进行账号登陆,命令行的变量配置还是切换账号前的变量。

su-对应的是login shell的方式进行账号登陆,这时候相当于完全登陆新的账号获取新的账号的变量信息

因此在写脚本的过程中,根据里面变量的配置,要合理选用“su” 或者“su -”。附上鸟哥书中关于no-login shell与login shell的讲解

login shell:取得 bash 时需要完整的登陆流程的,就称为 login shell。举例来说,你要由 tty1 ~ tty6 登陆,需要输入用户的账号与密码,此时取得的 bash 就称为『 login shell 』啰;

non-login shell:取得 bash 接口的方法不需要重复登陆的举动,举例来说,(1)你以 X window 登陆 Linux 后, 再以 X 的图形化接口启动终端机,此时那个终端接口并没有需要再次的输入账号与密码,那个 bash 的环境就称为 non-login shell了。(2)你在原本的 bash 环境下再次下达 bash 这个命令,同样的也没有输入账号密码, 那第二个 bash (子程序) 也是 non-login shell 。

1.2下面通过命令方式验证二者的区别
#登陆前先查看下环境变量
[user@localhost ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user/.local/bin:/home/user/bin
[user@localhost ~]$ su
密码:
#使用su登陆后的环境变量,没有变化,依旧是登陆前的信息
root.user:echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user/.local/bin:/home/user/bin
root.user:exit
exit

#退出,使用su -进行登陆
[user@localhost ~]$ su -
密码:
上一次登录:六 9月  :: HKT 2015pts/ 上
#此时环境变量切换为新登陆用户的变量,所以得出su 与 su -二者是有区别的
root.~:echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
root.~:exit
登出

2 sudo命令与sudoers文件中命令执行顺序问题

今天使用visudo编辑自定义修改密码权限,命令如下:

## custom by lizhaoxian test
User_Alias USERTEST = lizhaoxian,pro1,myuser1
Cmnd_Alias CMDTEST =  !/usr/bin/]*, !/usr/bin/passwd root
USERTEST        ALL=(root)      CMDTEST

修改!/usr/bin/passwd, /usr/bin/passwd [a-zA-Z0-9]*, !/usr/bin/passwd root

里面这三个逗号分隔的命令,后面两个命令顺序改变后,依旧可以更改root的密码,比较奇怪,搜索网络原来,是执行顺序的问题。网友答案如下:

#The sudoers line is read in from left to right, with the right most stuff overriding the left.

#意思是:Sudoers命令从左向右读取执行,右面的命令总会覆盖左侧的命令

3 sudoers文件自定义详解

1 /etc/sudoers 配置文件中别名规则

别名规则定义格式如下:
Alias_Type NAME = item1, item2, ...

Alias_Type NAME = item1, item2, item3 : NAME = item4, item5

别名类型(Alias_Type):别名类型包括如下四种

Host_Alias 定义主机别名;

User_Alias 用户别名,别名成员可以是用户,用户组(前面要加%号)

Runas_Alias 用来定义runas别名,这个别名指定的是“目的用户”,即sudo 允许切换至的用户;

Cmnd_Alias 定义命令别名;

2 范例

1User_Alias SYSADER=beinan,linuxsir,%beinan

2User_Alias DISKADER=lanhaitun

3Runas_Alias OP=root

4Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod,/usr/sbin/adduser,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root

5Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk 注:定义命令别名DSKCMD,下有成员parted和fdisk ;

6SYSADER ALL= SYDCMD,DSKCMD

7DISKADER ALL=(OP) DSKCMD

注解:

第一行:定义用户别名SYSADER 下有成员 beinan、linuxsir和beinan用户组下的成员,用户组前面必须加%号;

第二行:定义用户别名 DISKADER ,成员有lanhaitun

第三行:定义Runas用户,也就是目标用户的别名为OP,下有成员root

第四行:定义SYSCMD命令别名,成员之间用,号分隔,最后的!/usr/bin/passwd root 表示不能通过passwd 来更改root密码;

第五行:定义命令别名DSKCMD,下有成员parted和fdisk ;

第 六行: 表示授权SYSADER下的所有成员,在所有可能存在的主机名的主机下运行或禁止 SYDCMD和DSKCMD下定义的命令。更为明确遥说, beinan、linuxsir和beinan用户组下的成员能以root身份运行 chown 、chmod 、adduser、passwd,但不能 更改root的密码;也可以以root身份运行 parted和fdisk ,本条规则的等价规则是;

beinan,linuxsir,%beinan ALL=/bin/chown,/bin/chmod,/usr/sbin/adduser,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root,/sbin/parted,/sbin/fdisk

第七行:表示授权DISKADER 下的所有成员,能以OP的身份,来运行 DSKCMD ,不需要密码;更为明确的说 lanhaitun 能以root身份运行 parted和fdisk 命令;其等价规则是:

lanhaitun ALL=(root) /sbin/parted,/sbin/fdisk

3 通配符的支持

通配符(又称meta字符)

sudo允许在sudoers中的路径名和命令行参数中使用shell风格的通配符.通配符匹配是通过POSIX的fnmatch标准程序实现的.注意,这不是正则表达式.

* 匹配任意一组零个或者多个字符

? 匹配任意一个字符

[…] 匹配任意一个在大括号中指定范围里的字符

[!…] 匹配任何一个不在大括号中指定范围里的字符

\x 任意一个字符”x”识别为单纯的”x”.这用来转义像”*”,”?”,”[”,”]”和”}”这样的一些特殊字符

注意,路径名中的通配符不会匹配正斜线(”/”).在匹配命令行参数时,因为斜线不被通配符匹配,这使/usr/bin/*匹配/usr/bin/who而不匹配/usr/bin/X11/xterm.

通配符规则的例外

参考:

1 鸟哥的Linux私房菜第三版

2 /etc/sudoers配置文件详解

3 [转]sudoers—一个关于哪些用户可以执行哪些命令的列表

Linux 中su和sudo命令的几个注意点的更多相关文章

  1. Linux中su和sudo的用法整理

    一.为什么会有su和sudo命令? 主要是因为在实际工作当中需要在Linux不同用户之间进行切换.root用户权限最高很多时候需要root用户才能执行一些关键命令.所以需要临时切换为root用户.工作 ...

  2. Linux中su和sudo的用法

    su -#su - oldboy //当执行这个命令的时候表示切换到oldboy用户,并且重新读取用户环境相关配置文件,具体的来说就是执行下用户家目录下.bash_profile和.bashrc文件, ...

  3. linux中su和sudo区别

    su切换用户,切换成root用户,要输入root用户的密码 su - 用户名 sudo  涉及到 /etc/sudoers文件 ,内容如下: # User privilege specificatio ...

  4. 【linux】su和sudo命令的区别

    来源:http://www.jb51.net/LINUXjishu/12713.html 一. 使用 su 命令临时切换用户身份 1.su 的适用条件和威力 su命令就是切换用户的工具,怎么理解呢?比 ...

  5. Linux中su、sudo、sudo -i的用法和区别

    sudo :暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码.缺点是每次执行超级用户权限都要在命令前加上 sudo ,优点是在当前终端再使用 sud ...

  6. linux系统(centos)下su和sudo命令的区别

    linux系统(centos)下su和sudo命令的区别 区别 我们在日常使用过程中,这2个命令很多时候能达到相同的效果,对细节区别十分模糊,这里进行简单的解释和区分.希望大家能够正确使用这2个命令, ...

  7. Linux 的su 与sudo 的区别,查看所有用户

    首先,我们要知道系统当中存在哪些用户. 1.用户名和密码的存储位置 存储帐号的文件:/etc/passwd 存储密码的文件:/etc/shadow 通过/etc/shadow获取的只是密码加密后的Ha ...

  8. linux中 su 与 su - 的区别

    linux中 su 与 su - 的区别 su只是切换了用户身份,shell环境仍然是切换前用户的shell环境 su -是用户和shell环境一起切换成. 备注:1.切换了shell环境会相应的用户 ...

  9. 【linux】su、sudo、sudo su、sudo -i的用法和区别

    来源:http://bbs.csdn.net/topics/390938651 sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码.不过 ...

随机推荐

  1. python 打印几行空行、 打印不换行

    2.x版本中使用print '\n' * n #n为行数 3.x版本中使用print('\n' * n) #n为行数 print 'Hello',  :不会换行.[加上逗号(,)]

  2. PyQt4 开发入门

    参考资料:PyQt4教程

  3. python 浅析类方法与静态方法

    类方法,静态方法的定义 Python 是双面向的,既可以面向函数编程,也可以面向对象编程,所谓面向函数就是单独一个. py 文件,里面没有类,全是一些函数,调用的时候导入模块,通过模块名.函数名()即 ...

  4. 厉害了,龙果!开源中国颁发了证书:GVP-码云最有价值开源项目

    roncoo-pay (龙果支付系统) roncoo-pay是国内首款开源的互联网支付系统,其核心目标是汇聚所有主流支付渠道,打造一款轻量.便捷.易用,且集支付.资金对账.资金清结算于一体的支付系统, ...

  5. python库termcolor用法

    termcolor是python中标注文本颜色的库 ANSII Color formatting for output in terminal. 利用termcolor查看log,进行代码调试,清晰标 ...

  6. 2017 Multi-University Training Contest - Team 1 1003&&HDU 6035 Colorful Tree【树形dp】

    Colorful Tree Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  7. UVA 11039-Building designing【贪心+绝对值排序】

    UVA11039-Building designing Time limit: 3.000 seconds An architect wants to design a very high build ...

  8. React Native学习(四)—— 写一个公用组件(头部)

    本文基于React Native 0.52 Demo上传到Git了,有需要可以看看,写了新内容会上传的.Git地址 https://github.com/gingerJY/React-Native-D ...

  9. Servlet面试题归纳

    尊重原创:http://blog.csdn.net/caohaicheng/article/details/38116481 1.说一说Servlet生命周期 Servlet生命周期包括三部分: 初始 ...

  10. cesium编程入门(七)3D Tiles,模型旋转

    cesium编程入门(七)3D Tiles,模型旋转 上一节介绍了3D Tiles模型的位置移动,和贴地的操作,这一节来聊一聊模型的旋转, 参考<WebGl编程指南>的第四章 假设在X轴和 ...