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 command

sudo 配置

什么是 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/sudoers

sudoers 配置示例

# 允许用户无密码执行所有命令
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-x755所有者完全权限,其他读执行
rwxrwxrwx777所有用户完全权限(不安全)

修改文件所有者

# 修改所有者
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 -4000

SetGID(SGID)

# 设置 SGID(以文件组身份执行)
sudo chmod g+s file
sudo chmod 2755 file
 
# 目录 SGID(新文件继承组)
sudo chmod g+s directory

Sticky 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

📚 参考资源


返回 WSL 知识体系

WSL 用户管理 权限管理 sudo