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. 易卡易APP的出现改变你的消费习惯

    科技发展越来越快,移动支付占据市场主导地位,银行业发展受到了重大冲击,致使银行对于信用卡的推广更加重视.人们的消费观念也受到了很大影响从以前的现金消费变成现在的数字消费,人们对于金钱的观念就是一个数字 ...

  2. Java架构师学习路线

    Java架构师,首先要是一个高级java攻城狮,熟练使用各种框架,并知道它们实现的原理.jvm虚拟机原理.调优,懂得jvm能让你写出性能更好的代码;池技术,什么对象池,连接池,线程池--   Java ...

  3. [整理]k-vim-for-server通过vimrc修改vim格式

    1.备份原来的vim设置: cp ~/.vimrc ~/.vimrc_bak 2. 下载配置到指定目录 法一: curl https://raw.githubusercontent.com/wklke ...

  4. 【转载】从头编写 asp.net core 2.0 web api 基础框架 (5) EF CRUD

    Github源码地址:https://github.com/solenovex/Building-asp.net-core-2-web-api-starter-template-from-scratc ...

  5. HDU 2084 数塔(简单DP入门)

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  6. hdu_1042(模拟大数乘法)

    计算n! #include<cstring> #include<cstdio> using namespace std; ]; int main() { int n; whil ...

  7. 最长上升子序列(LIS经典变型) dp学习~5

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 Monkey and Banana Time Limit: 2000/1000 MS (Java ...

  8. DFS+打表

    N皇后问题 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

  9. linux下vi编辑某文件时,操作出现 错误提示: E325: ATTENTION 2, Found a swap file by the name ".p1.c.swp"

    当我在linux下用vi打开p1.c文件时 root@iZ2zeeailqvwws5dcuivdbZ:~/1/01/指针# vi p1.c 会出现如下信息: E325: ATTENTION Found ...

  10. VS2008 如何将Release版本设置可以调试的DEBUG版本

    VS2008 如何将Release版本设置可以调试的DEBUG版本 只需设置三个部分: 项目->属性->C/C++->General->Debug Information Fo ...