php操作系统命令及读文件

2017年2月15日 0 条评论 1.48k 次阅读 0 人点赞

此次尝试是在Samba使用changepassword的时候,一直失败后的另外方案,尝试使用php获取用户名、原密码以及修改密码后调用smbpasswd修改用户密码,

因为不知道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

Sevenfal

这个人太懒什么东西都没留下

文章评论(0)