Как запретить пользователю sudo видеть данные других пользователей sudo?

Как запретить пользователю sudo видеть данные других пользователей sudo?

Я новичок в Linux (Ubuntu, если это имеет значение). В моей компании есть несколько пользователей sudo на машине. Ситуация такая:

  1. Все хотят иметь привилегии пользователя sudo, потому что они утверждают, что им нужно устанавливать пакеты Python во время работы (они инженеры ИИ)

  2. Каждый пользователь хранит закрытые ключи RSA в своей домашней папке для быстрого извлечения/отправки на GitHub.

Так что теоретически, если пользователь sudo станет мошенником, он может просто схватить закрытый ключ каждого, навязать его и вытащить исходный код, на который он не имеет права. Как мне предотвратить это?

Спасибо

решение1

Я не даю вам прямого ответа на ваш вопрос, поскольку вы описываетепроблема XY. Это ваш базовый,действительныйпроблема:

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

Проблема вот в чем:никому не нужно использовать sudoдля установки пакетов Python.На самом деле, это крайне не рекомендуется. Особенно если у вас несколько человек, использующих одну и ту же систему, вы не можете помешать кому-либо вмешиваться в системные пакеты, которые могут потребоваться другим. Что делать, если есть конфликты версий, критические изменения в некоторых пакетах и ​​т. д.?

Решение 1 — Установки на уровне пользователя

Реальное решение — использовать установки пакетов Python на уровне пользователя. То есть, вместо sudo pip install …, выполните:

pip install --user pandas

Это установит пакет в домашний каталог соответствующего пользователя и оставит библиотеку системных пакетов в покое.

sudoЯ не могу не подчеркнуть этого: ничего хорошего из использования with не получается pip.

Решение 2 — Pipenv или поэзия

Еще лучшее решение включает в себяс использованиемpipenvилиpoetry, которые создают виртуальную среду для размещения пакетов.

Пакеты и версии могут даже отличаться для разных проектов — это особенно важно, если вам нужно, чтобы пакет оставался в определенной версии в течение некоторого времени (например, пакет pandasпечально известен изменением своего API; scipyнекоторое время назад в него были внесены критические изменения и т. д.).

Я бы порекомендовал Pipenv, но по состоянию на 2020 год его поддержка была весьма неудовлетворительной, и уже давно не было никаких релизов.

Чтобы использовать Poetry, просто установите его на уровне пользователя:

pip install --user poetry

Затем инициализируйте новую среду для текущего проекта:

cd /path/to/project
poetry install pandas

Это создаст новый файл конфигурации Poetry, который определяет требования для текущего проекта. Запустите, poetryчтобы узнать больше или прочитать документацию.

Решение 3 —pyenv

Лучшим способом сделать это было бы заставить пользователей установить собственную версию Python. Вы можете использоватьpyenvдля создания установок на уровне пользователя целых дистрибутивов Python. Таким образом, пользователи могут использовать любую версию Python, с которой был инициализирован их проект Pipenv, например, оставаться на версии 3.7 некоторое время, пока они не захотят обновиться до 3.8.

Это особенно удобно, если вы не хотите нарушать работу всех пакетов, выполняя незначительное обновление Python на системном уровне, если это когда-либо потребуется.


Итог: Не давайте обычным пользователям доступ sudo, если вам это не нужно. Пусть они используют свое собственное пользовательское пространство для установки Python и/или пакетов Python.

Предостережение: для успешной сборки некоторых пакетов Python могут потребоваться определенные библиотеки. Вы не сможете избежать установки этих библиотек на системном уровне, но в таких редких случаях администратор может быть готов установить sudo apt install …любую необходимую библиотеку.

решение2

Вероятно, разработчики Python подключаются к этой машине удаленно, sshа не входят в систему напрямую через консоль.

В таком случае их личные ключине должнабыть на общей машине вообще, именно по этой причине. Вместо этого они должны работать ssh-agentна своих локальных машинах и подключаться к общей машине с помощью ssh -A(или устанавливать ForwardAgent yesдля этого хоста в ~/.ssh/config) и хранить закрытые ключи только на своих локальных машинах. Использование ssh-agentи переадресация агента заставит удаленную (общую) машину безопасно пересылать запросы аутентификации (например, с github) обратно на ssh-agentлокальную машину пользователя, где будет выполняться аутентификация RSA без необходимости когда-либо раскрывать закрытый ключ пользователя какому-либо хосту, кроме его локальной машины.

(Если локальная машина работает под управлением Windows, а не варианта Linux/Unix, то клиент Windows SSH все равно должен каким-то образом обеспечивать переадресацию агента SSH, но я не знаю, как к нему можно будет получить доступ. Подробности смотрите в документации.)

решение3

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

Ниже приведен ответ из сообщения Unix Stackexchange.
Как удаленно выполнить команду ssh или команду sudo без пароля.

Вы можете указать sudo пропустить пароль для некоторых команд.

например в/etc/sudoers

archemar  ALL = (www-data) NOPASSWD: /bin/rm -rf /var/www/log/upload.*

это позволяет мне использовать

sudo -u www-data /bin/rm -rf /var/www/log/upload.*

как архемар без пароля.

Обратите внимание, что

sudo -u www-data rm -rf /var/www/log/upload.*

не будет работать (попросит пароль), так как rmотличается от /bin/rm.

Обязательно редактируйте /etc/sudoersс помощью visudoкоманды.

Достигнув продвинутого уровня, вы, возможно, захотите иметь собственные sudoфайлы в формате /etc/sudoers.d.

Связанный контент