www-data 是 Apache、Nginx 等 Web 服务的默认运行用户,默认被限制登录权限。赋予其 SSH 登录能力存在安全隐患:若 Web 程序被入侵,攻击者可通过 SSH 进一步控制服务器。
生产环境如需管理 Web 目录,优先使用 sudo -u www-data 切换用户,而非开启 SSH 登录。
www-data 的家目录默认配置为 /var/www,但该目录默认所有者为 root 用户。bash 执行 history 命令时,需要在 /var/www 下创建 / 写入 .bash_history 文件保存命令历史,www-data 因无目录写入权限触发报错。
- 修改 /var/www 目录所有权
将目录及其子文件的所有者和所属组改为 www-data,确保用户对家目录的完全控制权:
sudo chown -R www-data:www-data /var/www
- 配置目录权限
设置权限为 755,保证 www-data 可读写执行,其他用户仅可读,避免影响 Web 服务正常运行:
sudo chmod -R 755 /var/www
- 手动创建并配置 .bash_history 文件
提前创建文件并配置严格权限,避免首次执行 history 仍触发错误:
sudo touch /var/www/.bash_history
sudo chown www-data:www-data /var/www/.bash_history
sudo chmod 600 /var/www/.bash_history
通过本地切换用户验证问题是否解决,无需 SSH 登录:
sudo su - www-data
history
- 验证成功:无「权限不够」报错,命令行显示历史记录(首次执行可能为空)。
- 验证失败:重新检查目录及文件的所有者和权限配置。
www-data 默认 Shell 为 /usr/sbin/nologin,会直接拒绝 SSH 登录,需改为可交互 Shell:
sudo usermod -s /bin/bash www-data
grep www-data /etc/passwd
在本地客户端(需登录服务器的设备)生成密钥对,无需设置密码短语,实现真正无密码登录:
ssh-keygen -t rsa -b 4096
生成后,客户端公钥路径为 ~/.ssh/id_rsa.pub(Windows 系统路径:C:\Users\你的用户名\.ssh\id_rsa.pub)。
SSH 对密钥文件和目录的权限要求极高,权限错误会直接导致登录失败,需严格按步骤执行:
- 创建 www-data 的 .ssh 目录
sudo mkdir -p /var/www/.ssh
- 配置 .ssh 目录权限
- 导入客户端公钥
- 方式 1(客户端与服务器直连,推荐)
在客户端执行以下命令,一键将公钥复制到服务器:
ssh-copy-id -i ~/.ssh/id_rsa.pub www-data@你的服务器IP
- 方式 2(无法直连,手动粘贴)
- 复制客户端
id_rsa.pub 文件内的全部内容
- 在服务器执行命令,编辑公钥授权文件:
sudo nano /var/www/.ssh/authorized_keys
编辑 SSH 服务配置文件,强制仅允许密钥登录,彻底关闭密码登录通道:
- 打开配置文件
sudo nano /etc/ssh/sshd_config
- 修改以下配置项
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
- 重启 SSH 服务使配置生效
sudo systemctl restart sshd
在客户端执行以下命令,验证是否无需输入密码即可登录:
- 登录成功:直接进入
www-data 命令行界面,无密码提示。
- 登录失败:查看服务器 SSH 日志排查问题:
sudo tail -f /var/log/auth.log | grep www-data
- 常见故障原因:
.ssh 目录或 authorized_keys 文件权限错误、公钥粘贴不完整。
若配置后无法登录服务器,通过服务器本地终端执行以下命令恢复密码登录:
sudo sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
sudo systemctl restart sshd
- 若必须开启
www-data SSH 登录,务必配置 AllowUsers 限制登录 IP,避免全网可访问。
- 定期检查 SSH 登录日志,监控异常行为:
sudo tail -f /var/log/auth.log | grep www-data
© 版权声明
文章版权归作者所有,部分内容可能由 AI 生成,不能完全保障真实。