无法使用su将命令作为www-data运行


14
# su -l www-data ./http-app.py
This account is currently not available.
# su -l www-data -c ./http-app.py
This account is currently not available.
# su -c ./http-app.py www-data 
This account is currently not available.
# su -lc ./http-app.py www-data 
This account is currently not available.
# getent passwd www-data 
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
# getent shadow www-data 
www-data:*:16842:0:99999:7:::
# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 8.6 (jessie)
Release:        8.6
Codename:       jessie

su或我www-data怎么了?它曾经工作...

大概是由于引起的/usr/sbin/nologin,但是我又该如何放弃root这个脚本而又不损害系统上的其他服务(我想相信,这nologin是由Debian团队选择的充分理由)?

Answers:


19

在不争论suvs.的情况下,sudo您可以尝试添加-s /bin/sh到命令行中。(由于Debian联机帮助页网络服务器无法正常工作,我无法验证此选项是否可用于jessie:https : //manpages.debian.org/


我错误地假定/bin/sh默认使用该-s选项,并且仅当您想更改为/bin/bash或类似选项时,才必须指定选项。
NarūnasK

3
谢谢,它在Debian 9 su www-data -s /bin/sh中可以恢复到root类型su
PJ Brunet

4
@PJBrunet-“回到根目录”(假设您是从根目录进来的),您将键入“ exit”。要启动新的根shell,您将键入su。
ChronoFish

31

您使用的su是用来“切换用户”的。当然,它将无法使用,因为它www-data是无法用于登录的用户帐户。您已经告诉过:/usr/sbin/nologin

也许您想要的sudo是用来“以另一个用户身份执行命令”的内容。

sudo -u www-data ./http-app.py

我一直su为此目的而使用,并且它一直都在工作。sudo是要安装的额外软件包,但是您是对的,我可以使用它来实现所需的功能。
NarūnasK

1

如果您不仅要执行一个命令,而且要切换到www-data该命令以对该用户进行测试,那么这对我有用:

sudo -u www-data sh

有点短。使用[ctrl] + [d]退出会话,或exit


0

对于这种问题,我使用了选项-p

su -pc ./http-app.py www-data

-p:保留环境。特别是,它不会尝试使用新帐户登录,因此您不会收到以下消息:This account is currently not available.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.