陈同学
微服务
Accelerator
About
# Linux: sudo小技能 > 背景:购买云服务器后服务商不会提供root账户,但很多操作需root权限。本文介绍几个sudo常用小技能,以下介绍均基于Ubuntu 16.04 x64。 ## sudo简介 **sudo** 允许一个权限受限用户在指定的安全策略下以root用户或其它用户执行一条命令(不需要知道root用户密码也不需要切换到root用户)。出于安全考虑,当你以sudo执行命令时,系统会为你创建一个全新的会话,这个环境中一些配置会被初始为默认值,例如PATH环境变量会被重置。 * sudo并非全能,不能执行所有命令,例如:**cd**。 * sudo配置文件 /etc/sudoers需以 `visudo` 编辑以确保编辑之后文件格式正确 * 安全策略可以在 /etc/sudoers中配置 ## 使用场景 没有root用户,但需要以root权限执行某些命令。例如:安装程序、查看没有权限的目录等。 ## 小技能 ### 如何处理command not found **场景**:假如你使用ubuntu用户安装了maven,但是用sudo执行mvn命令时却报 command not found **原因**:参考本文sudo简介,sudo执行时所有环境变量已重置为默认值 **解决**:修改sudo会话初始值。 修改 **/etc/sudoers** 中的 **Defaults secure_path** 值,将你的配置加进去即可,当初始化sudo会话时会读取该配置作为PATH变量。此处以maven为例: ``` Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/usr/local/apache-maven-3.3.9/bin" ``` ### 如何设置sudo免输密码 对于运维人员,经常使用sudo,每次输入密码非常繁琐,可以通过以下配置解决。 以下为 ubuntu用户在**/etc/sudoers**中的免密设置,设置 **NOPASSWD** 即可 ``` ubuntu ALL=(ALL:ALL) NOPASSWD: ALL ``` ### 如何cd到没有权限的目录 演示两条命令: ```shell cd /root # 会报:-bash: cd: /root: Permission denied sudo cd /root # 会报:sudo: cd: command not found, 原因:sudo仅对应用程序有用,cd是linux内置命令 ``` 你可以用 `sudo -s` 切换到root用户,并保留当前用户环境信息。此时就可以用root用户查看没有权限的目录了。 ```shell ubuntu@ubuntu:~$ sudo -s root@ubuntu:~# cd /root # 使用exit命令退出当前会话 ``` ### 如何切换到没有密码的用户 在安装一些应用后(如jenkins/mysql等),应用会创建自己的用户来管理其数据,但我们并不知道这些用户的密码。在没有root用户时,可以用以下方式切换到这些用户: ```shell sudo su - jenkins # sudo 和 su 结合使用 ``` ## 拓展阅读 ### su 和 su - 有什么区别 假设用root用户执行以下命令: ```shell su ubuntu # 切换用户后保持当前用户环境,即保持root用户环境 su - ubuntu # 提供一个和目标用户即ubuntu用户相似的环境 ```
本文由
cyj
创作,可自由转载、引用,但需署名作者且注明文章出处。
文章标题:
Linux: sudo小技能
文章链接:
https://chenyongjun.vip/articles/38
扫码或搜索 cyjrun 关注微信公众号, 结伴学习, 一起努力