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


21

Я намагаюся використовувати команду 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]

якщо це має якесь значення .... зітхніть.


ви не забуваєте прапор -c для запуску irssi? (su -c irssi)
eephyne

спробував це теж ... спробував тисячу речей ... чому так важко рунати 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

Якщо ви залишитесь , це те саме, що - це спроба запустити команду як 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

І ви введете свій пароль, коли буде запропоновано, а не root.

Окрім пароля, який ви вводите, це робить те саме, що:

su -c irssi

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

Як і у випадку su, ви можете використовувати командиsudo для запуску команд як інший, не rootкористувач . Для запуску irssiяк usernameз sudo:

sudo -u username irssi

Якщо ви хочете , sudo щоб вести себе як su -по відношенню доHOME --that, ви хочете використовувати цільового користувача 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 - так це є причиною того, що він виходить з ладу? будь-яка ідея, як це виправити?
користувач123361

З будь-якої причини використання sudo -u ім'я користувача irssi працює частуванням. Дякую за вашу тривалу, добре пояснену відповідь!
користувач123361

@db Я радий, що це спрацювало! (До речі, не потрібно вибачатися за редагування, редагування дуже, дуже добре, і ваше питання, ймовірно, буде корисним і для інших людей, як наслідок змін.) Що стосується інших ваших запитань, я редагую свою відповідь на включити розділ аналізу в кінці.
Елія Каган
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.