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

21

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

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

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

blah@ubuntu:
(nothing happens)

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

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

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

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

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

user123361
источник
ты не забыл флаг -c для запуска irssi? (su -c irssi)
Эефина
попробовал это тоже ... попробовал тысячу вещей ... почему так сложно запустить как WTF, что именно так, как этого хочет man-страница ... но ничего не происходит grrrr
user123361
может ли быть так, что irssiесть проблема, и что команда su работает?
Нанне
Имеет ли ´ [имя пользователя] ´ права на запуск irssi?
Дока

Ответы:

28

Этот ответ все еще должен помочь вам, даже принимая во внимание изменения в вопросе. В частности, учетная запись, созданная с помощью, --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

Если вы не укажете , это то же самое, что --it пытается выполнить команду от имени пользователя root.-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

И вы бы вводили свой пароль при появлении запроса, а не roots.

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

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это интерфейс для обоих su и sudo. В Ubuntu он по умолчанию используется sudo(поскольку в Ubuntu suобычно не используется для становления rootи является лишь второстепенным способом стать другим, не являющимся rootпользователем).

Вы можете gksuиспользовать suв качестве внешнего интерфейса, запустив 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Логин «S оболочка была нефункциональной команды типа , , и не мог работать.su usernamesu - usernamesudo -u username -ssudo -u username -i

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

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

    sudo chsh -s /bin/bash username

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

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

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

Элия ​​Каган
источник
Извините за многочисленные правки, пока вы работали над своим ответом. Вау. Спасибо. Когда я выполняю команду cat / etc / passwd, у пользователя, которого я настроил, в конце есть / bin / false - так что же вызывает ошибку? есть идеи как это исправить?
user123361
По какой-либо причине использование sudo -u username irssi работает без проблем. Спасибо за ваш длинный, хорошо объясненный ответ!
user123361
@db Я рад, что это сработало! (Между прочим, не нужно извиняться за редактирование, редактирование очень, очень хорошее, и ваш вопрос, вероятно, будет полезен и для других людей в результате редактирования.) Что касается других ваших вопросов, я отредактировал свой ответ на включите раздел анализа в конце.
Элия ​​Каган