一直以普通用户身份使用Unix/Linux,最近有机会在Microsoft Azure上搭建自己的Linux服务器,需要使用root权限安装软件和修改配置。这篇笔记总结一些相关的命令和技巧。
环境:在Azure的虚拟机中运行Ubuntu 14.04, 在安装Ubuntu过程中,指定的用户名为azureuser。
1. 缺省情况下,Ubuntu禁用root用户,可用sudo临时获取执行root相关命令的权限。为了让azureuser能够执行sudo,该用户要被包含在sudoer列表中(/etc/sudoers 或 /etc/sudoers.d)。
2. 可用“sudo passwd root”设置root的口令并使能root用户。
3. 可用“sudo passwd -l root”和“sudo passwd -u root”锁定(lock)和解锁(unlock)root的口令。
4. 可修改 /etc/pam.d/su 控制用户能否执行su命令。
实例:
常用命令:
sudo: "superuser do" 需要输入用户口令
su: "switch user" 需要输入root口令
"su": 切换成root用户的shell环境
"su -": 切换成root用户的登陆后shell环境
"sudo su -": 得到root用户的登陆后的shell环境
"sudo -i": 等同“sudo su -”
"sudo -s": 启动一个root用户的shell环境
注:可以执行whoami,pwd,echo环境变量($PATH, $HOME, #SHELL等)比较上述命令的区别。
在不同的Linux和环境设置下,输出有可能不同。
参考:
In Unix, what are the sudo and su commands? https://kb.iu.edu/d/amyi
root Defintion http://www.linfo.org/root.html
Sudoers https://help.ubuntu.com/community/Sudoers
Understanding PAM http://aplawrence.com/Basics/understandingpam.html
环境:在Azure的虚拟机中运行Ubuntu 14.04, 在安装Ubuntu过程中,指定的用户名为azureuser。
1. 缺省情况下,Ubuntu禁用root用户,可用sudo临时获取执行root相关命令的权限。为了让azureuser能够执行sudo,该用户要被包含在sudoer列表中(/etc/sudoers 或 /etc/sudoers.d)。
2. 可用“sudo passwd root”设置root的口令并使能root用户。
3. 可用“sudo passwd -l root”和“sudo passwd -u root”锁定(lock)和解锁(unlock)root的口令。
4. 可修改 /etc/pam.d/su 控制用户能否执行su命令。
实例:
azureuser@vmname01:~$ sudo cat /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
vnc ALL=(ALL) ALL
azureuser@vmname01:~$ sudo ls -lrt /etc/sudoers.d
total 8
-r--r----- 1 root root 958 Feb 10 2014 README
-r--r----- 1 root root 129 Oct 1 16:31 90-cloud-init-users
azureuser@vmname01:~$ sudo cat /etc/sudoers.d/90-cloud-init-users
# Created by cloud-init v. 0.7.5 on Wed, 01 Oct 2014 16:31:58 +0000
# User rules for azureuser
azureuser ALL=(ALL) NOPASSWD:ALL # azureuser可以无须用户口令执行sudo命令
azureuser@vmname01:~$ sudo passwd -l root # 锁定root的口令,无法切换为root
passwd: password expiry information changed.
azureuser@vmname01:~$ su -
Password:
su: Authentication failure
azureuser@vmname01:~$ sudo passwd -u root # 解锁root的口令,可以切换为root
passwd: password expiry information changed.
azureuser@vmname01:~$ su -
Password:
root@vmname01:~# whoami;pwd;echo $HOME
root
/root
/root
root@vmname01:~# exit
logout
azureuser@vmname01:~$ su
Password:
root@vmname01:/home/azureuser# whoami;pwd;echo $HOME # 对于su - 和 su,当前目录不同
root
/home/azureuser
/root
root@vmname01:/home/azureuser# exit
exit
azureuser@vmname01:~$ sudo su -
root@vmname01:~# whoami;pwd;echo $HOME
root
/root
/root
root@vmname01:~# exit
logout
azureuser@vmname01:~$ sudo -i # sudo -i 等同于 sudo su -
root@vmname01:~# whoami;pwd;echo $HOME
root
/root
/root
root@vmname01:~# exit
logout
azureuser@vmname01:~$ sudo -s
root@vmname01:~# whoami;pwd;echo $HOME # sudo -s当前目录和$HOME未改变
root
/home/azureuser
/home/azureuser
root@vmname01:~#
常用命令:
sudo: "superuser do" 需要输入用户口令
su: "switch user" 需要输入root口令
"su": 切换成root用户的shell环境
"su -": 切换成root用户的登陆后shell环境
"sudo su -": 得到root用户的登陆后的shell环境
"sudo -i": 等同“sudo su -”
"sudo -s": 启动一个root用户的shell环境
注:可以执行whoami,pwd,echo环境变量($PATH, $HOME, #SHELL等)比较上述命令的区别。
在不同的Linux和环境设置下,输出有可能不同。
参考:
In Unix, what are the sudo and su commands? https://kb.iu.edu/d/amyi
root Defintion http://www.linfo.org/root.html
Sudoers https://help.ubuntu.com/community/Sudoers
Understanding PAM http://aplawrence.com/Basics/understandingpam.html