我是 Linux 新手(Ubuntu,如果有的話)。我公司的一台機器上有幾個 sudo 用戶。情況是這樣的:
每個人都想要 sudo 使用者權限,因為他們聲稱他們在工作期間需要安裝 python 套件(他們是 AI 工程師)
每個使用者將 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 發行版的使用者級安裝。這樣,使用者可以使用他們的 Pipenv 專案初始化時使用的任何 Python 版本,例如暫時停留在 3.7 版本,直到他們想要升級到 3.8。
如果您不想透過執行 Python 的系統級小升級(如果需要的話)來破壞每個人的包,那麼這特別好。
底線:如果不需要,請不要授予普通用戶 sudo 存取權限。讓他們使用自己的使用者空間來安裝 Python 和/或 Python 套件。
注意:某些 Python 套件可能需要特定的函式庫才能成功建置。您確實無法避免這些庫的系統級安裝,但在這種罕見的情況下,管理員可能願意安裝sudo apt install …
任何需要的庫。
答案2
據推測,Python 開發人員正在使用遠端連接到這台機器,ssh
而不是直接在控制台上登入。
在這種情況下,他們的私鑰不應該正是出於這個原因,才完全位於共享電腦上。相反,他們應該在本地計算機上運行並使用(或在 中為該主機設定)ssh-agent
連接到共享計算機,並僅將私鑰保留在本地計算機上。使用代理轉發將導致遠端(共享)計算機將身份驗證請求(例如來自 github)安全地轉發回用戶的本地計算機,在本地計算機上將執行 RSA 身份驗證,而無需向任何人透露用戶的私鑰。電腦以外的主機。ssh -A
ForwardAgent yes
~/.ssh/config
ssh-agent
ssh-agent
(如果本地電腦運行的是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.*
作為沒有密碼的 archemar。
注意
sudo -u www-data rm -rf /var/www/log/upload.*
不會工作(會詢問密碼),因為
rm
與/bin/rm
.請務必
/etc/sudoers
使用visudo
指令進行編輯。一旦您達到高級水平,您可能希望擁有自己
sudo
的/etc/sudoers.d
.