我怎麼能su到沒有登入shell的使用者?

我怎麼能su到沒有登入shell的使用者?

問題

在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 lockedsudo -u locked /bin/bash,前提是為目標使用者指定的預設 shell 列於/etc/shell
(請注意,長選項後面有一個等號--shell。)

然而:

  1. 讓使用者沒有登入 shell 的意義在於,該使用者無法以任何方式登錄,無論是直接在會話啟動時還​​是透過其他使用者帳戶登入。奇怪的是,這正是您想要實現的目標。

  2. 為了能夠存取該使用者(假設它有一個登入 shell,透過切換到其設定檔(如上所示),您通常需要sudo特權,或至少能夠使用 cmd su...

答案2

我找到了這個來自伊凡萊昂茨在伺服器故障和 id 中確實對我有用:

您可以使用 su 的 -s 開關來執行特定的 shell

su -s /bin/bash -c '/path/to/your/script' testuser

相關內容