此次尝试是在Samba使用changepassword的时候,一直失败后的另外方案,尝试使用php获取用户名、原密码以及修改密码后调用smbpasswd修改用户密码,
因为不知道smbpasswd所使用的加密类型,如果无法直接匹配原密码是否正确,所以采用如下流程验证:
首先由用户输入如上图所有信息,当点击更改按钮后,post提交表单,然后首先由所填用户名查找/etc/samba/smbpasswd中是否匹配,然后获取其中加密后的密码,如所示:
# cat /etc/samba/smbpasswd test01:500:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:1877E5AA6FE93838EC8E083F5BD0B4F7:[U ]:LCT-58A45B19: test02:501:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:579110C49145015C47ECD267657D3174:[U ]:LCT-58A45B0B:
比如修改的为test01,则php读取smbpasswd之后匹配test01的那一行,然后获取其中1877E5AA6FE93838EC8E083F5BD0B4F7这串值,然后对比
(写到这突然想到,可以首先就将smbpasswd这个文件复制一份,然后将表单中就口令填写的密码作为新密码使用smbpasswd命令修改到test01用户中,
如果这个旧口令正确,那么此时的smbpasswd文件和之前复制的那一份是一模一样的,这样就能判断旧口令是否正确,如果旧口令不对,那么这2个文件的内容也不对
这样就先将原来复制的那一份覆盖现在这一份,保证其旧口令不变。
使用 diff file1 file2 可以对比得到结果)
在实践过程中涉及到几个问题,就是smbpasswd这个命令如果使用php执行的话是用的apache用户组,没有权限,此时需要将apache的所属用户提升权限(安全隐患),
具体实现如下:
1、查看当前apache的用户(一般是apache)
# lsof -i:80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 1695 root 4u IPv6 11921 0t0 TCP *:http (LISTEN) httpd 1699 apache 4u IPv6 11921 0t0 TCP *:http (LISTEN) httpd 1700 apache 4u IPv6 11921 0t0 TCP *:http (LISTEN) httpd 1701 apache 4u IPv6 11921 0t0 TCP *:http (LISTEN) httpd 1702 apache 4u IPv6 11921 0t0 TCP *:http (LISTEN) httpd 1703 apache 4u IPv6 11921 0t0 TCP *:http (LISTEN) httpd 1704 apache 4u IPv6 11921 0t0 TCP *:http (LISTEN) httpd 1705 apache 4u IPv6 11921 0t0 TCP *:http (LISTEN) httpd 1706 apache 4u IPv6 11921 0t0 TCP *:http (LISTEN) httpd 11874 apache 4u IPv6 11921 0t0 TCP *:http (LISTEN)
未完。。。参考http://blog.csdn.net/lxwxiao/article/details/8513355
文章评论(0)