大家好,关于Linux中著名的sudo和su是什么?如何使用?很多朋友都还不太明白,今天小编就来为大家分享关于的知识,希望对各位有所帮助!
常用选项
-c, –command=[命令]:指定要执行的命令,然后恢复到原来的用户。 -、-l、–login:将shell 作为登录shell 启动,环境与实际登录类似。 1. 清除除“TERM”和–whitelist-environment 选项指定的变量之外的所有环境变量。 2.初始化环境变量:HOME、SHELL、USER、LOGNAM、PATH。 3. 更改目标用户的主目录。 4. 将shell的第一个参数argv[0]设置为-,使shell成为登录shell。 -m、-p、–preserve-environment:保留整个环境变量,例如HOME、SHELL、USER、LOGNAME不会被更新。该选项与–login 互斥,请勿同时使用。 -s, –shell=[shell]:指定一个shell,而不是切换用户后使用默认的shell。 shell的使用顺序如下: 1. `–shell`指定的具有最高优先级。 2. 如果指定了`–preserve-environment`选项并设置了`SHELL`环境变量,则使用此shell。 3.目标用户的passwd条目中列出的shell 4.以上都不是,默认是`/bin/sh` -w, –whitelist-environment=[list]:环境变量白名单,即如果指定- 当-login时,白名单中指定的环境变量不会被重置,但HOME、SHELL、USER、LOGNAME和PATH将被忽略。列表格式以逗号分隔。 -h, –help: 打印帮助信息。 -V, –version: 打印版本信息。
使用实例
切换到普通用户su – phoenix 或su Phoneix。切换到root 用户su – 或su。切换用户时,指定命令su -c lssu -c ‘ls -l /home/username’ phoenix。切换到普通用户并指定命令。命令指定的选项和参数用引号引起来。切换时指定shellsu -s /usr/bin/zsh 保留环境su -p phoenix。对于没有root密码的Ubuntu,可以使用以下方法切换到rootsudo su –
su源码
man pages
二、sudo
什么是sudo?
sudo 简称Super User Do,允许非root用户运行其他Linux通常需要超级用户权限的命令。
获得root权限的方式
直接使用ssh root登录主机ssh root@[server_domain_or_ip] 使用su切换到root用户su – 使用sudo临时获取root权限来执行需要root权限的命令。此时不会生成新的shell。 sudo [command]
什么是sudoers?
sudo的配置文件为:sudoers,位于:/etc/sudoers
sudoers 文件指示系统如何处理sudo 命令(每个sudo 用户可以做什么)。
什么是/etc/sudoers.d?
/etc/sudoers.d 是与/etc/sudoers同级的配置文件目录。一般不建议直接修改/etc/sudoers。相反,在/etc/sudoers.d 目录下创建一个新的自定义配置文件。配置规则与/etc/sudoers相同。任何不以~ 结尾且不包含.会被视为一个正确的配置文件,并且sudo 会读取所有配置文件并将它们追加到sudo 配置中。
什么是Visudo?
由于/etc/sudoers 中的任何语法错误都可能导致系统崩溃的风险,因此使用visudo 将对配置文件进行语法检查,以防止配置错误阻止sudo 操作。
visudo 默认会使用vi 作为文本编辑器,你也可以配置visudo 使用的编辑器。
在Ubuntu 上配置
sudo update-alternatives –config editorOutput 替代编辑器有4 个选择(提供/usr/bin/editor)。选择路径优先级状态————————————– ——————– ——————-* 0 /bin/nano 40 自动模式1/bin/ed -100 手动模式2 /bin/nano 40 手动模式3 /usr/bin /vim.basic 30 手动模式4 /usr/bin/vim.tiny 10 手动模式按Enter 键保留当前选择[*],或输入选择号码: 按号码选择适当的编辑器CentOS 上的配置
导出EDITOR=`哪个[编辑者姓名]`。 ~/.zshrc 或source ~/.zshrc 加载生效
怎么修改sudoers文件?
使用sudo visudo 会打开/etc/sudoers 文件
sudoers权限行说明:
root ALL=(ALL:ALL) ALL%admin ALL=(ALL) ALL#includedir /etc/sudoers.droot 表示该规则适用于root 用户。第一个ALL 表示该规则适用于所有主机。第二个ALL表示root用户可以像所有用户一样执行命令。第三个ALL表示root用户可以作为所有用户组执行命令。第四个ALL表示root用户可以执行所有命令。 %admin,以%开头的是组名,这意味着只要用户属于admin组,就可以拥有上面指定的所有权限。通常,任何以# 开头的内容都会被视为注释,但这里#includedir 被解析为引入文件的指令。
怎么授予普通用户sudo权限?
最简单的方法就是将用户添加到超级权限组
例如,在Ubuntu上,如果使用sudo组作为超级权限组,则可以将普通用户添加到sudo组中。 sudo usermod -aG sudo [username] 或使用`gpasswd` 命令sudo gpasswd -a [username] sudo 在CentOS 上,wheel 组通常用作超级权限组。 %wheel ALL=(ALL) ALL
怎么自定义sudoers的规则?
除了使用单个用户或用户组指定一行规则之外,您还可以使用称为别名的方法对规范进行分组。
用户别名User_Alias FULLTIMERS=albert, ronald, ann 这里指定了一个用户别名FULLTIMERS,包括三个用户名,用逗号分隔,表示该规则适用于每个用户。应用示例如下: FULLTIMERS ALL=(ALL) ALL 所有者身份别名Runas_Alias OP=root,这里操作符指定一个所有者身份别名OP,其中包括三个用户身份,用逗号分隔,表示运行该命令后您可以在OP 中使用任何身份。应用示例如下: [username/group] ALL=(OP) ALL 主机别名Host_Alias PRODSERVERS=master, mail, www, ns 这里指定一个主机别名PRODSERVERS,包含四个主机名,以逗号分隔,表示该运行命令可以应用于任何主机。应用示例如下: [用户名/组] PRODSERVERS=(ALL) ALL 执行的命令别名Cmnd_Alias POWER=/sbin/shutdown、/sbin/halt 此处指定命令组别名。多个命令之间用逗号分隔,表示可以应用它们。命令组中的任意命令。应用示例如下: [用户名/组] ALL=(ALL) POWER 希望允许用户以root 权限执行命令,无需输入密码[用户名/组] ALL=NOPASSWD: [命令] 例如:GROUPONE ALL=NOPASSWD: /usr/bin/updatedb 同时指定免密码命令和需要密码命令[用户名/组] ALL=NOPASSWD: [命令1], PASSWD: [命令2] 例如:GROUPTWO ALL=NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill 无法通过NOEXEC 限制用户执行指定命令[用户名/组] ALL=NOEXEC: /usr/bin/less 否定操作,即除XX 之外的含义示例1
jane ALL=/usr/bin/passwd [A-z]*,/usr/bin/passwd root 以上表示jane 可以修改除root 之外的任何人的密码。实施例2
jenALL,PRODSERVERS=VIEWSHADOW 以上表示jen 可以在除PRODSERVERS 之外的所有计算机上运行VIEWSHADOW 命令
sudo常用的选项
。要指定执行命令的用户身份,需要在配置文件中设置sudo -u [用户名] [命令]sudo。 -g [组名] [命令] 修改sudo密码有效期。默认sudo密码有效期为5分钟。可以通过以下配置来设置有效期
Timeout_Spec=[time] 时间格式:超时可以用天、小时、分钟和秒的组合来指定,并使用不区分大小写的单字母后缀表示时间单位。例如,7天8小时30分10秒的超时将写为“7d8h30m10s”。如果指定的数字没有单位,则假定为秒。可以省略任何天、分钟、小时或秒。顺序必须是从最大单位到最小单位,并且一个单位不能指定多次。延长(验证、刷新有效期)sudo密码有效期sudo -v 立即使sudo密码过期并终止当前用户的权限sudo -k 列出当前用户的权限sudo 配置sudo -l 重复上一条命令应用场景:执行时需要`sudo`命令,我忘记输入`sudo`前缀。这里我只需要sudo !指定要重复的命令。 sudo !66 是要重复的命令。一个有趣的配置是在配置文件Defaults侮辱中添加以下行,当密码输入错误时,会输出以下信息:
输出[sudo] demo: 的密码# 在这里输入错误的密码来查看结果自从电击以来你的思维就已经不一样了,是吗?[sudo] demo: 的密码我的思维正在消失。我能感觉到。 sudo 会侮辱用户(傻笑):触电后你的思维会不一样吧?打印版本号sudo -V 打印帮助信息sudo -h 或-help 在后台运行命令sudo -b [命令] 非交互运行sudo,不要求密码sudo -n [命令] 指定要运行的shell sudo -s [command] 如果设置了shell 环境变量,-s 选项将运行shell 指定的shell,或者运行文件passwd 中指定的shell。设置主目录sudo -H [命令] -H 选项将HOME 环境变量设置为目标用户的主目录(默认为root),如passwd 中指定的。默认情况下,sudo 不会修改HOME。停止解析命令行参数sudo — [命令] 一行运行多个命令sudo ls;哇阿米; hostname 多个命令以分号分隔
sudo官网
请参阅Sudo 手册、Sudoers 手册、Visudo 手册
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/127942.html
用户评论
我没有爱人i
我以前一直以为 sudo 和 su 只是命令的名字,直到看到这篇博客才明白它们的作用!终于弄清楚了,谢谢分享!
有12位网友表示赞同!
一别经年
写的真详细啊,我刚开始接触 Linux 就遇到了 sudo 和 su ,但是一直没搞懂它俩的区别。这篇文章解答了很多我的疑惑,太棒了!建议把一些常用命令的例子也加进来,这样更方便我们学习。
有18位网友表示赞同!
暖栀
这个 sudo 和 su 的区别还是蛮重要的,特别是对于一些新手用户来说,容易弄混淆。不过这篇博文的解释比较通俗易懂,容易理解
有5位网友表示赞同!
开心的笨小孩
我经常在服务器上使用 sudo 命令,它确实提供了很好的安全保障。不过有时候我觉得用 su 稍微方便一点,尤其是在一些脚本中执行操作的时候。
有7位网友表示赞同!
执妄
这篇文章虽然解释清楚了 sudo 和 su 的区别,但是对于一些初学者来说,可能还是有点抽象。 可以再加入一些实际应用场景的例子,这样更容易理解
有8位网友表示赞同!
尘埃落定
对 Linux 一点都不了解,但这篇文章让我初步了解了什么是 sudo 和 su 。希望能看到更多关于 Linux 命令的教程!
有17位网友表示赞同!
凝残月
我感觉这篇文章写的太详细了,有些内容不太必要。其实只需要明确解释 sudo 和 su 的区别和使用方法就可以了。希望作者能简化一些内容,方便新手快速阅读和理解。
有16位网友表示赞同!
坠入深海i
我觉得文章可以建议使用 sudo 作为默认命令,因为它更加安全可靠。虽然 su 更灵活,但如果操作不当可能会造成系统漏洞
有14位网友表示赞同!
别伤我i
太赞了!终于明白 sudo 和 su 的区别是什么了!这篇文章简直是我的救星!以后再也不要用错命令啦!
有16位网友表示赞同!
不浪漫罪名
Linux 的一些命令确实很绕口,sudo 和 su 也比较复杂。希望博客作者能写一篇更通俗易懂的教程,方便初学者入门。
有12位网友表示赞同!
陌颜
我感觉 sudo 和 su 还是很实用的功能,特别是对于管理员来说,可以有效地控制用户权限和操作范围。
有18位网友表示赞同!
灬一抹丶苍白
这篇文章终于把 sudo 和 su 的使用场景解释清楚了!之前总是用错命令导致很多问题。以后一定会优先考虑使用 sudo 命令!
有7位网友表示赞同!
像从了良
我想说这篇文章写的相当棒, 让我对 Linux 下的 sudo 和 su 有了一个更加深入的理解,非常感谢!
有11位网友表示赞同!
最迷人的危险
我刚开始学 Linux,看到这篇文章感觉很有用。sudo 和 su 的功能确实很重要,以后要牢记这些知识!
有14位网友表示赞同!
花海
对于新手来说,学习 Linux 命令确实需要一些耐心。这篇文章虽然很好,但我仍然希望有更多实用的例子和案例可以参考学习。
有9位网友表示赞同!
旧事酒浓
我以前就觉得Linux命令很麻烦!这下明白sudo 和su 的区别了,感觉学习linux 变得容易了不少
有14位网友表示赞同!
断秋风
sudo 和 su 是 Linux 命令中经常会使用的,这篇文章讲解的很好明了,让我对这两种命令有了更深的理解!
有19位网友表示赞同!