Debian

如何 su 到沒有登錄 shell 的使用者?

  • April 5, 2022

問題

在 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:

關於我想要實現的目標的更詳細的答案:

我正在嘗試創建一個能夠通過 SSH 或使用顯示器和鍵盤登錄到電腦的使用者( user1 )。user1使用者應具有受限權限。其中一個限制是,他不能使用sudo應用程序,根本不允許他這樣做。

然後我有第二個使用者(user2),它將能夠使用 sudo 應用程序來執行一些配置任務,比如更改網路設置或其他一些事情。預設情況下,此使用者 2應被鎖定以登錄。所以沒有通過 SSH 登錄並且(更屬於我的問題)沒有通過監視器和鍵盤登錄。

–> 當有人想要執行某些任務時,他必須以受限user1身份登錄,將使用者更改為user2,然後允許他更改一些配置或類似的東西。

這就是我想要達到的所有情況。有一些更細粒度的細節,允許或不允許使用者做什麼。但為了盡可能簡單地描述它,我只是用 sudo 來解釋它。

如果您的使用者有登錄 shell,則您需要在 cmd 中鍵入:su --shell=/bin/bash lockedsudo -u locked /bin/bash前提是為目標使用者指定的預設 shell 列在/etc/shell.

(注意 long 選項後面有一個等號--shell。)

然而:

  1. 擁有沒有登錄 shell 的使用者的關鍵在於該使用者無法以任何方式登錄,無論是直接在會話開始時還是通過另一個使用者帳戶。奇怪的是,這正是您想要實現的目標。
  2. 為了能夠訪問該使用者(如果它有一個登錄 shell,通過切換到其配置文件,如上所示,您通常需要sudo特權,或者至少能夠使用sucmd…

引用自:https://unix.stackexchange.com/questions/655687