Можно ли использовать ключевой файл в качестве пароля для sudo?

11

контекст

Мне нравится работать публично на моем ноутбуке, но я также люблю использовать sudo без пароля. Исходя из того, что я знаю сейчас, я бы использовал эту NOPASSWDопцию в своем sudoersфайле, но, конечно, любой мог использовать sudo, как пожелает.

Одна важная мысль, которая приходит мне в голову, заключается в том, что существуют программы блокировки. Тем не менее, я бы предпочел использовать флэш-накопитель (и использовать его только для sudo), потому что (1) это быстрее, (2) легче, чем вводить мой пароль, и (3) я не беспокоюсь о том, чтобы люди обращались к моему контенту и не делали нечестивых. Вещи: ноутбук будет публично окружать других людей, и единственная интеллектуальная собственность на моем ноутбуке - это очень простой проект Angular.

Кроме того, я и другие могут захотеть предотвратить неправильное использование sudo на компьютере, на котором не работает среда X или Wayland. Моя текущая работа требует современного веб-браузера, но если у меня когда-нибудь будет возможность не использовать X и просто использовать мультиплексор, я сделаю это - мой ноутбук немного устарел и работает медленно.

Вопрос

То, что я хотел бы сделать, это поместить ключевой файл на флэш-накопитель, и просто подключить флэш-накопитель, когда я нахожусь у ноутбука, и вынуть его, когда я отойду от него.

Итак, вот мои три вопроса, вытекающие из этой проблемы:

  1. Возможно ли это с sudo как есть?
  2. Если нет, смогу ли я написать программу, которая позволит мне это сделать?
  3. Если так, на каком языке лучше всего написать эту программу?

(4. [Возможно, посторонний вопрос] Может ли этот пакет быть отдельным или он должен быть форком sudo?)

Заметка

Если это уместно, моя установка - Arch Linux с bspwm, без рабочего стола. Большая часть моей работы - веб-разработка в urxvt / vim и проверка ее с помощью Chrome.

Гейдж Соррелл
источник
1
Есть ли pam_usb удовлетворить ваши потребности?
StrongBad
@ StrongBad Ох ... да. Похоже , он не сразу делать только Суд, и делает логин и SUDO вместе, но это не имеет значения для меня. Благодарность!
Гейдж Соррелл
2
Хорошо, чтобы уточнить, вы хотите постоянно входить в систему и просто запретить пользователям использовать sudo под вашей учетной записью.
StrongBad
@ StrongBad Правильно.
Гейдж Соррелл
Возможно, вы сможете что-то настроить, используя rootpwфлаг в /etc/sudoersфайлах и настройку pam_usbвхода в систему с правами root.
RubberStamp

Ответы:

3

Я не уверен, что понимаю, почему этот NOPASSWDвариант сам по себе не удовлетворяет вашим требованиям, но если вам требуется наличие флэш-накопителя, я могу придумать что-то, что может почти сделать то, что вы ищете.

Это скорее обходной путь, но вы можете создать, скажем superuser, локального административного пользователя и предоставить этому пользователю sudoправа без пароля , т.е. добавить следующую строку в ваш /etc/sudoersфайл:

superuser ALL=(ALL) NOPASSWD:ALL

Затем вы можете отключить вход с паролем и настроить SSH-аутентификацию только для ключа для этого пользователя, т.е. запустить passwd -l superuserи добавить следующий раздел /etc/ssh/sshd_config:

Match user superuser
PasswordAuthentication no

Затем создайте пару ключей SSH для этого пользователя. Добавьте открытый ключ /home/superuser/.ssh/authorized_keysи поместите закрытый ключ на флешку. Затем, когда вы захотите использовать superuserучетную запись, подключите флэш-накопитель и ssh к superuserучетной записи, используя свой закрытый ключ. И вуаля! Теперь у вас есть пароль sudoдля вашего пользователя. Конечно, вам все равно придется выйти из сеанса оболочки, когда вы закончите - отсоединение флэш-накопителя будет недостаточно. Хотя я полагаю, вы также можете установить ловушку перед командой, чтобы проверить закрытый ключ и выйти автоматически, если он отсутствует (или если он недействителен).

Игаль
источник
простой ответ, чтобы выяснить, почему вы можете захотеть сделать это. для этого сервера я пытаюсь вернуться обратно, у меня есть только root-ключ, нет root-доступа по ssh, я заблокирован в ec2-пользователе, что sudo запрашивает pw, которого у меня нет. я scp'd мой корневой ключ к серверу, поэтому в идеале я хотел бы теперь использовать этот ключ, чтобы получить доступ к sudo, тогда я могу что-то исправить.
Брайан Томас