разрешить sudo другому пользователю без пароля

46

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

Например:

Если мой логин был user1, а пользователь, которому я хочу 'su', это user2:

Я бы использовал команду:

su - user2

но тогда это побуждает меня

Password:

ЗиО
источник
Спросите у другого пользователя пароль. По крайней мере, другой пользователь знает, что было сделано под его / ее идентификатором.
Глобальный кочевник
1
Это не имеет ничего общего с другим физическим пользователем. Оба удостоверения личности мои. Я знаю пароль при создании учетной записи. Я просто не хочу каждый раз вводить пароль.
zio
Будет ли хорошо ssh для пользователя или вам нужно наследовать одну оболочку в частности и нужно su для работы?
bmike
1
@zio Отличный вариант использования. У тебя open -na Skypeне работает?
bmike
1
Вы также можете попробовать скопировать пакет приложения и изменить CFBundleIdentifier .
Lri

Ответы:

66

sudo могу сделать именно это для вас :)

Это требует немного настройки, хотя, но после этого вы бы сделали только это:

sudo -u user2 -s

И вы вошли бы как user2 без ввода пароля.

конфигурация

Чтобы настроить Судо, необходимо отредактировать конфигурационный файл через: visudo. Примечание: эта команда откроет конфигурацию с помощью viтекстового редактора. Если вас это не устраивает, вам нужно установить другой редактор (использующий export EDITOR=<command>) перед выполнением следующей строки. Другой редактор командной строки иногда считается более простым nano, так что вы бы сделали export EDITOR=/usr/bin/nano. Обычно вам нужны привилегии суперпользователя для visudo:

sudo visudo

Этот файл структурирован в другой раздел, псевдонимы, затем значения по умолчанию и, наконец, в конце у вас есть правила. Здесь вам нужно добавить новую строку. Итак, вы переходите в конец файла и добавляете это:

user1    ALL=(user2) NOPASSWD: /bin/bash

Вы можете также заменить /bin/bashна , ALLа затем вы можете запустить любую команду как user2 без пароля: sudo -u user2 <command>.

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

user1    ALL=(ALL) NOPASSWD: /bin/bash

Обновить

Я только что видел ваш комментарий относительно Skype. Вы можете добавить Skype напрямую в файл конфигурации sudo. Я предполагаю, что у вас установлен Skype в папке « Приложения »:

user1    ALL=(user2) NOPASSWD: /Applications/Skype.app/Contents/MacOS/Skype

Тогда вы бы позвонили из терминала:

sudo -u user2 /Applications/Skype.app/Contents/MacOS/Skype
Гюйгенс
источник
Это гораздо менее сложно, чем идея с ssh-ключами, поэтому используйте это, если вам не нужны ssh-ключи для удаленного доступа.
bmike
2
С точки зрения безопасности следует отметить, что указание конкретной команды подразумевает, что она должна быть командой только для чтения для user1; В противном случае они могут перезаписать команду чем-то другим и запустить ее как user2. И если вас это не волнует, вы можете также указать, что user1 может выполнять любую команду как user2 и, следовательно, иметь более простую конфигурацию sudo.
Стэн Курдзил
@ StanKurdziel хороший момент! Хотя об этом нужно знать, на самом деле редко когда системные исполняемые файлы доступны для записи пользователям, если вы не root, но в этом случае вам не нужен sudo ;-) Но вы правы, если добавляете этот комментарий, потому что это редко что я, вероятно, упустил из виду это не один раз.
Гюйгенс
Чтобы приблизить его к поведению, su - user2а не su user2к командам, вероятно, все они должны задействовать sudo -u user2 -i, чтобы имитировать первоначальный вход в систему как user2
Герт ван ден Берг
4

Я бы настроил открытые / закрытые ключи ssh для второй учетной записи и сохранил ключ в первой учетной записи.

Тогда вы можете запустить команду, как:

 ssh user@localhost -n /Applications/Skype.app/Contents/MacOS/Skype &

У вас все еще будут проблемы, из-за которых Skype запутывается, поскольку два экземпляра работают под одной учетной записью пользователя, и файлы, считываемые / записываемые этой программой, могут конфликтовать. Он также может работать достаточно хорошо для ваших нужд, и вам не понадобится iPod touch для запуска второго экземпляра Skype.

bmike
источник
1
Это хорошее безопасное решение для общего случая входа без пароля в любую учетную запись на любом хосте, но я бы сказал, что, вероятно, излишне, когда обе учетные записи находятся на одном хосте и принадлежат одному и тому же пользователю.
calum_b
@scottishwildcat Это гораздо более безопасно, чем альтернатива написания скрипта пароля и подачи его в виде открытого текста или использования переменной и сохранения пароля в цепочке для ключей и использования инструмента, подобного expectскрипту взаимодействия. Я просто использую sudo su - blahи ввожу свой пароль. Я думаю, что другой ответ охватывает sudo достаточно хорошо, чтобы оставить это как комментарий.
Bmike
О, я, конечно, не предлагал, чтобы ваш ответ был удален ... Я даже не проголосовал, это очень хороший ответ.
calum_b
Мы, похоже, полностью согласны - спасибо за добавление - не стесняйтесь редактировать его в ответ, если вы можете улучшить его.
bmike
Принятое решение ( sudo -u user2 <...>) имеет то преимущество, что его нельзя использовать удаленно, что может помочь в обеспечении безопасности - нет закрытого ключа для user1, который можно было бы украсть.
Герт ван ден Берг