阅读陈同学 博客原文,格式更佳
背景:购买云服务器后服务商不会提供root账户,但很多操作需root权限。本文介绍几个sudo常用小技能,以下介绍均基于Ubuntu 16.04 x64。
sudo 允许一个权限受限用户在指定的安全策略下以root用户或其它用户执行一条命令(不需要知道root用户密码也不需要切换到root用户)。出于安全考虑,当你以sudo执行命令时,系统会为你创建一个全新的会话,这个环境中一些配置会被初始为默认值,例如PATH环境变量会被重置。
visudo
编辑以确保编辑之后文件格式正确没有root用户,但需要以root权限执行某些命令。例如:安装程序、查看没有权限的目录等。
场景:假如你使用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,每次输入密码非常繁琐,可以通过以下配置解决。
以下为 ubuntu用户在/etc/sudoers中的免密设置,设置 NOPASSWD 即可
ubuntu ALL=(ALL:ALL) NOPASSWD: ALL
演示两条命令:
cd /root # 会报:-bash: cd: /root: Permission denied
sudo cd /root # 会报:sudo: cd: command not found, 原因:sudo仅对应用程序有用,cd是linux内置命令
你可以用 sudo -s
切换到root用户,并保留当前用户环境信息。此时就可以用root用户查看没有权限的目录了。
ubuntu@ubuntu:~$ sudo -s
root@ubuntu:~# cd /root # 使用exit命令退出当前会话
在安装一些应用后(如jenkins/mysql等),应用会创建自己的用户来管理其数据,但我们并不知道这些用户的密码。在没有root用户时,可以用以下方式切换到这些用户:
sudo su - jenkins # sudo 和 su 结合使用
假设用root用户执行以下命令:
su ubuntu # 切换用户后保持当前用户环境,即保持root用户环境
su - ubuntu # 提供一个和目标用户即ubuntu用户相似的环境
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。