дозволити sudo іншому користувачеві без пароля


46

Я хочу мати можливість "су" певному користувачеві, що дозволяє мені виконувати будь-яку команду без введення пароля.

Наприклад:

Якщо мій логін був user1, а користувач, якого я хочу «су», це user2:

Я використовував би команду:

su - user2

але тоді це підказує мені

Password:


Запитайте у іншого користувача пароль. Принаймні інший користувач знає, що зроблено під його ідентифікатором.
Глобальний кочівник

1
Це не має нічого спільного з іншим фізичним користувачем. Обидва посвідчення особи мої. Я знаю пароль під час створення облікового запису. Я просто не хочу вводити пароль кожен раз.
zio

Було б нормально, щоб ssh на користувача або вам потрібно успадкувати одну оболонку зокрема і вам потрібен su для роботи?
bmike

1
@zio Прекрасний випадок використання. Хто open -na Skypeне працює для вас?
bmike

Відповіді:


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. Я припускаю, що у вашій папці Applications встановлений Skype :

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

Тоді вам дзвонять з терміналу:

sudo -u user2 /Applications/Skype.app/Contents/MacOS/Skype

Це набагато менш складно, ніж ідея ключів ssh, тому використовуйте це, якщо вам також не потрібні ключі ssh для віддаленого доступу.
bmike

2
Одне, що слід зазначити з точки зору безпеки, - це те, що визначення конкретної команди означає, що це повинна бути команда, призначена лише для читання для користувача1; В іншому випадку вони можуть перезаписати команду чимось іншим і запустити її як user2. І якщо вас це не турбує, ви можете також вказати, що user1 може запустити будь-яку команду як user2 і, отже, мати більш просту конфігурацію sudo.
Stan Kurdziel

@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.


1
Це хороше безпечне рішення для загального випадку входу без пароля до будь-якого облікового запису на будь-якому хості, але я б сказав, що це, ймовірно, перевищення, коли обидва облікові записи знаходяться на одному хості та належать одному користувачеві.
calum_b

@scottishwildcat Це набагато безпечніше, ніж альтернатива написання пароля та подачі його чітким текстом або використання змінної та збереження пароля у брелок та використання інструменту, як expectскрипт взаємодії. Я просто використовую sudo su - blahі ввожу свій пароль. Я думаю, що інша відповідь висвітлює судо досить добре, щоб це залишалося як коментар.
bmike

О, я, звичайно, не пропонував Вашу відповідь зняти ... Я навіть не проголосував, це абсолютно гарна відповідь.
calum_b

Ми, мабуть, цілком згідні - дякуємо за додаток - не соромтесь відредагувати його у відповідь, чи можете ви покращити її.
bmike

Прийняте рішення ( sudo -u user2 <...>) має перевагу в тому, що його не можна використовувати віддалено, що може допомогти для безпеки - не існує приватного ключа для користувача1, який можна вкрасти.
Герт ван ден Берг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.