想在 php 容器中想切换至 www-data 去执行一些低权限的操作,但执行 su www-data 的时候提示账号不可用:

$ su www-data
This account is currently not available.

这是因为,在 php 容器中 www-data 账号默认是被禁止登录的。查看 /etc/passwd 确认被禁止登录:

$ cat /etc/passwd
...
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
...

有的教程会告诉你,把  /etc/passwd 中的这个 /usr/sbin/nologin 改成 /bin/bash 可解除这个限制。确实可行,不过呢,还有另一种不修改文件的方法,如下。

在执行 su www-data 的时候可以通过 -s 参数改变目标账号默认的 shell,如执行 su www-data -s /bin/bash,这样就可以登录 www-data 账号了。

如果只是想执行某条指令后就退出,可以使用 -c 参数,如:

$ su www-data -s /bin/bash -c 'touch hello'