问及毕业后毕业后工作方向,菜鸟是做不了drivers和kernel是干不了的。于是就去问大神,大神叫我去分析下vsftpd源码。于是下了个源码,说到源码,昨天官网竟然进不去,后来度了度,可以在
ftp://vsftpd.beasts.org/users/cevans/untar/下载,具体命令
wget -r ftp://vsftpd.beasts.org/users/cevans/untar/vsftpd-3.0.2/* ,
在这之前先在当前目录建一个文件夹,进入,在下载,否则会下到当前目录,很混乱。
下载到的是文件夹,不用解压,直接进入vsftpd-3.0.2,然后 执行 make ,发现一打的错误:
gcc -o vsftpd main.o utility.o prelogin.o ftpcmdio.o postlogin.o privsock.o tunables.o ftpdataio.o secbuf.o ls.o postprivparent.o logging.o str.o netstr.o sysstr.o strlist.o banner.o filestr.o parseconf.o secutil.o ascii.o oneprocess.o twoprocess.o privops.o standalone.o hash.o tcpwrap.o ipaddrparse.o access.o features.o readwrite.o opts.o ssl.o sslslave.o ptracesandbox.o ftppolicy.o sysutil.o sysdeputil.o -Wl,-s `./vsf_findlibs.sh`
sysdeputil.o:在函数‘vsf_sysdep_has_capabilities’中:
sysdeputil.c:(.text+0x1da):对‘cap_get_proc’未定义的引用
sysdeputil.c:(.text+0x1e5):对‘cap_free’未定义的引用
sysdeputil.o:在函数‘vsf_sysdep_adopt_capabilities’中:
sysdeputil.c:(.text+0x219):对‘cap_init’未定义的引用
sysdeputil.c:(.text+0x22f):对‘cap_set_proc’未定义的引用
sysdeputil.c:(.text+0x245):对‘cap_free’未定义的引用
sysdeputil.c:(.text+0x26e):对‘cap_set_flag’未定义的引用
sysdeputil.c:(.text+0x28b):对‘cap_set_flag’未定义的引用
sysdeputil.c:(.text+0x2b6):对‘cap_set_flag’未定义的引用
sysdeputil.c:(.text+0x2d3):对‘cap_set_flag’未定义的引用
sysdeputil.o:在函数‘vsf_sysdep_check_auth’中:
sysdeputil.c:(.text+0xc43):对‘pam_start’未定义的引用
sysdeputil.c:(.text+0xc78):对‘pam_set_item’未定义的引用
sysdeputil.c:(.text+0xc96):对‘pam_set_item’未定义的引用
sysdeputil.c:(.text+0xcba):对‘pam_set_item’未定义的引用
sysdeputil.c:(.text+0xcd0):对‘pam_authenticate’未定义的引用
sysdeputil.c:(.text+0xcee):对‘pam_get_item’未定义的引用
sysdeputil.c:(.text+0xd0d):对‘pam_acct_mgmt’未定义的引用
sysdeputil.c:(.text+0xd22):对‘pam_setcred’未定义的引用
sysdeputil.c:(.text+0xd49):对‘pam_open_session’未定义的引用
sysdeputil.c:(.text+0xd7a):对‘pam_end’未定义的引用
sysdeputil.c:(.text+0xd8d):对‘pam_end’未定义的引用
sysdeputil.c:(.text+0xdb8):对‘pam_setcred’未定义的引用
解决的办法是,看有没安装openssl,没有就安装,执行
sudo apt-get install openssl
sudo apt-get install libssl-dev
执行
make 还是不行
执行
chmod +x
vsf_findlibs.sh
./
vsf_findlibs.sh
看输出什么,对应脚本vsf_findlibs.sh找到错误的地方,然后在Makefile中的LDFLAG 后面加入就行,
我的版本是vsftpd-3.0.2,根据脚本提示,修改Makefile中的那一行为
LDFLAGS = -lcrypt,-lcap, -fPIE -pie -Wl,-z,relro -Wl,-z,now-lcrypt,-lcap, -fPIE -pie -Wl,-z,relro -Wl,-z,now
make
输出信息:
gcc -c sysdeputil.c -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wall -W -Wshadow -Werror -Wformat-security -D_FORTIFY_SOURCE=2 -idirafter dummyinc
gcc -c seccompsandbox.c -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wall -W -Wshadow -Werror -Wformat-security -D_FORTIFY_SOURCE=2 -idirafter dummyinc
gcc -o vsftpd main.o utility.o prelogin.o ftpcmdio.o postlogin.o privsock.o tunables.o ftpdataio.o secbuf.o ls.o postprivparent.o logging.o str.o netstr.o sysstr.o strlist.o banner.o filestr.o parseconf.o secutil.o ascii.o oneprocess.o twoprocess.o privops.o standalone.o hash.o tcpwrap.o ipaddrparse.o access.o features.o readwrite.o opts.o ssl.o sslslave.o ptracesandbox.o ftppolicy.o sysutil.o sysdeputil.o seccompsandbox.o -Wl,-s -lcrypt -lcap -fPIE -pie -Wl,-z,relro -Wl,-z,now `./vsf_findlibs.sh`
ok,累了,明天开始分析源码...........
参考:大神,互联网
阅读(3610) | 评论(0) | 转发(0) |