Linux 中su和sudo命令的几个注意点
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=lanhaitun3Runas_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私房菜第三版
3 [转]sudoers—一个关于哪些用户可以执行哪些命令的列表
Linux 中su和sudo命令的几个注意点的更多相关文章
- Linux中su和sudo的用法整理
一.为什么会有su和sudo命令? 主要是因为在实际工作当中需要在Linux不同用户之间进行切换.root用户权限最高很多时候需要root用户才能执行一些关键命令.所以需要临时切换为root用户.工作 ...
- Linux中su和sudo的用法
su -#su - oldboy //当执行这个命令的时候表示切换到oldboy用户,并且重新读取用户环境相关配置文件,具体的来说就是执行下用户家目录下.bash_profile和.bashrc文件, ...
- linux中su和sudo区别
su切换用户,切换成root用户,要输入root用户的密码 su - 用户名 sudo 涉及到 /etc/sudoers文件 ,内容如下: # User privilege specificatio ...
- 【linux】su和sudo命令的区别
来源:http://www.jb51.net/LINUXjishu/12713.html 一. 使用 su 命令临时切换用户身份 1.su 的适用条件和威力 su命令就是切换用户的工具,怎么理解呢?比 ...
- Linux中su、sudo、sudo -i的用法和区别
sudo :暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码.缺点是每次执行超级用户权限都要在命令前加上 sudo ,优点是在当前终端再使用 sud ...
- linux系统(centos)下su和sudo命令的区别
linux系统(centos)下su和sudo命令的区别 区别 我们在日常使用过程中,这2个命令很多时候能达到相同的效果,对细节区别十分模糊,这里进行简单的解释和区分.希望大家能够正确使用这2个命令, ...
- Linux 的su 与sudo 的区别,查看所有用户
首先,我们要知道系统当中存在哪些用户. 1.用户名和密码的存储位置 存储帐号的文件:/etc/passwd 存储密码的文件:/etc/shadow 通过/etc/shadow获取的只是密码加密后的Ha ...
- linux中 su 与 su - 的区别
linux中 su 与 su - 的区别 su只是切换了用户身份,shell环境仍然是切换前用户的shell环境 su -是用户和shell环境一起切换成. 备注:1.切换了shell环境会相应的用户 ...
- 【linux】su、sudo、sudo su、sudo -i的用法和区别
来源:http://bbs.csdn.net/topics/390938651 sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码.不过 ...
随机推荐
- python 打印几行空行、 打印不换行
2.x版本中使用print '\n' * n #n为行数 3.x版本中使用print('\n' * n) #n为行数 print 'Hello', :不会换行.[加上逗号(,)]
- PyQt4 开发入门
参考资料:PyQt4教程
- python 浅析类方法与静态方法
类方法,静态方法的定义 Python 是双面向的,既可以面向函数编程,也可以面向对象编程,所谓面向函数就是单独一个. py 文件,里面没有类,全是一些函数,调用的时候导入模块,通过模块名.函数名()即 ...
- 厉害了,龙果!开源中国颁发了证书:GVP-码云最有价值开源项目
roncoo-pay (龙果支付系统) roncoo-pay是国内首款开源的互联网支付系统,其核心目标是汇聚所有主流支付渠道,打造一款轻量.便捷.易用,且集支付.资金对账.资金清结算于一体的支付系统, ...
- python库termcolor用法
termcolor是python中标注文本颜色的库 ANSII Color formatting for output in terminal. 利用termcolor查看log,进行代码调试,清晰标 ...
- 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 ...
- UVA 11039-Building designing【贪心+绝对值排序】
UVA11039-Building designing Time limit: 3.000 seconds An architect wants to design a very high build ...
- React Native学习(四)—— 写一个公用组件(头部)
本文基于React Native 0.52 Demo上传到Git了,有需要可以看看,写了新内容会上传的.Git地址 https://github.com/gingerJY/React-Native-D ...
- Servlet面试题归纳
尊重原创:http://blog.csdn.net/caohaicheng/article/details/38116481 1.说一说Servlet生命周期 Servlet生命周期包括三部分: 初始 ...
- cesium编程入门(七)3D Tiles,模型旋转
cesium编程入门(七)3D Tiles,模型旋转 上一节介绍了3D Tiles模型的位置移动,和贴地的操作,这一节来聊一聊模型的旋转, 参考<WebGl编程指南>的第四章 假设在X轴和 ...