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

20

Я пытаюсь использовать команду 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]

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

    
задан user123361 15.01.2013 в 07:53
источник

1 ответ

27
  

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

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

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

Запуск команд в root

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

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

Чтобы запустить irssi как root с sudo :

sudo irssi

И при появлении запроса введите свой пароль, а не root .

За исключением пароля, который вы вводите, это делает то же самое, что:

su -c irssi

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

Как и в случае su , вы можете использовать команды sudo для , как другие,% root user . Чтобы запустить 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 , что делает его no password (и никаких других способов входа в систему). Отсутствие пароля не означает, что можно войти в систему с помощью пустого пароля . Это означает, что нет пароля , достаточного для аутентификации. В сочетании с устранением других способов аутентификации это означает, что 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 - это то, что осталось.

    
ответ дан Eliah Kagan 15.01.2013 в 08:57
источник