Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

抛出异常时,无法定位是哪个文件的问题 #535

Closed
wgzhao opened this issue Mar 16, 2014 · 4 comments
Closed

抛出异常时,无法定位是哪个文件的问题 #535

wgzhao opened this issue Mar 16, 2014 · 4 comments
Labels
bug Something isn't working

Comments

@wgzhao
Copy link

wgzhao commented Mar 16, 2014

今天增加了一个帖子,修改了之前的几个帖子,修改了主题的_config.yml配置文件,打算生成静态文件时,抛出异常,但是很难定位到是哪个文件导致的异常。
异常如下:

➜  blog git:(master) ✗ hexo clean
➜  blog git:(master) ✗ hexo g --debug
[debug] 11:40:33.367 Config file loaded
[debug] 11:40:33.373 Version info checked successfully
[debug] 11:40:33.512 Processed: _drafts/2012-01-04-2011-summary-and-2012-plan.md
[debug] 11:40:33.513 Processed: _drafts/2012-01-10-lsb-scripts-specification.md
[debug] 11:40:33.514 Processed: _drafts/2012-01-12-heartbeat-prevent-from-destruction-of-data-on-shared-disk-due-to-split-brain-by-using-sfex-resource-agent.md
[debug] 11:40:33.514 Processed: _drafts/2012-01-16-5-simple-ways-to-troubleshoot-using-strace.md
[debug] 11:40:33.726 Processed: CNAME
[debug] 11:40:33.772 Processed: LICENSE
[debug] 11:40:33.773 Processed: README.md
[debug] 11:40:33.780 Processed: source/css/_base/layout.styl
[debug] 11:40:33.780 Processed: source/css/_base/utils.styl
........
[debug] 11:40:33.790 Processed: source/css/font/fontawesome-webfont.ttf
[debug] 11:40:33.791 Processed: source/css/font/fontawesome-webfont.woff
[debug] 11:40:33.899 Theme config loaded
[debug] 11:40:33.900 Processed: _config.yml
[debug] 11:40:33.901 Processed: languages/default.yml
[debug] 11:40:33.902 Processed: languages/zh-CN.yml
[error] 11:40:34.415 { rawMessage: 'Indentation problem A',
  parsedLine: 2,
  snippet: 'layout: post',
  parsedFile: null,
  message: 'Indentation problem A',
  domain:
   { domain: null,
     _events: { error: [Function] },
     _maxListeners: 10,
     members: [],
     _disposed: true },
  domainThrown: true }
[debug] 11:40:34.913 Processed: layout/archive.ejs
[debug] 11:40:34.914 Processed: layout/category.ejs

这种情况下,如何知道是哪个文件导致的异常呢?非常感谢!

@wgzhao
Copy link
Author

wgzhao commented Mar 16, 2014

逐一排查,发现是某一篇帖子会导致整个异常抛出(但是整个帖子在异常之前没有修改过),把该帖子放到_drafts目录,generate可通过。但是对该帖子执行hexo render也可以通过。帖子的内容如下

---- 
layout: post
title: 用vsftpd和mysql创建一个虚拟用户ftp服务器
date: 2012-04-07 16:51
comments: true
categories: 
- Linux技术
tags:
- vsftp
- mysql
- pam

---- 

当前有这样的一个需求,我需要批量创建一个网站,比如我要创建一个`foo.com`的网站,我就会在`/web/`目录下创建一个`foo.com`的目录,WEB服务器(我这里用的是[nginx][1])已经自动设置好解析。同时,我需要有一个对应的ftp账号来管理这个网站,但是我不希望使用系统账号,一来网站多了,系统账号必然多,而来我不希望管理网站的账号能通过ssh登陆,虽然ssh也可以配置哪些账号不允许登陆。但是不创建系统账号显然是最安全的做法。  
<!--more-->
于是这就是有了标题的做法,用[vsftpd][2]做FTP服务器,用[MySQL][3]做后端数据库,两者通过[pam-mysql][4]插件联系起来。配置步骤简述如下:

1. 我的系统是[CentOS][5] 6.2,因此现用yum工具安装好所需要的软件,包括[mysql-server][6],[vsftpd][7],[pam-mysql][8]等。
2. 编辑`/etc/vsftpd/vsftpd.conf`文件,增加或者修改如下几项:

        anonymous_enable=NO
        virtual_use_local_privs=YES
        guest_enable=YES
        user_sub_token=$USER
        local_root=/web/$USER
        chroot_local_user=YES
        hide_ids=YES
        guest_username=nginx

    `guest_username` 表示当用户登陆成功后,其uid映射到系统哪个账号上,我这里为了和WEB管理相结合,因此用了nginx这个账号。

3. 创建数据库表,我们创建一个名为vsftpd的数据库,在其下创建一个users表,同时授权给vsftpd账号登陆,创建过程类似如下:  


        mysql> create database vsftpd;
        Query OK, 1 row affected (0.00 sec)

        mysql> use vsftpd
        Database changed
        mysql> create table users(username varchar(30) not null primary key,password varchar(41) not null);
        Query OK, 0 rows affected (0.04 sec)
        mysql> grant usage  on vsftpd.users to vsftpd@localhost identified by 'abc123';
        Query OK, 0 rows affected (0.00 sec)
        mysql> insert into users values('foo.com',password('test'));
        Query OK, 1 row affected (0.00 sec)

        mysql> select * from users;
        +----------+-------------------------------------------+
        | username | password                                  |
        +----------+-------------------------------------------+
        | foo.com  | *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29 |
        +----------+-------------------------------------------+
        1 row in set (0.00 sec)


我这里对密码使用password加密函数,因为要和WEB结合,因为username使用了和域名相同的名字,这样我就可以通过username来同时获知域名,从而将账号的主目录锁定在对应的域名目录下。

4. 编辑`/etc/pam.d/vsftpd`文件,最后类似如下:


        auth required pam_mysql.so user=vsftpd passwd=abc123 host=localhost db=ftpd table=users usercolumn=username passwdcolumn=password crypt=2
        account required pam_mysql.so user=vsftpd passwd=abc123 host=localhost db=ftpd table=users usercolumn=username passwdcolumn=password crypt=2


    user和passwd指的是连接[MySQL][9]的账号和密码,crypt指的加密方式,0表示明文;不加密;1表示用crypt方式加密;2表示用[MySQL][9]的password函数加密;3表示用md5加密;4表示用sha1加密。

5. 创建对应的目录 当用foo.com登陆,且验证通过后,根据之前[vsftpd][10]的配置,它将以nginx的身份把`/web/foo.com`作为其主目录,因此要保证其目录存在,而且其身份有访问权限。
6. 测试,直接可以在本地测试,看看能否登陆,如果不能登陆,`/var/log/secure`里又看不到更多的信息,那你可以选择在`/etc/pam.d/vsftpd`的配置文件里加上`verbose`模式,也就是在`user=vsftpd`那里加上一个`verbose=1`的选项,这样它就会把详细的信息打印到`/var/log/secure`文件里。看看是哪里的报错。

其实,上述只是一个最简单的配置,`pam-mysql`还可以让你配置得更复杂,比如记录登录日志,根据特定条件查询过滤用户信息等,`pam-mysql`软件包自带的`README`有详细的说明,大家可以按照那个说明来配置一个符合你需求的灵活的认证方式。

[1]:    http://nginx.org "nginx"
[2]:    http://vsftpd.beasts.org/ "vsftpd Server"
[3]:    http://www.mysql.com "MySQL Server"
[4]:    http://pam-mysql.sourceforge.net "PAM module backed by MySQL"
[5]:    http://www.centos.org "CentOS"
[6]:    http://www.mysql.com "MySQL Server"
[7]:    http://vsftpd.beasts.org/ "vsftpd Server"
[8]:    http://pam-mysql.sourceforge.net "PAM module backed by MySQL"
[9]:    http://www.mysql.com "MySQL Server"
[10]:   http://vsftpd.beasts.org/ "vsftpd Server"

@tommy351
Copy link
Member

The reason is you use 4 dashes in YFM. This bug will be fixed in the next version.

@tommy351 tommy351 added the bug label Mar 17, 2014
@wgzhao
Copy link
Author

wgzhao commented Mar 17, 2014

关键是在上述错误的情况下,我如何知道是这个文件搞的鬼,我这是采取逐一排除法查出来的,太耗时。

@chenall
Copy link
Contributor

chenall commented Mar 18, 2014

确实如此,我之前有碰到过卡很长时间的问题的,采用二分法排除查出来了问题出现在某个文章上,
不知作者有没有什么比较好的方法?

tommy351 added a commit that referenced this issue Mar 19, 2014
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants