iT邦幫忙

0

Linux Shell Script 一般USER可否不用交談方式以 passwd 設定密碼 ?

Linux Shell Script 一般USER可否不用交談方式以 passwd 設定密碼 ?

#passwd

Changing password for user qqq.
Changing password for qqq
(current) UNIX password:
New UNIX password:

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
bzbz
iT邦新手 2 級 ‧ 2011-07-04 19:01:05
最佳解答

passwd --stdin

6
逮丸逮丸
iT邦大師 1 級 ‧ 2011-07-04 19:06:06

理論上
如果以「一般USER」的角色,
且不用「交談模式」、
且利用 passwd 改密碼的話,
原則上、在系統管理上應是不可能的。

但執意要的話,
用簡單的 script 再加上「有風險」的設定,
也是可行的。

Linux 版本的考量
需要 man passwd 看看,
是否有 --stdin 的參數。

ubuntu/debian 之類或大部份的 linux 版本會是:

<pre class="c" name="code">passwd [options] [LOGIN]

Fedora/CentOS/RedHat 之類的是:

<pre class="c" name="code">       passwd  [-k] [-l] [-u [-f]] [-d] [-n mindays] [-x maxdays] [-w warndays] [-i inac-
       tivedays] [-S] [--stdin] [username]

若後者的話,就可以利用 鳥哥的chpasswd 範例說明,
來用這樣的指令實現免交談模式:

<pre class="c" name="code">echo 新密碼 | passwd 帳號 --stdin 

簡而言之,如果你 Linux 版本非 readhat 之類的話,
基本上是無解。

利用SUID實現
當然這必須是 root 的身份執行,
因為 --stdin 的參數,是要求以root身分執行。

所以只要寫個 script,
確認「帳號」這個參數不會被改,
然後把這個 script 設為 suid root 的話,
把各安全的問題疑慮都設防好了的話,
這就是可行的;
如果你知道你在做什麼的話。

dondonyen iT邦新手 4 級 ‧ 2011-07-04 22:22:46 檢舉

-bash-3.2$ echo "james:testabc" | /usr/sbin/chpasswd -m
chpasswd: can't lock password file

dear前輩,使用user去更改密碼出現以上error

剛測試了一下,不用suid而用sudo的方式:
編輯一個 /usr/bin/mypass.sh 內容為:

<pre class="c" name="code">#!/bin/sh
echo $SUDO_USER:$1 | chpasswd -m
#echo $1 | passwd $SUDO_USER --stdin

當然要使之有可被執行的屬性。
然後 visudo

<pre class="c" name="code">%users    ALL=NOPASSWD:   /usr/bin/mypass.sh

這樣任何使用者執行:

<pre class="c" name="code">sudo mypass.sh 新密碼

就會直接改成新密碼。
如果怕使用者忘記打 sudo 的話,
就用 alias 類似:

<pre class="c" name="code">alias mypass='sudo /usr/bin/mypass.sh'

當然script檔裡要加上檢查是否有新密碼的參數,
或新密碼的規則檢查,需自行參閱shell script的教學。

我要發表回答

立即登入回答