• {{ item.name }}
  • Home
  • Linux
  • Programming
    • Python
  • Life
  • Other
  • Tools
  • 投资者该如何参与优秀的区块链项目- NuLink社区圆桌会议
  • 什么是NuLink?- 项目中文社区与项目研究组成员 Rookie 对话实录
  • NuLink 融资 400 万美元用于开发隐私保护技术
  • NuLink的零知识证明介绍(1)
  • 用bitwarden_rs搭建属于自己的密码管理器
  • 修复 CentOS vps 网卡失效
  • 记录用mac给Nexus6P刷Android10的错误
  • Centos 6.8启用 TCP BBR拥塞控制算法
  • Nginx 启用HTTP2功能
  • Mac 安装adb工具
  • WordPress 默认编辑器代码按钮

linux su和sudo

  • iansiu
  • 2015-12-01
  • 0

su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。

语法

su [OPTION]... [-] [USER [ARG]...]

选项

-c 执行完指定的指令后,即恢复原来的身份
-f 适用于csh与tsch,使shell不用去读取启动文件
-l 改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,logname。此外,也会变更PATH变量
-m 变更身份时,不要变更环境变量
-s 指定要执行的shell

应用实例

1. 使用123用户身份在/tmp下创建test目录

su -c "mkdir /tmp/test" 123

2.切换用户123

su 123

普通用户使用 su 切换到另一个用户需要输入密码,root 不用

还有一种用法是 su -

su和su -的区别是:

前者只是改变了身份,但Shell环境仍然是普通用户的Shell;而后者连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误。su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;而用su -命令切换以后,工作目录变成root的工作目录了。用echo $PATH命令看一下su和su -以后的环境变量有何不同。以此类推,要从当前用户切换到其它用户也一样,应该使用su -命令

单独运行 su 会切换到 root 用户

sudo命令用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。

选项

-b:在后台执行指令
-H:将HOME环境变量设为新身份的HOME环境变量
-k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码
-l:列出目前用户可执行与无法执行的指令
-p:改变询问密码的提示符号
-s:执行指定的shell
-u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;
-v:延长密码有效期限5分钟

sudo的工作流程

1. 当用户执行 sudo 时,系统于 /etc/sudoers 档案中搜寻该使用者是否有执行 sudo 的权限;
2. 若使用者具有可执行 sudo 的权限后,便让使用者输入用户自己的密码来确认;
3. 若密码输入成功,便开始进行 sudo 后续接的指令(但 root 执行 sudo 时,不需要输入密码);
4. 若欲切换的身份与执行者身份相同,那也不需要输入密码。

visudo单用户授权

visudo是直接操作/etc/sudoers文件,我们也可以直接 vi /etc/sudoers,但是visudo命令的好处在于,退出/etc/sudoers文件时,系统会检查/etc/sudoers语法是否正确。

提示语法错误我们有三种选择:键入e是重新编辑,键入x是不保存退出,键入Q是退出并保存。如果真选择Q,那么sudo将不会再运行,直到错误被纠正。

运行

visudo

找到

root  ALL=(ALL)    ALL

在其下面添加

test ALL=(root)    ALL

第一个字段:test为能使用sudo命令的用户;
第二个字段:第一个ALL为允许使用sudo的主机,可以是IP地址和IP段,第二个括号里的ALL为使用sudo后以什么身份(目的用户身份)来执行命令
第三个字段:ALL为以sudo命令允许执行的命令,ALL是所有的,可以指定单个或是多个命令如:/bin/ls,也可使用!来表示不可执行的命令

总结就是 允许test用户从任何地方登陆以root用户身份执行所有命令

举例:

1. 允许test2用户通过sudo来修改所有其它用户的密码,但不能修改root的密码

test2    ALL=(root) /usr/bin/passwd,!/usr/bin/passwd root

2. visudo利用群组授权

%test  ALL=(ALL)  ALL

在最左边加上 % ,代表后面接的是一个群组,格式和单用户授权一样

任何加入test这个群组的使用者,就能够使用 sudo 切换任何身份来操作任何指令

3. 不需要密码即可使用 sudo

%wheel  ALL=(ALL)  NOPASSWD: ALL

在指令处加入NOPASSWD:ALL即可

6、visudo利用别名授权

公司有很多部门,要方便管理,就可使用别名的方式,如:开发部,运维部,技术支持部,每个部门里多个人,部门之间拥有的命令权限也不一样,同一部门权限一样。如果一条一条写的话,写也麻烦,改就更麻烦了。

User_Alias ADMPW = pro1,pro2, pro3, myuser1, myuser2 # 配置用户别名ADMPW

Cmnd_Alias ADMPWCOM =!/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root # 配置命令别名ADMPWCOM

ADMPW ALL=(root) ADMPWCOM   # 指定用户别名里的成员,拥有命令别名里的权限

配置sudo日志文件跟踪

1. 查询sample.sudoers文件位置

rpm -ql sudo
/usr/share/doc/sudo-1.8.6p3/sample.sudoers
/usr/share/doc/sudo-1.8.6p3/sample.syslog.conf

2. 查看sample.sudoers中的日志相关配置

sample.syslog.conf这个文件为官方配置sudo日志配置笔记

cat /usr/share/doc/sudo-1.8.6p3/sample.sudoers|grep "log"
Defaults                syslog=auth
Defaults>root           !set_logname
Defaults@SERVERS        log_year, logfile=/var/log/sudo.log

3. 创建日志文件

touch /var/log/sudo.log

4. 把sudo日志文件加入系统日志

把下面命令添加到/etc/rsyslog.conf末尾

local2.debug        /var/log/sudo.log

注意:空白处不能用空格,必须用 TAB

4. 在/etc/sudoers末尾中添加日志路径

echo 'Defaults       logfile=/var/log/sudo.log' >> /etc/sudoers
© 2025 laowang's blog
Theme by Wing