X

Linux: su, sudo и This account is currently not available, на примере www-data

Очень часто надо запустить тот или иной процесс от пользователя от которого работает веб-сервер. Это не всегда получается сделать быстро, т.к. политики безопасности ограничивают эту учетную запись. В этой заметке, соберу причины и команды которые помогут нам сделать то, что мы хотим..

This account is currently not available

Наиболее типичной проблемой, является невозможность залогиниться под нужным пользователем, выглядит это так

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

это говорит о том, что шелл для текущего пользователя установлен в заглушку. Проверить можно так

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

тут /usr/sbin/nologin и является такой заглушкой. Если вы отдаете себе отчет, то можно просто поменять заглушку на нормальный шелл и начнет все работать

$ chsh -s /bin/bash www-data

$ sudo - www-data
$ whoami
www-data

разумеется, потом всегда можно вернуть назад

$ chsh -s /usr/sbin/nologin www-data

Список доступных шелов можно посмотреть так

$ chsh --list-shells
# или так
$ cat /etc/shells

Логин без смены шелла

Если же вам нужно временно залогиниться от этого пользователя, но менять шелл каждый раз не удобно, можно воспользоваться такой командой, указав шелл в командной строке

$ su -l www-data -s /bin/bash
$ whoami
www-data

Запуск команды от пользователя

Если же нужно просто запустить команду от пользователя, сделать это можно так

$ su www-data -s /bin/bash -c 'whoami'
www-data

или с помощью sudo

$ sudo -u www-data whoami
www-data

Ключевое отличие su от sudo в том, что при использовании su вам нужно поделиться root паролем с другими пользователями чтобы они могли выполнять команды от имени других пользователей. В случае с sudo, админ настраивает кто и что может запускать используя свой, пользовательский пароль. Это все работает, немного сложнее, но основная суть в этом.

Категории: Linux