第29集:用户切换与切换环境
教学目标
- 理解Linux系统中用户切换的基本概念
- 掌握使用su命令切换用户
- 掌握使用sudo命令执行特权命令
- 了解sudo的配置方法
- 理解环境变量的概念和作用
- 掌握环境变量的设置和管理方法
- 了解shell配置文件的作用和使用方法
- 掌握用户环境的定制方法
核心知识点讲解
1. 用户切换概述
用户切换是Linux系统中常见的操作,它允许用户在不同的用户身份之间切换,以获取不同的权限和环境。
2. su命令
su(Switch User)命令用于切换到其他用户身份。
基本语法:
su [选项] [用户名]常用选项:
| 选项 | 描述 |
|---|---|
- |
切换用户时同时切换环境变量 |
-c |
执行指定的命令后返回原用户 |
-l |
同-,切换用户时同时切换环境 |
-m |
切换用户时保持当前环境变量 |
3. sudo命令
sudo(Superuser Do)命令允许普通用户以超级用户或其他用户的身份执行命令。
基本语法:
sudo [选项] [命令]常用选项:
| 选项 | 描述 |
|---|---|
-i |
以目标用户身份登录并打开交互式shell |
-s |
以目标用户身份执行shell |
-u |
指定要以哪个用户身份执行命令 |
-l |
列出当前用户可以执行的sudo命令 |
-k |
使sudo令牌失效,下次使用需要重新输入密码 |
4. sudo配置
/etc/sudoers文件
sudo的配置文件是/etc/sudoers,通常使用visudo命令编辑,以确保语法正确。
基本配置格式:
用户或组 主机=(运行身份) 命令示例:
# 允许wheel组的用户以任何用户身份执行任何命令
%wheel ALL=(ALL) ALL
# 允许user1以root身份执行指定命令
user1 ALL=(root) /usr/bin/apt,/usr/bin/systemctl
# 允许user2无需密码执行指定命令
user2 ALL=(root) NOPASSWD: /usr/bin/systemctl restart apache25. 环境变量
环境变量是存储系统和用户配置信息的变量,它们影响shell的行为和应用程序的运行。
常用环境变量
| 环境变量 | 描述 |
|---|---|
HOME |
用户的主目录 |
PATH |
可执行文件的搜索路径 |
SHELL |
用户的默认shell |
USER |
当前用户名 |
LOGNAME |
当前登录名 |
LANG |
语言和地区设置 |
TERM |
终端类型 |
PWD |
当前工作目录 |
OLDPWD |
上一个工作目录 |
6. 环境变量的设置
临时设置
# 临时设置环境变量
export VARNAME=value
# 查看环境变量
echo $VARNAME
# 或使用printenv命令
printenv VARNAME永久设置
系统级设置:
/etc/environment:系统级环境变量/etc/profile:系统级shell配置/etc/bash.bashrc:系统级bash配置(Debian/Ubuntu)/etc/bashrc:系统级bash配置(CentOS/RHEL)
用户级设置:
~/.profile:用户级shell配置~/.bash_profile:用户级bash配置(登录shell)~/.bashrc:用户级bash配置(交互式非登录shell)~/.bash_login:用户级登录配置
7. Shell配置文件的执行顺序
登录shell:
/etc/profile~/.bash_profile或~/.bash_login或~/.profile(按顺序查找,执行第一个找到的)~/.bash_logout(退出时执行)
交互式非登录shell:
/etc/bash.bashrc或/etc/bashrc~/.bashrc
8. 用户环境定制
用户可以通过修改shell配置文件来自定义自己的工作环境,例如:
- 设置别名
- 定义函数
- 设置环境变量
- 定制命令提示符
- 配置历史命令行为
- 加载常用工具和脚本
9. 安全注意事项
- su命令安全:su命令需要知道目标用户的密码,应谨慎使用
- sudo安全:应根据最小权限原则配置sudo,避免过度授权
- 密码保护:执行sudo命令时应注意周围环境,避免密码被窃取
- 环境变量安全:避免在环境变量中存储敏感信息
- 配置文件权限:确保shell配置文件的权限正确,避免被他人修改
操作示例
示例1:使用su命令切换用户
# 切换到root用户(需要输入root密码)
su
# 切换到root用户并同时切换环境
su -
# 切换到指定用户
su user1
# 切换到指定用户并同时切换环境
su - user1
# 以root身份执行单个命令后返回
su -c "apt update"
# 以指定用户身份执行单个命令
su -c "ls -la" user1
# 切换用户时保持当前环境变量
su -m user1示例2:使用sudo命令
# 以root身份执行命令
sudo apt update
# 以指定用户身份执行命令
sudo -u user1 ls -la
# 以root身份登录并打开交互式shell
sudo -i
# 以root身份执行shell
sudo -s
# 列出当前用户可以执行的sudo命令
sudo -l
# 使sudo令牌失效
sudo -k
# 验证sudo权限
sudo whoami示例3:配置sudo
# 使用visudo编辑sudo配置文件
sudo visudo
# 添加以下配置:
# 允许user1以root身份执行任何命令
user1 ALL=(ALL) ALL
# 允许user2无需密码执行指定命令
user2 ALL=(root) NOPASSWD: /usr/bin/systemctl restart apache2
# 允许wheel组的用户以任何用户身份执行任何命令
%wheel ALL=(ALL) ALL
# 保存并退出示例4:环境变量的设置和管理
# 临时设置环境变量
export MY_VAR="Hello World"
# 查看环境变量
echo $MY_VAR
printenv MY_VAR
# 查看所有环境变量
env
printenv
# 永久设置环境变量(用户级)
echo "export MY_VAR=\"Hello World\"" >> ~/.bashrc
# 重新加载配置文件
source ~/.bashrc
# 或使用.
. ~/.bashrc
# 永久设置环境变量(系统级)
sudo echo "MY_VAR=\"Hello World\"" >> /etc/environment
# 查看PATH环境变量
echo $PATH
# 修改PATH环境变量
export PATH=$PATH:/new/path
# 永久修改PATH
echo "export PATH=\"$PATH:/new/path\"" >> ~/.bashrc示例5:Shell配置文件的使用
# 编辑用户的bash配置文件
nano ~/.bashrc
# 添加以下内容:
# 设置别名
alias ll='ls -la'
alias la='ls -A'
alias l='ls -CF'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
alias ls='ls --color=auto'
# 定义函数
function mkcd() {
mkdir -p "$1" && cd "$1"
}
# 设置环境变量
export EDITOR=nano
export VISUAL=nano
export HISTCONTROL=ignoreboth:erasedups
export HISTSIZE=1000
export HISTFILESIZE=2000
# 定制命令提示符
export PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
# 保存并退出
# 重新加载配置文件
source ~/.bashrc
# 测试别名
ll
# 测试函数
mkcd test_directory
pwd示例6:用户环境的定制
# 创建用户的bin目录
mkdir -p ~/bin
# 将用户的bin目录添加到PATH
echo "export PATH=\"$HOME/bin:$PATH\"" >> ~/.bashrc
# 创建一个自定义脚本
cat > ~/bin/mybackup.sh << 'EOF'
#!/bin/bash
# 简单的备份脚本
date=$(date +%Y%m%d)
backup_dir=~/.backup/$date
mkdir -p $backup_dir
cp -r ~/Documents $backup_dir/
echo "备份完成:$backup_dir"
EOF
# 使脚本可执行
chmod +x ~/bin/mybackup.sh
# 重新加载配置文件
source ~/.bashrc
# 测试脚本
mybackup.sh
# 配置命令历史
# 编辑~/.bashrc,添加:
export HISTCONTROL=ignoreboth:erasedups
export HISTSIZE=1000
export HISTFILESIZE=2000
shopt -s histappend
# 保存命令历史的时间戳
# 编辑~/.bashrc,添加:
export HISTTIMEFORMAT="%F %T "
# 重新加载配置文件
source ~/.bashrc
# 查看带时间戳的历史命令
history | tail示例7:sudo和环境变量
# 默认情况下,sudo会重置环境变量
# 例如:
export TEST_VAR="test value"
echo $TEST_VAR
sudo echo $TEST_VAR # 应该为空
# 要在sudo中保留环境变量,可以使用-E选项
sudo -E echo $TEST_VAR
# 或者在sudo配置中设置
# sudo visudo
# 添加:Defaults env_keep += "TEST_VAR"
# 保存并退出
# 再次测试
sudo echo $TEST_VAR示例8:安全使用sudo
# 1. 遵循最小权限原则
# 只授权必要的命令
sudo visudo
# 添加:user1 ALL=(root) /usr/bin/systemctl restart apache2
# 2. 定期检查sudo配置
# 查看sudo配置
sudo cat /etc/sudoers
# 3. 限制sudo会话时间
# 在sudo配置中添加:Defaults timestamp_timeout=5
# 4. 启用sudo日志
# 确保sudo操作被记录
# 查看sudo日志
sudo cat /var/log/auth.log | grep sudo # Debian/Ubuntu
sudo cat /var/log/secure | grep sudo # CentOS/RHEL
# 5. 使用sudo的-i选项获取干净的环境
sudo -i课后练习
基础练习:
- 使用su命令切换到不同用户
- 使用sudo命令执行特权命令
- 设置和查看环境变量
进阶练习:
- 配置sudo权限
- 永久设置环境变量
- 定制shell配置文件
- 创建和使用自定义脚本
思考问题:
- su命令和sudo命令有什么区别?
- 如何安全地配置sudo权限?
- 环境变量的作用是什么?如何永久设置环境变量?
- shell配置文件的执行顺序是什么?
总结
本集介绍了Linux系统中用户切换与环境管理的相关知识,包括:
- 使用su命令切换用户
- 使用sudo命令执行特权命令
- sudo的配置方法
- 环境变量的概念和管理
- shell配置文件的使用
- 用户环境的定制方法
- 安全使用sudo的注意事项
用户切换和环境管理是Linux系统中重要的操作,掌握这些技能可以帮助用户更有效地使用系统资源,提高工作效率,同时确保系统的安全性。通过本集的学习,您应该能够熟练地在不同用户身份之间切换,执行特权命令,以及定制自己的工作环境。在下一集中,我们将介绍Linux系统中权限管理的基础知识。