0

Centos のバージョン番号は次のとおりです。

[marc disk5]$ cat /etc/redhat-release
CentOS release 5.7 (Final)

Apache Webサーバーを起動する方法は次のとおりです

[marc php]$ sudo gdb /usr/sbin/httpd
[sudo] password for marc: 
GNU gdb (GDB) Red Hat Enterprise Linux (7.0.1-37.el5_7.1)
Copyright (C) 2009 Free Software Foundation, Inc.
Reading symbols from /usr/sbin/httpd...(no debugging symbols found)...done.
(gdb) run -X

Firefox Web ブラウザを起動する方法は次のとおりです。

[marc]$ sudo firefox
[sudo] password for marc: 

Firefox Web ブラウザーに入力する URL は次のとおりです。

http MatchUpObjectPHPSample.php

Web ブラウザーによってレンダリングされた Web ページで送信要求をアクティブにすると、次の診断メッセージが表示されます。

Path /home/marc/data/mdMatchup.dat
throw exception /home/marc/data/mdMatchup.dat retval -1 errno 13

Errno 13 IS EACCESS は、ファイルの存在をテストするために使用する C/C++ access("/home/marc/data/mdMatchup.dat",F_OK) API 呼び出しによって返されます。アクセスのマニュアルページには、次のように記載されています。

EACCES 要求されたファイルへのアクセスが拒否されるか、pathname のパス プレフィックス内のディレクトリの 1 つに対する検索権限が拒否されます。

パスのパーミッションは次のとおりです。

[marc /]$ ls -l
drwxr-xr-x   7 root root  4096 Jan  3 11:45 home

[marc home]$ ls -l
drwx------ 38 marc     users 4096 May 29 16:36 marc

[marc home]$ cd marc
[marc ~]$ ls -l
drwxrwxrwx  2 root   root       4096 May 29 19:20 data

[marc ~]$ cd data
[marc data]$ pwd
/home/marc/data
[marc data] ls -l 
-rwxrwxrwx 1 root root 244736 May 28 15:49 mdMatchup.dat

最後に、C++ コードの非常に短いスニペットを次に示します。

cSQLite::cSQLite(char *File_,bool bMustExist_) {
  int retval(0);

  if (bMustExist_) {
     retval = access(File_,F_OK);

     if (retval != 0) {
       printf("throw exception %s retval %d errno %d\n",File_,retval,errno);
       throw cException(ERR_DBDATABASE,"cSQLite",File_);
     }

     if (sqlite3_open(File_,&Database)!=SQLITE_OK) {
       RecordError();
       throw cException(ERR_DBDATABASE,"cSQLite",LastError);
     }
  }

  Statement=0;
  Columns=0;
}

誰かが私たちが犯している間違いを教えてもらえますか、またはこれが CentOS バージョン固有の問題であるかどうか教えてください。

4

1 に答える 1

3

ここで何を達成しようとしているのですか?標準の起動スクリプトを使用する代わりに、なぜ httpd を直接起動するのですか? ブラウザーを root として実行している理由は何ですか? root 権限は HTTP 接続を経由しないのですか?

さらに、問題は、marcディレクトリがユーザーのみが読み取れるmarcことです。設計上、Apache は root パーミッションを削除し、非特権ユーザー (httpd、htdata など) として実行するため、/home/marc 内の何かにアクセスする権限はありません。

于 2012-05-30T17:21:53.127 に答える