本人程度:不懂后端服务器怎么存密码的
爬文后要做个简易的LINUX登入程序
目前想法是写一个script如下:
echo ${1} | openssl passwd -1 -salt key -stdin > /etc/password
##感谢kenduest大大修正
这样会不会在管线被撷取或刚跑script就被截取${1}的值呀
作者:
CMJ0121 (请多指教!!)
2020-09-06 19:19:00echo ${1} 啊 听起来很好做 command injection
2. 你用什么语言? google crypt()函式库
你用 $1 代表是用参数传吧?用 ps 会看到程序的参数当然,要先看你想做到的安全是对哪些角度而言
作者:
HMKRL (HMKRL)
2020-09-06 23:06:00你${1}直接就在cmdline里面了
其实我是用重导向 将dialog输入管道只是想简化问题用$1造成误会抱歉我用Shell script写的请问为何写进etc很危险呢
1. 你的命令那个 echo 多余的,因为你已经把要使用的密码指定叫做 password 了,那个 echo 没有功能所以真的要取得 command line 第一个传入变量内容应该是把 $1 搬到后面去才对2. openssl passwd -1 这种是古早 des 加密不安全的抱歉说错了,-1 是 md5-hash 加密,目前也是不安全考虑使用 sha256/sha512 hash 加密比较安全,目前linux 系统一般通用有 chpasswd 可以支援这类使用3. 放 command line 参数有密码等项目确实不安全考虑 io 重导方式或是读入档案方式,前提程式支援chpasswd 可以支援 standard input 读入这类比较 ok4. 后面直接 > /etc/passwd 真是吓死人了...希望原贴的朋友你能够先厘清这个命令结果带来的"改变"
还好啦, 他是 > /etc/password, 不是 passwd QQ不过我不懂, 这指令跟"简易的LINUX登入程序"有啥关系?
pipeline 是安全的,不安全的是你脚本直接从命令列吃密码引数
我不是直接抓引数只是简化问题抱歉造成误会我其实是在systemd 写一个开机程序用dialog请用户输入密码输入完我想管线导给OpenSSL
若是 openssl passwd 是你要的,默认 openssl passwd你使用 -stdin 参数就可以直接标准输入读入处理ex: openssl passwd -1 -stdin < mypasswd.datmypasswd.dat 就是原始密码,提供 openssl 工具读入
作者:
bitlife (BIT一生)
2020-09-07 11:30:00一般server储存的都是单向加密后无法解密的密码(例如杂凑),这是为了防止密码数据库被骇后降低被破解的机会,最早的SunOS /etc/passwd 里的密码字段还所有帐号可读,后来才改成shadow忘了说,上述方法也是为了防止不肖内部人盗用客户密码验证使用者密码则是把使用者输入文字照相同方式加密后再和系统储存的密码比对如果担心unnamed pipe可能被ps偷窥到,可改用named pipe,
作者:
bitlife (BIT一生)
2020-09-07 11:38:00named pipe用mkfifo建立, man mkfifo
作者:
bitlife (BIT一生)
2020-09-07 11:39:00不过要注意named pipe的owner和mode,以免设定不当反而人人可读取,那就更糟了
unnamed pipe 主要是两个 process 需要同步资料沟通应用才方便,楼上密码沟通大多一般是一次性不会多次因为 read/write 一般都会有 blocking 问题,要用基本上有其它事情要处理,写入一般档案方式是最单纯的建议自己 python 写片段程式处理吧,没那么复杂