允许 www 用户正常登录

这个提示:


```bash

sudo -iu www

此帐户目前不可用。

```


说明 `www` 这个用户的登录 Shell 被设置成了:


```bash

/sbin/nologin

```


或:


```bash

/usr/sbin/nologin

```


也可能是:


```bash

/bin/false

```


所以它不能正常登录。


---


## 1. 先查看 www 用户信息


执行:


```bash

grep '^www:' /etc/passwd

```


你可能会看到类似:


```text

www:x:1001:1001::/home/www:/sbin/nologin

```


最后一列就是登录 shell:


```text

/sbin/nologin

```


这就是报错原因。


---


# 方案一:临时以 www 用户执行命令


如果你只是想临时用 `www` 用户执行 PM2,可以这样:


```bash

su -s /bin/bash www

```


或者:


```bash

sudo -u www -s /bin/bash

```


如果提示没有家目录或权限异常,需要指定 HOME:


```bash

sudo -u www HOME=/home/www /bin/bash

```


然后再执行:


```bash

whoami

```


应该输出:


```text

www

```


---


# 方案二:允许 www 用户正常登录


如果你确定要长期用 `www` 用户运行 PM2,可以把它的 shell 改成 `/bin/bash`。


执行:


```bash

usermod -s /bin/bash www

```


然后再试:


```bash

sudo -iu www

```


或者:


```bash

su - www

```


---


## 还要确认 www 有家目录


查看:


```bash

grep '^www:' /etc/passwd

```


例如:


```text

www:x:1001:1001::/home/www:/bin/bash

```


如果家目录是 `/home/www`,确认目录存在:


```bash

ls -ld /home/www

```


如果不存在,创建:


```bash

mkdir -p /home/www

chown -R www:www /home/www

```


如果家目录不是 `/home/www`,比如是:


```text

/var/www

```


那就确认它有权限:


```bash

chown -R www:www /var/www

```


---


# 方案三:更推荐,新建专门的应用用户


不太建议直接用 `www` 用户跑 PM2,尤其是它本来是 nginx/apache/php-fpm 的运行用户。


更推荐创建一个专门用户,例如:


```bash

useradd -m -s /bin/bash appuser

```


然后把项目目录给它:


```bash

chown -R appuser:appuser /你的项目目录

```


切换用户:


```bash

sudo -iu appuser

```


再启动 PM2:


```bash

cd /你的项目目录

pm2 start app.js --name myapp

pm2 save

```


这样更清晰,也更安全。


---


# 如果你坚持用 www 跑 PM2,完整操作示例


假设项目目录是:


```bash

/www/wwwroot/myapp

```


执行:


```bash

usermod -s /bin/bash www

mkdir -p /home/www

chown -R www:www /home/www

chown -R www:www /www/wwwroot/myapp

```


切换到 `www`:


```bash

sudo -iu www

```


进入项目:


```bash

cd /www/wwwroot/myapp

```


检查 node/npm/pm2:


```bash

node -v

npm -v

pm2 -v

```


如果 PM2 没有:


```bash

npm install -g pm2

```


启动应用:


```bash

pm2 start app.js --name myapp

pm2 save

```


配置开机自启:


```bash

pm2 startup

```


它会输出一条命令,类似:


```bash

sudo env PATH=$PATH:/usr/local/bin pm2 startup systemd -u www --hp /home/www

```


复制输出的那条命令,用 root 执行。


然后回到 `www` 用户:


```bash

pm2 save

```


---


# 如果不想修改 www 的登录 shell


也可以临时这样执行 PM2:


```bash

sudo -u www HOME=/home/www /bin/bash -c 'pm2 list'

```


或者启动项目:


```bash

sudo -u www HOME=/home/www /bin/bash -c 'cd /www/wwwroot/myapp && pm2 start app.js --name myapp'

```


但这种方式不如直接创建 `appuser` 清晰。


---


# 总结


你这个错误的直接原因是:


```text

www 用户禁止登录

```


可以用下面命令解决:


```bash

usermod -s /bin/bash www

mkdir -p /home/www

chown -R www:www /home/www

sudo -iu www

```


但更推荐:


```bash

useradd -m -s /bin/bash appuser

```


然后用 `appuser` 专门运行 PM2。