iT邦幫忙

0

如何使PHP新增Linux user account

已安裝super模組,可以執行透過php執行useradd指令,但問題在於我不知linux對密碼使用何種加密方式,所以無法在useradd同時指定密碼(使用明碼會無法登入),而passwd又是互動式的輸入,無法直接以命令指定密碼

請問有什麼指令是可以直接指定user的密碼,或者ubuntu的密碼加密方式為何呢?

我觀察過/etc/shadow這個檔案,密碼的前置字元為$6$,應是使用SHA-512的加密方式,但我用php中的encrypt and sha1兩個function 指定為SHA-512,加密後的字串與shadow中的密碼比對是不一樣的。

我的Linux版本為Ubuntu 10.04 Desktop

看更多先前的討論...收起先前的討論...
lovex iT邦新手 5 級 ‧ 2011-10-28 14:22:34 檢舉
我剛剛在super.tab中加入了
chpwd /usr/sbin/chpasswd nobody,user
aecho /bin/echo nobody,user


然後執行
#super aecho test:1234|chpwd
or
#super echo test:1234|chpwd
or
#super aecho test:1234|chpasswd
or
#super echo test:1234|chpasswd

以上都無法執行,請問要怎麼做呢?
saiue iT邦研究生 1 級 ‧ 2011-10-28 14:54:24 檢舉
可能要麻煩你試試看
super.tab
[虛擬指令名稱] [要用ROOT執行的命令] [能用此指令的帳號]
super aecho test:1234 | chpwd
我猜你php可能是用
system()
不知道改用
shell()
能不能成功
lovex iT邦新手 5 級 ‧ 2011-10-31 10:20:34 檢舉
不管是用shell or system都會出現
chpwd not found
的error log

改成使用
super aecho test:1234|chpasswd
一樣也是出現
chpasswd not found

我在猜測是否super不支援"|command"的用法呢...??
saiue iT邦研究生 1 級 ‧ 2011-10-31 15:20:36 檢舉
lovex提到:
我在猜測是否super不支援"|command"的用法呢...??

真抱歉,手上沒有ubuntu無法協助測試
能否試試看以下功能
讓我見長一下知識
system(escapeshellcmd('super aecho test:1234 | /usr/sbin/chpasswd'));

system(escapeshellcmd('super aecho test:1234 | chpwd'));
lovex iT邦新手 5 級 ‧ 2011-10-31 17:23:00 檢舉
兩種都不行,變成是在網頁直接輸出
test:1234 | chpwd
or
test:1234 | chpasswd

且密碼皆未變更
saiue iT邦研究生 1 級 ‧ 2011-11-01 14:36:20 檢舉
感謝~~
所以看來只能開啟SUDO的權限
lovex iT邦新手 5 級 ‧ 2011-11-01 20:05:59 檢舉
您的意思是在super.tab中加入
su sudo www-data
然後在php下執行
system('super su -i aecho test:1234 | /usr/sbin/chpasswd');

system('super su -i aecho test:1234 | chpwd');
lovex iT邦新手 5 級 ‧ 2011-11-02 08:16:48 檢舉
測試結果,返回錯誤
super: command `su': Couldn't exec `/usr/bin': Permission denied
lovex iT邦新手 5 級 ‧ 2011-11-02 12:07:09 檢舉
上一個錯誤原來是我super.tab設定有問題造成的

現在super.tab設定如下
su /usr/bin/sudo www-data

在php執行
system(escapeshellcmd('super su -i echo test:1234|passwd'))


得到錯誤如下
su: no tty present and no askpass program specified


此錯誤有點像是透過SSH連入時少下了一個 -t 的option會造成的,與用PHP執行似乎沒啥關係,繼續研究中
lovex iT邦新手 5 級 ‧ 2011-11-04 08:07:07 檢舉
終於測出來了.....

可以在新增使用者時,一併指定加密的密碼
//must install super and configuration /etc/super.tab auser /usr/sbin/useradd www-data
$allowed_salt = "abcdefghiklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789";
$salt = substr($allowed_salt, rand(0,strlen($allowed_salt)-1), 1).substr($allowed_salt, rand(0,strlen($allowed_salt)-1), 1);
$pass = crypt("56789",$salt); 

system("super auser -m -p$pass test");


這段code會產生一個使用者為test,密碼是56789
saiue iT邦研究生 1 級 ‧ 2011-11-07 16:06:26 檢舉
system("super auser -m -p$pass test");


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

2 個回答

8
saiue
iT邦研究生 1 級 ‧ 2011-10-26 18:15:03
最佳解答

可以考慮不用互動的方式建立使用者密碼
super模組 + chpasswd指令
echo 帳號:密碼 | chpasswd

super模組 + passwd 指令
echo 密碼 | passwd --stdin 帳號

lovex iT邦新手 5 級 ‧ 2011-10-28 13:03:27 檢舉

第一種方法可行,而第二種方法經測試Ubuntu的passwd不支援--stdin的option

感謝您提供的方法!!

接下來就是要測試如何以php 執行此行指令了!!

2
chiounan
iT邦研究生 1 級 ‧ 2011-10-27 14:08:55

lovex提到:
我觀察過/etc/shadow這個檔案,密碼的前置字元為$6$,應是使用SHA-512的加密方式

連問題都這麼專業

我要發表回答

立即登入回答