Как запустить команду от имени пользователя, чей логин отключен?

Я пытаюсь использовать команду su для запуска приложения от имени другого пользователя

В этом случае я пытаюсь запустить irssi

blah@ubuntu: su - [username] irssi
(enter password)

blah@ubuntu:
(nothing happens)

blah@ubuntu: su - [username] -c irssi
(nothing)

Я запускаю gksu и устанавливаю те же параметры и это работает, и не спрашивает у меня пароль пользователя. В чем проблема? И как мне это решить?

Я должен отметить, что пользователь был создан таким образом

adduser --system --disabled-login [username]

, если это что-то меняет .... вздох.

21
задан 15 January 2013 в 12:02

1 ответ

Этот ответ должен все еще помочь Вам, даже беря редактирования к вопросу во внимание. В частности, учетная запись, созданная с --disabled-login не имеет никакого набора пароля и никаких других средств входа в систему, но должно все еще быть возможно использовать sudo (объясненный ниже) к командам выполнения или оболочке как пользователь. Это, на самом деле, как root учетная запись настраивается в Ubuntu.

Существуют многочисленные проблемы с командой su - irssi.

Эта команда пытается запуститься, оболочка, принадлежавшая пользователю, назвала irssi.

Это перестанет работать если:

  • Существует нет irssi пользователь.
  • irssi учетная запись пользователя отключена.
  • irssi учетная запись пользователя отключена для интерактивного входа в систему. Иногда учетной записи разрешают использовать сервисы как FTP, но мешают обычно входить в систему путем установки их оболочки на что-то, что сразу выходит, как /bin/false. Затем вход в систему сразу заканчивается без сообщения.
  • Пароль, который Вы вводите, не является правильным для irssi пользователь.

- флаг делает его так, оболочка моделирует начальную оболочку входа в систему - то есть, таким образом, это действительно очень похоже на вхождение в систему как irssi. Без - флаг, если su команда успешно выполнилась, Вы все еще владели бы оболочкой irssi, но переменные среды как HOME было бы неизменно.

Если Вы вместо этого хотите запустить названную программу irssi, необходимо вызвать su по-другому:

su username - -c irssi

Если Вы не учитываете -c username, это совпадает с -c root- это пытается выполнить команду как корень.

Кроме того, можно запустить оболочку и затем выполнить команду:

  1. Запустите оболочку с su username -.
  2. В оболочке, выполненной команда (irssi).
  3. Если Вы сделаны, оставляете оболочку путем выполнения exit.

Выполнение команд как root

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

Когда Вы команды выполнения с sudo, Вы вставляете свой пароль, не пароль пользователя, при идентификационных данных которого Вы хотите, чтобы команда работала. Только администраторы могут выполнить произвольные команды как root с sudo (если Вы не реконфигурировали sudo позволить другим делать так, конечно). Таким образом, пользователя, которому не разрешают администрировать систему, не разрешают командам выполнения как root с их собственным паролем.

Работать irssi как root с sudo:

sudo irssi

И Вы ввели бы свой пароль при запросе, нет root.

Кроме того, какой пароль Вы вводите, это делает то же самое как:

su -c irssi

Кроме sudo версия может успешно выполниться, потому что она не требует root учетная запись, которая будет включена.

Как с su, можно использовать sudo к командам выполнения как другой, не -root пользователь. Работать irssi как username с sudo:

sudo -u username irssi

Если Вы хотите sudo вести себя как su - относительно HOME- то есть, Вы хотите использовать целевого пользователя HOME переменные среды, можно работать sudo с -H флаг:

sudo -H irssi
sudo -H -u username irssi

Можно запустить целую оболочку с sudo, как Вы может с su. За исключением чьего пароля Вы вставляете, эта команда имеет тот же эффект как su:

sudo -s

И эта команда имеет тот же эффект как su -:

sudo -i

( i обозначает начальную оболочку входа в систему.)

Можно запустить оболочку как другой пользователь, также:

sudo -u username -s
sudo -u username -i

Дополнительные материалы для чтения на sudo

Узнать больше sudo, смотрите на:

Почему сделал gksu работа, когда su не?

gksu вероятно, работавший путем выполнения sudo.

gksu frontend для обоих su и sudo. В Ubuntu это принимает значение по умолчанию к использованию sudo (так как в Ubuntu, su обычно не используется для становления root, и только вторичный способ стать другим, не -root пользователи).

Можно сделать gksu использовать su как frontend путем выполнения gksu --su-mode.

Можно узнать ли gksu находится в su режим или sudo режим, и (если Вы желаете) изменяет эти настройки путем выполнения gksu-properties. Это - установка в расчете на пользователя.

Когда gksu находится в sudo режим, это ведет себя то же как gksudo.

Дополнительные материалы для чтения на gksu


Анализ пострешения

Вы нашли в конечном счете, что смогли выполнить необходимую команду с:

sudo -u username irssi

(Который имеет упомянутые выше методы.)

В конечном счете Вы сообщили о двух сведениях, которые достаточны для объяснения, почему случалось так, что другие методы перестали работать, но который успешно выполнился:

  1. username учетная запись была создана с --disabled-login флаг, который заставляет его не иметь никакого пароля (и никакие другие средства входа в систему). Наличие никакого пароля не означает, что возможно войти в систему с пустым паролем. Это означает, что никакой пароль не достаточен пройти проверку подлинности. В сочетании с устранением других средств аутентификации это означает username не может пройти проверку подлинности вообще.

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

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

    sudo passwd username

    Однако могло бы быть серьезное основание, пользователю не разрешают войти в систему. Например, если бы этому пользователю разрешили войти в систему и вошел в систему графически, то плохие проблемы явились бы результатом среды пользователя или полномочий, являющихся плохо подходящим для выполнения приложения X11? Если бы этот пользователь мог бы войти в систему, который позволил бы войти в систему удаленно как тот пользователь (для машин, где Вы выставили сетевые службы)?

    Если Вы когда-нибудь хотите повторно отключить его:

    sudo passwd -dl username

    Похожие страницы: Переотключение root учетная запись, временно включив это.

  2. username учетная запись имеет /bin/false как его оболочка входа в систему.

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

    Когда /bin/false выполнения, с другой стороны, это ничего не делает и сообщает об отказе. (/bin/true ничего не делает и сообщает об успехе.)

    false и true команды полезны в сценариях и в различных целях тестирования, но также и для отключения учетной записи так, чтобы, когда кто-то входит в систему, их сессия входа в систему сразу закончилась. Тем путем пароль (или другие средства аутентификации) может быть включен, и люди могут войти в систему, просто не для доступа оболочки. Например, если существует FTP-сервер, они могли бы все еще получить доступ к своей учетной записи через FTP. Если бы существует сервер SSH, они не смогли бы получить оболочку через SSH, но они могли все еще использовать sftp и scp передать файлы.

    С тех пор usernameоболочка входа в систему была нефункциональна, команды как su username, su - username, sudo -u username -s, и sudo -u username -i не мог работать.

    Но команды, которые не дают оболочку, как sudo -u username command или su username -c 'command' мог все еще работать.

    Так как команды могут быть выполнены, можно изменить оболочку входа в систему пользователя на что-то функциональное:

    sudo chsh -s /bin/bash username

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

Здесь, username оба отключили пароль и "отключили" оболочку. Отсутствие любого рабочего пароля предотвратило все su- основанные решения от работы, в то время как отсутствие рабочей интерактивной оболочки входа в систему препятствовало всем порождающим оболочку решениям работать (кроме ручного вызова оболочки, как sudo -u username bash).

sudo -u username command то, что осталось.

28
ответ дан 15 January 2013 в 12:02

Другие вопросы по тегам:

Похожие вопросы: