我在 /etc/passwd 中建立了特殊使用者:
secure:x:2000:2000:secure:/bin:/usr/sbin/nologin
我不想允許該使用者登入(透過控制台、ssh、ftp,任何方式)。
他只是透過以下方式運行一個腳本:
sudo su secure -c '/home/someuser/secure.script'
但它給了我This user is currently not available.
。如何將其設定為能夠以這種方式運行腳本,但阻止該使用者登入(控制台、ssh、ftp...)系統?
我注意到,當我/usr/sbin/nologin
在命令列上輸入時,計算機會響應This account is currently not available.
.
答案1
這是 的典型用例sudo
。
您正在混合sudo
允許以另一個使用者身分執行命令並且高度可配置(您可以選擇性地指定哪個使用者可以以哪個使用者身分執行哪個命令)以及su
如果您知道密碼(或是 root)則切換到另一個使用者。su
始終運行用 編寫的 shell /etc/passwd
,即使su -c
使用了。因為這su
與/usr/sbin/nologin
.
你應該使用
sudo -u secure /home/someuser/secure.script
由於是sudo
可配置的,您可以控制誰可以使用此命令以及他/她是否需要輸入密碼才能運行它。您需要/etc/sudoers
使用編輯visudo
來執行此操作。 (編輯 /etc/sudoers 時要小心,並始終使用 visudo 來執行此操作。語法並不簡單,一個錯誤可能會將您鎖定在 root 帳戶之外。)
sudoers 中的這一行允許群組中的任何人somegroup
運行命令secure
:
%somegroup ALL=(secure) /home/someuser/secure.script
這允許群組中的任何人無需輸入密碼somegroup
即可運行命令:secure
%somegroup ALL=(secure) NOPASSWD: /home/someuser/secure.script
這允許user1
運行命令而secure
無需輸入密碼:
user1 ALL=(secure) /home/someuser/secure.script
答案2
我發現主要問題是“ /usr/sbin/nologin
”,/etc/passwd
當我想在這種情況下執行su時,它必須-s /bin/bash
在裡面,所以例如:su -s /bin/bash -c '/home/someuser/secure.script' secure
答案3
su
正在使用 中指定的 shell /etc/passwd
。
您不需要su
與 一起使用sudo
。
因此不要su
與sudo
: use混合sudo -u secure '/home/someuser/secure.script'
。