Невозможно выполнить команду как www-данные, используя su


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команду по уважительной причине, хочу верить)?

Ответы:


19

Без споров suпротив sudoвы можете попробовать добавить -s /bin/shв вашу командную строку. (Я не смог проверить, доступен ли этот параметр для jessie, поскольку веб-сервер manpages Debian не работает: https://manpages.debian.org/ )


Я неправильно предположил, что /bin/shиспользуется по умолчанию, и вы должны указать -sопцию, только если вы хотите изменить /bin/bashили аналогичный.
NarūnasK

3
Спасибо, это работает в Debian 9, su www-data -s /bin/shчтобы вернуться в root просто введите su.
П.Дж. Брюне

4
@PJBrunet - «чтобы вернуться к корню» (при условии, что у вас есть права пользователя root), вы должны набрать «exit». Чтобы запустить новую корневую оболочку, вы должны набрать 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..

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.