Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: su с автоматическом вводом пароля  (Прочитано 11050 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн asitius

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
su с автоматическом вводом пароля
« : 07 Октября 2013, 18:12:04 »
Добрый день!

Столкнулся с проблемами при написании sh-скрипта.
Не получается реализовать автоматический ввод пароля при смене пользователя с помощью su.
Нагуглил следующую команду:
echo <password> | su -c <command> <user>



Но при использовании получаю:
su: must be run from a terminal



Соответственно нужная мне команда не выполняется.
Помогите понять в чем проблема и как должна выглядеть команда.

Оффлайн Дмитрий Бо

  • Погонщик серверов
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 3549
  • Я не техподдержка, я за порядком слежу
    • Просмотр профиля
Re: su с автоматическом вводом пароля
« Ответ #1 : 07 Октября 2013, 18:19:07 »
а зачем? запускай скрипт сразу с правами root.

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 754
    • Просмотр профиля
Re: su с автоматическом вводом пароля
« Ответ #2 : 07 Октября 2013, 18:27:01 »
а зачем? запускай скрипт сразу с правами root.
Имеется ввиду, что если запускать скрипт от рута, то su не будет требовать пароля.

Оффлайн asitius

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: su с автоматическом вводом пароля
« Ответ #3 : 07 Октября 2013, 19:36:55 »
а зачем? запускай скрипт сразу с правами root.

В исходном сообщении я не писал, что мне нужно осуществить передачу прав руту.

Вопрос остается актуальным.

Оффлайн Дмитрий Бо

  • Погонщик серверов
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 3549
  • Я не техподдержка, я за порядком слежу
    • Просмотр профиля
Re: su с автоматическом вводом пароля
« Ответ #4 : 08 Октября 2013, 00:23:22 »
а зачем? запускай скрипт сразу с правами root.

В исходном сообщении я не писал, что мне нужно осуществить передачу прав руту.
Ну так замени рута на нужный юзернейм. имхо, такие вопросы возникают от неправильной постановки задачи, и решения типа except в 99% являются кривыми костылями, а заодно и негативно влияют на карму безопасность.

Оффлайн Self-Perfection

  • Активист
  • *
  • Сообщений: 331
  • Arch linux, KDE
    • Просмотр профиля
Re: su с автоматическом вводом пароля
« Ответ #5 : 08 Октября 2013, 01:38:21 »
su читает пароль не из stdin (файлового потока, куда у вас перенаправляется echo), а напрямую из tty. Из соображений безопасности и удобства (cmd1 | su cmd2 спросит пароль у пользователя и нормально передаст вывод cmd1 на вход cmd2).

Светить пароль рута в скрипте категорически неправильно и небезопасно.

Правильное решение вашей задачи - использование sudo.
Нужно настроить через /etc/sudoers для пользователя/группы, от которой вызывается скрипт разрешение запускать нужную команду через sudo с правами рута без запроса пароля.
Читайте документацию, наставницу вашу!
Памятка по описанию проблем:
Для решения [такой-то задачи] делаю [такие-то действия], но вместо [ожидаемый результат] получаю [описание отличий].

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 754
    • Просмотр профиля
Re: su с автоматическом вводом пароля
« Ответ #6 : 08 Октября 2013, 11:23:35 »
а зачем? запускай скрипт сразу с правами root.
Имеется ввиду, что если запускать скрипт от рута, то su не будет требовать пароля.

Я же говорю, запускай скрипт с помощью sudo (или в рутовом кронтабе, если надо по времени), а в скрипте делай su сколько угодно и кем угодно
Код: (bash) [Выделить]
#!/bin/bash
su -c whoami user1
su -c whoami user2
...
su -c whoami userN
exit0

Оффлайн asitius

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: su с автоматическом вводом пароля
« Ответ #7 : 08 Октября 2013, 16:39:33 »
Self-Perfection,
su читает пароль не из stdin (файлового потока, куда у вас перенаправляется echo), а напрямую из tty. Из соображений безопасности и удобства (cmd1 | su cmd2 спросит пароль у пользователя и нормально передаст вывод cmd1 на вход cmd2).

Светить пароль рута в скрипте категорически неправильно и небезопасно.

Правильное решение вашей задачи - использование sudo.
Нужно настроить через /etc/sudoers для пользователя/группы, от которой вызывается скрипт разрешение запускать нужную команду через sudo с правами рута без запроса пароля.

Так и не понял откуда появилась информация насчет светить-не светить пароль рута в скрипте. Пользователь которому требуется передать права не является суперпользователем, под ним крутится определенный сервис и во время выполнения скрипта нужно провести ряд изменений с сервисом с привязкой к пользователю вызвавшего скрипт.
Но ваш ответ помог решить задачу, в итоге запустил в виде:
echo <password> | sudo su -c <command> <user>

В таком виде заработало.

Спасибо всем ответившим!

Оффлайн Self-Perfection

  • Активист
  • *
  • Сообщений: 331
  • Arch linux, KDE
    • Просмотр профиля
Re: su с автоматическом вводом пароля
« Ответ #8 : 08 Октября 2013, 16:54:16 »

Но ваш ответ помог решить задачу, в итоге запустил в виде:
echo <password> | sudo su -c <command> <user>


что-то я не понимаю что вы делаете. Почему не

Код: (bash) [Выделить]
sudo -u <user> <command>
?
Читайте документацию, наставницу вашу!
Памятка по описанию проблем:
Для решения [такой-то задачи] делаю [такие-то действия], но вместо [ожидаемый результат] получаю [описание отличий].

Оффлайн asitius

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: su с автоматическом вводом пароля
« Ответ #9 : 08 Октября 2013, 17:31:03 »

Но ваш ответ помог решить задачу, в итоге запустил в виде:
echo <password> | sudo su -c <command> <user>


что-то я не понимаю что вы делаете. Почему не

Код: (bash) [Выделить]
sudo -u <user> <command>
?

Дело в изначальной постановке. Требовалось без передачи прав суперпользователю выполнить набор действий с сервисом, который крутится на ряде машин. Все эти действия могут быть проведены под любой учетной записью в штатном режиме. Нужна была автоматизация процесса.
Проблема появилась именно в сабжевой команде. Вопрос относился к тому, что не так именно с ней, а не к тому, как запускать скрипт под sudo. Костыль написан под конкретную ситуацию. Ваш вариант абсолютно правильный, но это ведь не конкурс "как можно было сделать еще или смотрите как я умею"))

Оффлайн Self-Perfection

  • Активист
  • *
  • Сообщений: 331
  • Arch linux, KDE
    • Просмотр профиля
Re: su с автоматическом вводом пароля
« Ответ #10 : 08 Октября 2013, 17:45:39 »
Я изначальную постановку задачи не понял, вот и предлагаю невпопад. Ладно, держите ещё вариант
Код: (bash) [Выделить]
echo <password> | sudo -S -u <user> <command>
И я пошёл дальше искать, где бы показать, как я умею  :)
Читайте документацию, наставницу вашу!
Памятка по описанию проблем:
Для решения [такой-то задачи] делаю [такие-то действия], но вместо [ожидаемый результат] получаю [описание отличий].

Оффлайн asitius

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: su с автоматическом вводом пароля
« Ответ #11 : 08 Октября 2013, 17:52:18 »
Я изначальную постановку задачи не понял, вот и предлагаю невпопад. Ладно, держите ещё вариант
Код: (bash) [Выделить]
echo <password> | sudo -S -u <user> <command>
И я пошёл дальше искать, где бы показать, как я умею  :)

Я специально не акцентировал внимание на изначальных требованиях, чтобы не засорять вопрос ненужными (как мне ранее казалось) подробностями.
Хорошо, что вы отнеслись с юмором, я вовсе не хотел как-то вас обидеть или обвинить в некомпетентности.

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: su с автоматическом вводом пароля
« Ответ #12 : 08 Октября 2013, 17:56:03 »
а зачем? запускай скрипт сразу с правами root.
+1
Wars ~.o

 

Страница сгенерирована за 0.057 секунд. Запросов: 25.