Как изменить права пользователя pi sudo; Как добавить другие учетные записи с другими разрешениями?


14

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

sudo reboot

Можно ли как-то отредактировать разрешения пользователя pi, чтобы он мог перезагружать (и устанавливать) пакеты?

Могу ли я иметь несколько учетных записей с разными разрешениями?

Благодарность


1
Был ли какой-либо из приведенных ответов полезным? Кто-нибудь из них ответил на ваш вопрос? Пожалуйста, отметьте это как ответ.
Андерс

Да. Если вам все еще интересно, я обновил их до июня 2017 года - этот вопрос был задан 4 года и 2 месяца назад и привел меня к решению проблемы сегодня. Проверьте ответы ниже:
SDsolar

Ответы:


22

Для пояснения: нет никаких «команд sudo», есть только команды, которым для корректной работы требуются привилегии root, и sudoэто команда для получения их для одной команды: sudoпросто запускает данную команду как root (читается как «sudo» как императив предложение "суперпользователь, сделай что-нибудь!"). Правила, по которым пользователи могут это делать, записаны в /etc/sudoers. При установке по умолчанию в Raspbian пользователь по умолчанию "pi" получает свои разрешения из этой строки:

pi ALL=(ALL) NOPASSWD: ALL

Это означает: «пользователю 'pi' на ВСЕХ хостах разрешено переключаться на ВСЕХ пользователей, и ему НЕ нужно вводить свой ПАРОЛЬ при использовании ВСЕХ (читай: любых) команд". (Я использовал сумасшедшую грамматику здесь, чтобы сохранить порядок строк. Примечание о том, почему существует способ различать хосты: таким образом, один и тот же файл sudoers может быть распределен по нескольким машинам в сети, поэтому у сетевого администратора меньше работы) ,

Может случиться так, что возможность запускать команды с использованием sudo без ввода пароля администратора - это причина, по которой вы считаете опасным использование sudo через SSH (я не слышал об общей проблеме с этим ... так что вы могли бы объясните, какую именно опасность вы имеете в виду?).

Конечно, у вас может быть несколько пользователей с разными разрешениями. Но я боюсь, что использование sudo все еще является лучшим способом управления этими разрешениями.

Итак, я надеюсь, что этот маленький рецепт здесь то, что вам нужно:

$ sudo adduser admin

Это создаст пользователя «admin», попросит пароль, создаст его домашний каталог и т. Д.

$ sudo adduser admin sudo
$ sudo adduser admin adm

Это поместит пользователя «admin» в группы «sudo» и «adm». А поскольку разрешениями в Linux управляют путем добавления пользователей в группы пользователей, это дает пользователю «admin» все необходимые ему разрешения и разрешения. Есть строка, /etc/sudoersкоторая позволяет любому пользователю, входящему в группу "sudo", выполнять любую команду от имени пользователя root; и эта привилегия - то, что нам нужно для пользователя с правами администратора (добавление его в «adm» позволяет ему читать некоторые файлы журнала /var/logбез использования sudoи некоторые другие вещи). Вам все еще нужно использовать, sudoкогда вы вошли в систему как администратор - но теперь sudo снова и снова запрашивает пароль администратора, если вы не использовали sudo в течение пяти минут.

Теперь выйдите и войдите как пользователь "admin". Проверьте,

$ sudo apt-get update
$ sudo apt-get upgrade

работает. Если это так, вы можете отозвать некоторые привилегии пользователя «pi», потому что теперь вы уверены, что у вашего администратора есть нужные привилегии:

$ sudo deluser pi sudo
$ sudo deluser pi adm

Это выбрасывает пользователя "pi" из группы пользователей "sudo".

$ sudo visudo

Это запустит редактор, который позволит вам редактировать /etc/sudoers. Поместите хэш-тег ( #) перед строкой, начинающейся с «пи», закомментировав ее (или просто удалите). Затем сохраните и выйдите из редактора, visudo немедленно перезагрузит правила привилегий. Теперь пользователю "pi" больше не разрешено использовать sudo.

После этого вы можете повторно войти в систему как пользователь «пи». Если вы когда-нибудь захотите переключиться на администратора для некоторых команд, используйте su(«переключить пользователя»):

$ su - admin

Если вы хотите добавить больше пользователей: используйте, sudo adduser <name>как указано выше, затем проверьте список групп пользователей, которые есть у пользователя "pi":

$ groups pi
pi : pi dialout cdrom audio video plugdev games users netdev input

Используйте, sudo adduser <username> <groupname>чтобы добавить своего нового пользователя в несколько из этих групп пользователей, позволяя ему использовать аудио, ускоренное видео, использовать подключаемые устройства и т. Д. Если не уверены, добавьте его во все эти группы пользователей (но не в «sudo»!).


2
visudoэто команда, которая будет использовать ваш редактор по умолчанию для редактирования файла sudoers. Редактирование этого файла без него может быть болезненным и не рекомендуется. Вы можете изменить предпочитаемый редактор, sudo update-alternatives --config editor
выполнив

Или вы можете попробовать это VISUAL=vim visudoтолько на этот раз. Но отличный пример изменения стандартных программ, таких как редактор.
Андерс

6

Да, вы можете настроить, sudoчтобы пользователь мог запускать только определенные команды с дополнительными привилегиями. Вы можете изменить это в своем /etc/sudoersфайле, но желательно не делать это напрямую, а использовать sudo visudoдля этого команду.

При установке системы по умолчанию вы должны найти такую ​​строку:

pi ALL=(ALL) NOPASSWD: ALL

Он говорит, sudoчтобы позволить пользователю piзапускать все команды как rootпользователь, даже не предоставляя пароль. Вы можете изменить последний ALLи указать разделенный запятыми список команд (с их полным путем), которые могут быть запущены. В вашем случае вы должны изменить эту строку на:

pi ALL=(ALL) NOPASSWD: /usr/bin/apt-get, /sbin/shutdown

Обратите внимание, что есть еще одна строка, sudoersвлияющая на piпользователя:

%sudo   ALL=(ALL:ALL) ALL

Эта строка позволяет всем пользователям в группе sudo( %символ перед именем означает, что это имя группы, а не имя пользователя) используют ВСЕ пароли, если они знают свой СОБСТВЕННЫЙ пароль . Если вы покинете эту строку, пользователь piсможет запускать все остальные команды, но у него спросят его пароль.

Если вы хотите предотвратить это, вы можете удалить эту строку или удалить пользователя piиз sudoгруппы.

После внесения изменений в /etc/sudoersфайл вы можете проверить, действительно ли он выполняет то, что вы хотите, вызвав sudo -l -U piкоманду.

Конечно, вы можете создавать разные учетные записи и настраивать sudoersпредоставление им доступа к различным командам.


1

Май 2018, это все еще точно в концепции, но процедура изменилась с более поздними версиями:

Во-первых, файлы должны редактироваться напрямую в vi, nano, leafpad или emacs, в зависимости от того, какой ваш любимый текстовый редактор.

Имя пользователя pi не упоминается в этом файле:

/etc/sudoers

и последняя строка файла выглядит так:

#includedir /etc/sudoers.d

Это каталог, который содержит файл с именем

010_pi-nopasswd

которая содержит эту единственную строку

pi ALL=(ALL) NOPASSWD: ALL

Это приводит к тому, что я не запрашиваю команду sudo, пока я вошел в систему как пользователь pi. (обратите внимание, синтаксис должен быть именно таким)

Это круто.

Строка группы %sudo ALL=(ALL:ALL) ALLвсе еще там, как

Итак, чтобы ответить на первую часть вопроса:

Когда я переместил файл /etc/sudoers/sudoers.d/010_pi-nopasswd на один уровень каталога, чтобы произошла ошибка включения, затем подождал 15 минут, это заставило мою систему Raspbian запросить мой собственный пароль при использовании sudo, просто как моя система Ubuntu 14.04 LTS раньше делала.

Затем, когда я переместил его обратно туда, где он должен, даже через 10 минут он больше не подсказывал мне.

Перезагрузка не требуется. Вуаля, не запрашивая пароль при использовании sudo

Моя тестовая система lubuntu 14.04 LTS имеет такую ​​же настройку, за исключением того, что файл 010_pi-nopasswd отсутствовал. lubuntu был установлен с пи в качестве пользователя root. Это подсказывало мне каждый раз, когда я использовал sudo, а затем не подсказывало мне в течение 10 минут после этого.

Я добавил этот же файл в систему Ubuntu точно так же, как настроен Raspbian (не забудьте chmod 0440 для этого файла, пока вы все еще находитесь в этом 10-минутном окне) - и

Вуаля, он больше не запрашивает мой собственный пароль, когда я вошел в систему как пи даже через 15 минут.

Опять же, изменение происходит мгновенно без перезагрузки.

Это ответ от мая 2018 года о том, как отключить и включить запрос на использование команды sudo при входе в систему от имени пользователя root pi. Другие пользователи и группы могут быть настроены таким же образом.

- ОБНОВЛЕНИЕ для Ubuntu 16.04 LTS Эта система также очень похожа. Однако самое большое отличие состоит в том, что 16.04 имеет более узкие права доступа к файлам, поэтому работа должна выполняться в suрежиме. Если вы забыли свой пароль root, вы можете сбросить его из обычного приглашения с помощью команды « sudo passwd rootТогда» su, и вы сможете перейти оттуда.


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

1
Ага. У тебя вышло. Быть членом sudoersобычно делается во время создания пользователя. Пример использования: вы заметите, что общая командная строка sudo apt-get update && sudo apt-get upgradeвызывает sudo дважды, но раздражает, что она может остановиться и снова запросить пароль перед обновлением. Поэтому я установил мой так, чтобы он никогда не запрашивал одно имя для входа в систему (pi), а затем использовал sudo apt-get update -y && sudo apt-get upgrade -yего, чтобы он также не переставал запрашивать ОК для внесения значительных изменений. Чтобы сделать его более похожим на Unix. Просто делай, что я прошу, и даже если я уйду, я хочу, чтобы это закончилось.
SDsolar

0

Безопаснее разрешить доступ sudo через SSH, чем разрешить любому пользователю устанавливать пакеты. Если вы действительно беспокоитесь об этом, измените строку /etc/sudoersс:

pi ALL=(ALL) NOPASSWD: ALL

в

pi ALL=(ALL) PASSWD: ALL

Это означает, что вам будет предложено ввести пароль при первом использовании sudo в любом сеансе и снова через несколько минут. Вы не можете редактировать /etc/sudoersнапрямую; использовать sudo visudoдля этого.

Похоже, Кшиштоф запрыгнул с ответом прямо там. Вы действительно уверены, что вам нужно перезагрузить компьютер каждый раз, когда вы устанавливаете новые пакеты? Если вы не устанавливаете новое ядро ​​или прошивку, больше ничего не нужно перезагрузить. Это качественная ОС у нас здесь ...


3
Упоминание timestampтайм-аута - хорошая идея. По умолчанию это 15 минут. Обратите внимание, что PASSWDэто по умолчанию (если NOPASSWDне было указано ранее в этом списке команд). Также обратите внимание, что /etc/sudoersможно редактировать напрямую без проблем, если вы знаете, что делаете. Использование visudoвносит изменения во временный файл, предотвращая автоматическую запись файла в середине изменения (что может привести к синтаксическим ошибкам и / или проблемам безопасности), оно блокирует этот файл от нескольких одновременных изменений и выполняет некоторые проверки синтаксиса перед записью файла.
Кшиштоф Адамски

Я думаю, что OP обновляет то, что он редко получает новое ядро ​​... или какой-то коллега велел ему каждый раз перезагружаться, потому что он не хотел объяснять, как OP может обнаружить пакет ядра в списке обновлений.
Ориента

TNX за этот комментарий, @Krzysztof. Я сделал исправление в своем ответе. И ты прав насчет редактирования. На самом деле, на моей машине 16.04 я просто поместил строку pi прямо в файл sudoers, потому что sudoers.d просто содержал readme. Я оставил это просто потому, что, по крайней мере, разрешения на пи обрабатываются. (Моим любимым редактором является VI / VIM, кстати, но иногда я буду использовать leafpad или Idle. Снова не освоил emacs - 15 лет - это много времени - и я могу сделать намного больше, быстрее, чем в emacs , безусловно.) Еще раз спасибо.
SDsolar

0

Просто альтернатива тому, что сказал scruss, удалите /etc/sudoers.d/010_pi-nopasswdфайл, запустив sudo rm /etc/sudoers.d/010_pi-nopasswd. Намного проще и безопаснее, чем редактировать основной файл sudoers, который может сломать sudo.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.