Как запустить приложение, используя sudo без пароля?

40

... но все же требуется для приложений, которым требуются права администратора?

Для того, чтобы разрешить следующее:

$ apache2ctl restart
httpd not running, trying to start
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs

$ sudo !!
sudo apache2ctl restart             #no password asked
$                                   #works!

Для справки, я видел эту установку на экземплярах Amazon E3

Есть идеи?

tutuca
источник
Это отличный учебник на форумах, в котором подробно описывается создание отдельного файла для определения программ, которые вы обычно используете. И это хорошая идея по соображениям безопасности.
Тодд Партридж 'Gen2ly'

Ответы:

51

Вам нужно отредактировать файл sudoers. Имейте в виду, что успех дает вам менее безопасную систему, а сбой может сломать sudo. ВСЕГДА редактируйте файл sudoers с помощью sudo visudo, поскольку visudo проверяет наличие ошибок и не сохраняет файл, если таковые обнаружены.

Это плохая идея - дать всем разрешение на запуск от имени пользователя root без пароля, поэтому просто пропустите нужный вам исполняемый файл (apache2ctl); добавьте следующее к самому низу файла:

YOURNAME ALL = NOPASSWD: /usr/bin/apache2ctl

Вы можете заменить путь к исполняемому файлу на «ВСЕ», если захотите, что даст вам полное sudo без пароля.

Замените ВАШЕ ИМЯ своим именем пользователя и нажмите Ctrl+, Xчтобы сохранить и выйти. Если произошла ошибка, она предложит отменить, отредактировать или сохранить в любом случае.

Убедитесь, что вы используете полный путь к исполняемому файлу:
т.е. /usr/bin/apache2ctlвместо просто apache2ctl. Это важно, потому что без явного указания пути sudo позволит любой программе с именем apachectl на текущем пути пользователя запускаться от имени пользователя root.

Марк Паскаль
источник
3
Обратите внимание, что %YOURNAMEэто даст разрешение группе, названной как ваш пользователь, что, как правило, не является проблемой, так как каждый обычный пользователь имеет группу с таким же именем в системах Ubuntu. Чтобы дать разрешение своему пользователю, укажите YOURNAMEбез%.
Даниэль Вернер
Есть ли способ быть более разрушительным? (только некоторые функции исполняемого файла)
3pic
1
Старый пост, но я бы определенно завершить этот ответ путем ограничения въезда в sudoers' к определенному имени хоста (если это возможно), а также с заданными аргументами O , чтобы опустить аргумент (ниже apache2ctl), например , так: YOURNAME YOUR-HOSTNAME = NOPASSWD: /usr/bin/apache2ctl <specific arg | "">. --- Во всех случаях man 5 sudoersэто ссылка для перехода.
Cbhihe
25

Реальный ответ на этот вопрос может быть сложным, потому что sudo очень мощный, и его можно настроить для выполнения крутых вещей. Это подробно объясняется в документации .

Краткий ответ запускается sudo visudoв терминале. Если вы запускаете visudo впервые, он спросит, какой редактор вы предпочитаете. Обычно считается, что nano проще всего использовать, но выберите тот редактор, который вам наиболее удобен / знаком. Вам нужно будет решить, кому вы хотите предоставить доступ; это может быть ALLдля всех ( очень плохая идея) , для пользователя или для системной группы. Группы имеют префикс со знаком%. Например, если вы хотите дать всем в steroid_usersгруппе привилегии суперпользователя без пароля для всех команд, вы должны добавить:

%steroid_users ALL=(ALL) NOPASSWD: ALL

в конец файла выйдите и сохраните файл. Если все идет хорошо, и вы являетесь членом группы steroid_users, вы сможете выполнить выдачу sudo *some-command*без необходимости ввода пароля.

Имейте в виду, что любой, у кого есть доступ к вашему терминалу, когда вы вошли в систему - или если у вас есть ssh, настроенный для аутентификации на основе ключей, или (что еще хуже) включили беспарольный сеанс входа в систему - полный и беспрепятственный доступ ко всему вашему система. Если в вашей системе несколько пользователей, или если это файловый сервер, все файлы пользователей могут быть подвержены риску, поскольку root может делать все что угодно!

Также, если вы допустите ошибку, visudo выдаст и сообщение об ошибке, а не сохранит изменения в файле. Это поможет предотвратить полное разрушение sudo. Вы должны действительно прочитать документацию . Sudo разработан для того, чтобы предоставить пользователям достаточно доступа для выполнения своей работы без необходимости выставлять всю вашу систему на вооружение. Может быть выгодно предоставлять свободный доступ к паролю только для определенных команд.

Надеюсь, это поможет.

Крис
источник
Это сработало, я взял это, а затем использовал «sudo service sudo restart» с askubuntu.com/questions/192050/… и я смог использовать все это в своем активном сеансе Ubuntu. Потрясающе!
Патрик
5

Вам нужно отредактировать файл / etc / sudoers (для этого есть команда visudo), чтобы добавить NOPASSWD до списка разрешенных команд для вашего пользователя или группы. Если ваш пользователь входит в группу администраторов - вам необходимо следующее:

%admin ALL=(ALL) NOPASSWD: ALL

Проверьте https://help.ubuntu.com/community/Sudoers , кстати.

korjjj
источник
3

Вы МОЖЕТЕ добавить флаг nopasswd в список пользователей, но это не устраняет все пароли, задаваемые вопросы. Будет задан только первый.

  1. Редактировать sudoers: sudo visudo(Вы ДОЛЖНЫ использовать sudo. Это файл администратора.)
  2. Добавьте вашего пользователя с флагом nopasswd после строки администратора (в конце). Например:
    cyrex ALL = NOPASSWD: ALLилиcyrex ALL = (ALL) NOPASSWD: ALL
Луис Альварадо
источник
2
sudo visudo
%<GROUP> ALL = NOPASSWD: apache2ctl

или

sudo visudo
%<GROUP> ALL = NOPASSWD: /etc/init.d/apache2

Я предполагаю, что это сделало бы это.

Но будьте осторожны с удалением паролей для sudo.

Alex
источник
2
Вы должны указать абсолютный путь в первом примере, из соображений безопасности - недобросовестный пользователь может изменить $ PATH и украсть root-доступ с помощью неквалифицированного имени команды.
bgvaughan
0

Теперь простой ответ! Невозможный способ испортить что-либо или помешать вашей установке.

Просто введите ваш пароль пару раз, и вам больше никогда не придется его вводить! Это позволит вам добавить учетную запись локального администратора в группу «root», которая затем не будет закомментирована в шаблоне, который предоставит привилегии суперпользователя всей группе «root». Вы можете прочитать мою проблему безопасности / решение для этой процедуры в более поздней части этого поста.

% username & - это глобальная переменная для вашего имени пользователя (замените его на желаемое имя пользователя)

Шаг 1: Откройте окно терминала и введите « sudo usermod -a -G root %username%»

Шаг 2: Затем скопируйте / вставьте это ...

sudo sed -i 's/# auth       sufficient pam_wheel.so trust/auth       sufficient pam_wheel.so trust/g' /etc/pam.d/su`

Шаг 2 ИЛИ тип

sudo nano /etc/pam.d/su`

Перейдите на строку 19 и удалите "#" раньше # auth sufficient pam_wheel.so trust(для некоторых это может быть другой номер строки)

* Первая команда добавляет ваше имя пользователя% в группу "root"

Вторая / третья команды позволяют всем членам группы «root» быть суперпользователем без пароля, в отличие от предоставления пользователю «root» su привилегий для аутентификации.


Сноска:

Не связывайтесь с /etc/sudoers... Есть много проверок / противовесов, через которые должна пройти аутентификация 'su'. Для аутентификации суперпользователя используется та же процедура pam.d, что и для всех других аутентификаций при входе. «/etc/security/access.conf» имеет макет для управления доступом через коммуникацию tcp / ip (192.168.0.1) и через службы telnet (tty1 & tty2 и tty3 ... и т. д.). Это позволяет более точно фильтровать каждое приложение через транспортный протокол. Если вы беспокоитесь о безопасности, тогда ваша забота должна быть направлена ​​на угрозы удаленного доступа или кода, а не на то, кто действительно касается вашего компьютера, когда вы выходите из комнаты !!!

Пища для паранойи (не печатайте это только, рассмотрите это):

sudo sed -i 's/#-:ALL EXCEPT (wheel) shutdown sync:LOCAL/-:ALL EXCEPT (wheel) shutdown sync:LOCAL/g' /etc/security/access.conf

^ Это блокирует доступ к консоли для всех, кто не является членом системы или root. Иногда программы устанавливают имена пользователей / группы, которые эксплуатируются!

Натаниэль Ф. Мальм
источник
2
Не эксперт по безопасности, но это звучит немного нелогично. Вы отключаете пароли для всей группы, чтобы позволить одному пользователю запускать определенное приложение без пароля, чтобы избежать «сложности» уточнения sudo для конкретного приложения, верно? И все это на публичном сервере? Сценарий отключил ваши основные инстинкты выживания? Безопасность комплексна по дизайну. Помните, это как лук. У него есть слои, и это заставляет вас плакать ... Потеря данных на скомпрометированных серверах - это только часть уравнения.
Хакерские
2
Это противоречит интуитивному принципу и противоречит здравому смыслу: открыть банку с cookie для пользователя, которому нужен только один файл cookie, довольно безответственно. Вы бы добавили пользователей в список sudoers и удалили необходимость вводить пароли, а не редактировать файл / файлы sudoers. «Если пистолет опасен для детей, не давайте ему канон». я
Джон