首页
关于本博客
友情链接
推荐
linux/shell
Search
1
LEDE官方固件安装中文语言包的方法
11,087 阅读
2
LEDE固件踢出弱信号客户端,实现WiFi无缝漫游脚本
9,183 阅读
3
基于CloudFlare API的纯Shell动态DNS(DDNS)脚本
8,153 阅读
4
一次OpenVPN交叉编译笔记
6,664 阅读
5
利用iptables的string模块来屏蔽域名(关键词匹配)
6,111 阅读
study
OpenWrt/LEDE
网络技术
数通
HCNP/CCNP
linux
shell
CentOS
Ubuntu/Debian
php
Linux应用
C#
C/C++
虚拟化
IDC
杂项
MySQL
运维笔记
zabbix
seafile
openvpn
QEMU/KVM
windows
html
nginx
互联网应用
IP地址段汇总
登录
Search
标签搜索
nginx
OpenWrt
openvpn
SSH
seafile
cloudflare
iptables
openssl
linux
letsencrypt
CentOS
反向代理
ftp
openvpn配置模板
vsftpd
seafile网盘
Linux启动脚本
ddns
nas
seafile服务器
自渡
累计撰写
75
篇文章
累计收到
1
条评论
首页
栏目
study
OpenWrt/LEDE
网络技术
数通
HCNP/CCNP
linux
shell
CentOS
Ubuntu/Debian
php
Linux应用
C#
C/C++
虚拟化
IDC
杂项
MySQL
运维笔记
zabbix
seafile
openvpn
QEMU/KVM
windows
html
nginx
互联网应用
IP地址段汇总
页面
关于本博客
友情链接
推荐
linux/shell
搜索到
1
篇与
php修改nas密码
的结果
2018-11-22
企业NAS部署(二)之实现用户自助修改密码
搭建好nas后,问题又来了,就是用户密码问题。之前部署NAS,用户密码都是在命令行下导入的,修改密码也只能通过命令行,要让用户使用Linux命令行来修改或者重置密码,那是不可能的。而我唯一能想到的,就是用php写一个web页面,通过表单提交的方式,让php来替用户执行shell命令,达到自助修改密码的目的。PHP代码<?php function replaceSpecialChar($strParam){ $regex = "/\ |\/|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\+|\{|\}|\:|\<|\>|\?|\[|\]|\,|\.|\/|\;|\'|\`|\-|\=|\\\|\|/"; return preg_replace($regex,"",$strParam); } ?> <html> <head> <meta charset="utf-8"> <title>NAS密码自助修改页面</title> </head> <body bgcolor="#CCFFCC"> <br><br> <p><center><h2>NAS密码自助修改</h2></center></p> <form action="changepass.php" method="POST" submit=""><center> <p><span>NAS用户名:</span><input type="text" name="username" placeholder="用户名"></p> <p><span>NAS新密码:</span><input type="password" name="passwd" placeholder="新密码"></p> <p><button>修改</button></p> </center></form> <br><br> <p><h2>操作说明</h2></p> <li>请勿使用特殊字符作为账户名或密码,使用特殊字符将导致密码错误。</li> <li>该系统仅可修改已注册用户的密码,无法添加新用户。</li> <?php $username=$_POST["username"]; $username=replaceSpecialChar($username); $passwd=$_POST["passwd"]; $passwd=replaceSpecialChar($passwd); if (!$_POST["username"]){ echo ""; }elseif (!$_POST["passwd"]){ echo ""; }else{ exec("(sudo echo ".$passwd.";echo ".$passwd.") | sudo smbpasswd -s -a ".$username.""); echo "<br><strong>操作提示:</strong>修改成功,当前用户名".$username."对应的密码已被修改为".$passwd.",请牢记。"; } ?> </body> </html>使用说明要求的环境:php+nginx,关于二者的编译与安装,在本站https://www.zavierlab.com/post/49.html这个页面里已有详细说明,不再重复写。通过编译安装的php,其配置文件在/usr/local/php/etc/php.ini里面,要想使用php执行shell命令,就必须确保配置里面exec函数没有被禁用。查看办法是打开该配置文件,找到disable_function = 这一行(一般在305行),等号后面的函数表示被禁用的函数。该代码内使用到了sudo命令,所以必须给php使用的用户适当的sudo免密码权限,以确保能够正常执行echo和smbpasswd命令。假设php是以www用户身份运行的,则必须给www用户适当的sudo权限,方法是:使用vi在/etc/sudoers.d/下创建一个名为www的文件并编辑vi /etc/sudoers.d/www 加入以下内容 #分别设置echo和smbpasswd命令的别名 Cmnd_Alias CHANGE_SMBPASS = /usr/bin/smbpasswd Cmnd_Alias ECHO = /bin/echo #设置www用户在执行smbpasswd和echo命令时,无需密码 www ALL=(ALL) NOPASSWD:CHANGE_SMBPASS,ECHO 编辑后保存即可生效。接下来还需要用nginx配置web服务器并对php代码进行解析,配置如下:现在/home/wwwroot/下创建一个changenaspwd目录,将该php文件传入目录内,且将该文件命名为index.phpmkdir -p /home/wwwroot/changenaspwd 在/usr/local/nginx/conf/vhost/下创建一个文件,文件名自定义,扩展名必须为.confvi /usr/local/nginx/conf/vhost/changenaspwd.conf配置文件如下:server { listen 80 default; access_log /home/wwwlogs/changenaspwd.log; root /home/wwwroot/changenaspwd; index index.php; location ~ [^/]\.php(/|$) { fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; } }保存后,同时启动php和nginxservice nginx start service php-fpm start
2018年11月22日
1,592 阅读
0 评论
0 点赞