WSL 用户与权限管理
WSL 中的用户管理、sudo 配置和文件权限
📋 目录
用户管理
查看当前用户
# 查看当前登录用户
whoami
# 查看用户 ID 和组 ID
id
# 查看用户详细信息
id username创建新用户
# 创建新用户
sudo adduser newuser
# 创建用户(不创建主目录)
sudo useradd newuser
# 创建用户并指定主目录
sudo useradd -m -d /home/newuser newuser
# 创建用户并指定 shell
sudo useradd -m -s /bin/bash newuser设置用户密码
# 设置当前用户密码
passwd
# 设置指定用户密码(需要 root 权限)
sudo passwd username删除用户
# 删除用户(保留主目录)
sudo userdel username
# 删除用户及其主目录
sudo userdel -r username切换用户
# 切换到其他用户
su username
# 切换到 root 用户
su -
# 或
sudo su -
# 以其他用户身份执行命令
sudo -u username commandsudo 配置
什么是 sudo
sudo(Super User Do)允许授权用户以其他用户(通常是 root)的身份执行命令。
配置 sudo 权限
将用户添加到 sudo 组
# 将用户添加到 sudo 组(Ubuntu/Debian)
sudo usermod -aG sudo username
# 将用户添加到 wheel 组(CentOS/RHEL)
sudo usermod -aG wheel username编辑 sudoers 文件
# 使用 visudo(推荐,会检查语法)
sudo visudo
# 直接编辑(不推荐)
sudo nano /etc/sudoerssudoers 配置示例
# 允许用户无密码执行所有命令
username ALL=(ALL) NOPASSWD: ALL
# 允许用户执行特定命令
username ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get
# 允许用户组执行所有命令
%sudo ALL=(ALL) ALL
# 允许用户在特定主机上执行命令
username HOSTNAME=(ALL) ALL常用 sudo 选项
# 以 root 身份执行命令
sudo command
# 以指定用户身份执行命令
sudo -u username command
# 执行命令并保持环境变量
sudo -E command
# 切换到 root shell
sudo -i
sudo -s
# 查看 sudo 权限
sudo -l配置 sudo 超时
# 编辑 sudoers 文件
sudo visudo
# 设置超时时间(分钟)
Defaults timestamp_timeout=30
# 禁用超时(每次都需要输入密码)
Defaults timestamp_timeout=0
# 设置超时为永久(不推荐)
Defaults timestamp_timeout=-1文件权限
查看文件权限
# 详细列表显示权限
ls -l file.txt
# 显示目录权限
ls -ld directory
# 递归显示权限
ls -lR directory输出示例:
-rwxr-xr-x 1 username group 1234 Jan 1 12:00 file.txt
drwxr-xr-x 2 username group 4096 Jan 1 12:00 directory
权限说明:
- 第 1 位:文件类型(
-普通文件,d目录,l链接) - 第 2-4 位:所有者权限(rwx)
- 第 5-7 位:组权限(rwx)
- 第 8-10 位:其他用户权限(rwx)
权限符号
r(read):读权限(4)w(write):写权限(2)x(execute):执行权限(1)
修改文件权限
使用 chmod(符号模式)
# 添加执行权限
chmod +x script.sh
# 移除写权限
chmod -w file.txt
# 设置所有者读写,组和其他只读
chmod u=rw,go=r file.txt
# 递归设置目录权限
chmod -R 755 directory使用 chmod(数字模式)
# 755:所有者读写执行,组和其他读执行
chmod 755 script.sh
# 644:所有者读写,组和其他只读
chmod 644 file.txt
# 600:所有者读写,组和其他无权限
chmod 600 private_file.txt
# 777:所有用户完全权限(不推荐)
chmod 777 file.txt
# 递归设置
chmod -R 755 directory常用权限组合
| 权限 | 数字 | 说明 |
|---|---|---|
| rwx------ | 700 | 仅所有者可读写执行 |
| rw-r—r— | 644 | 所有者读写,其他只读 |
| rwxr-xr-x | 755 | 所有者完全权限,其他读执行 |
| rwxrwxrwx | 777 | 所有用户完全权限(不安全) |
修改文件所有者
# 修改所有者
sudo chown username file.txt
# 修改所有者和组
sudo chown username:group file.txt
# 递归修改
sudo chown -R username:group directory修改文件组
# 修改组
sudo chgrp groupname file.txt
# 递归修改
sudo chgrp -R groupname directory默认权限(umask)
# 查看当前 umask
umask
# 设置 umask
umask 022 # 默认权限 755(目录)或 644(文件)
umask 002 # 默认权限 775(目录)或 664(文件)
# 永久设置(添加到 ~/.bashrc)
echo 'umask 022' >> ~/.bashrc用户组管理
查看用户组
# 查看当前用户所属组
groups
# 查看指定用户所属组
groups username
# 查看所有组
cat /etc/group
# 查看组信息
getent group groupname创建用户组
# 创建新组
sudo groupadd newgroup
# 创建系统组
sudo groupadd -r systemgroup删除用户组
# 删除组
sudo groupdel groupname将用户添加到组
# 将用户添加到组
sudo usermod -aG groupname username
# 将用户添加到多个组
sudo usermod -aG group1,group2,group3 username从组中移除用户
# 从组中移除用户(需要编辑 /etc/group 或使用 gpasswd)
sudo gpasswd -d username groupname默认用户设置
查看默认用户
# 在 WSL 中查看默认用户配置
cat /etc/wsl.conf | grep default设置默认用户(方法一:wsl.conf)
# 编辑 wsl.conf
sudo nano /etc/wsl.conf
# 添加或修改
[user]
default = username然后重启 WSL:
wsl --shutdown
wsl设置默认用户(方法二:发行版配置工具)
# Ubuntu
ubuntu config --default-user username
# Ubuntu 22.04
ubuntu2204 config --default-user username
# Debian
debian config --default-user username设置默认用户(方法三:注册表)
# 查看注册表项
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss" /s
# 修改 DefaultUid(需要找到对应发行版的 GUID)特殊权限
SetUID(SUID)
# 设置 SUID(以文件所有者身份执行)
sudo chmod u+s file
sudo chmod 4755 file
# 查看 SUID 文件
find /usr -perm -4000SetGID(SGID)
# 设置 SGID(以文件组身份执行)
sudo chmod g+s file
sudo chmod 2755 file
# 目录 SGID(新文件继承组)
sudo chmod g+s directorySticky Bit
# 设置 Sticky Bit(只有所有者可以删除)
sudo chmod +t directory
sudo chmod 1755 directory
# 查看 Sticky Bit 目录
find /tmp -perm -1000安全最佳实践
1. 最小权限原则
- 只授予必要的权限
- 避免使用 777 权限
- 定期审查文件权限
2. 用户管理
- 为不同用途创建不同用户
- 禁用不需要的用户账户
- 定期审查用户列表
3. sudo 配置
- 限制 sudo 权限范围
- 使用 NOPASSWD 要谨慎
- 定期审查 sudoers 配置
4. 文件权限检查
# 查找权限过宽的文件
find /home -perm -007 # 其他用户有写权限
find /home -perm -002 # 其他用户有写权限
# 查找 SUID/SGID 文件
find /usr -perm -4000 # SUID
find /usr -perm -2000 # SGID