контекст
Мне нравится работать публично на моем ноутбуке, но я также люблю использовать sudo без пароля. Исходя из того, что я знаю сейчас, я бы использовал эту NOPASSWD
опцию в своем sudoers
файле, но, конечно, любой мог использовать sudo, как пожелает.
Одна важная мысль, которая приходит мне в голову, заключается в том, что существуют программы блокировки. Тем не менее, я бы предпочел использовать флэш-накопитель (и использовать его только для sudo), потому что (1) это быстрее, (2) легче, чем вводить мой пароль, и (3) я не беспокоюсь о том, чтобы люди обращались к моему контенту и не делали нечестивых. Вещи: ноутбук будет публично окружать других людей, и единственная интеллектуальная собственность на моем ноутбуке - это очень простой проект Angular.
Кроме того, я и другие могут захотеть предотвратить неправильное использование sudo на компьютере, на котором не работает среда X или Wayland. Моя текущая работа требует современного веб-браузера, но если у меня когда-нибудь будет возможность не использовать X и просто использовать мультиплексор, я сделаю это - мой ноутбук немного устарел и работает медленно.
Вопрос
То, что я хотел бы сделать, это поместить ключевой файл на флэш-накопитель, и просто подключить флэш-накопитель, когда я нахожусь у ноутбука, и вынуть его, когда я отойду от него.
Итак, вот мои три вопроса, вытекающие из этой проблемы:
- Возможно ли это с sudo как есть?
- Если нет, смогу ли я написать программу, которая позволит мне это сделать?
- Если так, на каком языке лучше всего написать эту программу?
(4. [Возможно, посторонний вопрос] Может ли этот пакет быть отдельным или он должен быть форком sudo?)
Заметка
Если это уместно, моя установка - Arch Linux с bspwm, без рабочего стола. Большая часть моей работы - веб-разработка в urxvt / vim и проверка ее с помощью Chrome.
rootpw
флаг в/etc/sudoers
файлах и настройкуpam_usb
входа в систему с правами root.Ответы:
Я не уверен, что понимаю, почему этот
NOPASSWD
вариант сам по себе не удовлетворяет вашим требованиям, но если вам требуется наличие флэш-накопителя, я могу придумать что-то, что может почти сделать то, что вы ищете.Это скорее обходной путь, но вы можете создать, скажем
superuser
, локального административного пользователя и предоставить этому пользователюsudo
права без пароля , т.е. добавить следующую строку в ваш/etc/sudoers
файл:Затем вы можете отключить вход с паролем и настроить SSH-аутентификацию только для ключа для этого пользователя, т.е. запустить
passwd -l superuser
и добавить следующий раздел/etc/ssh/sshd_config
:Затем создайте пару ключей SSH для этого пользователя. Добавьте открытый ключ
/home/superuser/.ssh/authorized_keys
и поместите закрытый ключ на флешку. Затем, когда вы захотите использоватьsuperuser
учетную запись, подключите флэш-накопитель и ssh кsuperuser
учетной записи, используя свой закрытый ключ. И вуаля! Теперь у вас есть парольsudo
для вашего пользователя. Конечно, вам все равно придется выйти из сеанса оболочки, когда вы закончите - отсоединение флэш-накопителя будет недостаточно. Хотя я полагаю, вы также можете установить ловушку перед командой, чтобы проверить закрытый ключ и выйти автоматически, если он отсутствует (или если он недействителен).источник