
問題
在Debian 10中我想建立一個無法直接登入的使用者。人們應該只能透過使用su
二進位檔案來存取使用者。在我的 Ubuntu 18.04 設定中,我確實做到了這一點,而且它的工作非常順利,但在 Debian 10 中我無法這樣做。
暗示
能夠登入的使用者將沒有使用權限sudo
。
我做了什麼
我已經使用預設 shell 設定了一個使用者/usr/sbin/nologin
。但是當我嘗試訪問該用戶時,su --shell=/bin/bash user
我無法這樣做。
最小的例子
# useradd --shell /usr/sbin/nologin locked
# passwd locked
Enter new UNIX password: *secret*
Retype new UNIX password: *secret*
passwd: password updated successfully
$ su --shell /bin/bash locked
Password: *secret*
This account is currently not available.
為什麼這在 Debian 中不再起作用?
編輯1:
輸出/etc/shells
:
$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/bin/zsh
/usr/bin/zsh
編輯2:
關於我想要實現的目標的更詳細的答案:
我正在嘗試創建一個用戶(用戶1)能夠透過 SSH 或使用顯示器和鍵盤登入電腦。這用戶1使用者應具有受限制的權利。該限制之一是,他無法使用sudo
應用程序,他根本不被允許這樣做。
然後我有第二個用戶(用戶2)它將能夠使用 sudo 應用程式執行一些設定任務,例如更改網路設定或其他一些事情。這用戶2預設應鎖定登入。因此無法透過 SSH 登錄,且(更多屬於我的問題)無法透過顯示器和鍵盤登入。
--> 當某人想要執行某些任務時,他必須以受限制的身份登入用戶1,將使用者更改為用戶2然後他被允許改變一些配置或類似的東西。
這就是我想要實現的所有情況。有一些更細粒度的細節允許使用者或不允許使用者執行哪些操作。但為了盡可能簡單地描述它,我簡單地用“sudo”來解釋它。
答案1
如果您的使用者有登入 shell,您需要在 cmd 中輸入:su --shell=/bin/bash locked
或sudo -u locked /bin/bash
,前提是為目標使用者指定的預設 shell 列於/etc/shell
。
(請注意,長選項後面有一個等號--shell
。)
然而:
讓使用者沒有登入 shell 的意義在於,該使用者無法以任何方式登錄,無論是直接在會話啟動時還是透過其他使用者帳戶登入。奇怪的是,這正是您想要實現的目標。
為了能夠存取該使用者(假設它有一個登入 shell,透過切換到其設定檔(如上所示),您通常需要
sudo
特權,或至少能夠使用 cmdsu
...
答案2
我找到了這個來自伊凡萊昂茨在伺服器故障和 id 中確實對我有用:
您可以使用 su 的 -s 開關來執行特定的 shell
su -s /bin/bash -c '/path/to/your/script' testuser