2

我希望能够在特定目录中创建一个 firebird 数据库。我知道 firebird 用户需要对我要创建数据库的目录具有 r/w/x 权限。我创建了一个名为“tracker”的组,并将我的用户和 firebird 用户添加到该组。

firebird@ubuntu:/$ groups firebird
firebird tracker

我创建了一个名为“tracker”的主目录

drwxrwx---   3 me tracker  4096 Oct 16 10:40 tracker

在“tracker”目录中,我创建了一个“fdb”目录,我希望在其中创建 firebird 数据库。

drwxrwx--- 2 firebird firebird 4096 Oct 16 11:35 fdb

现在,当我尝试使用以下命令创建数据库时:

CREATE DATABASE 'localhost:/tracker/fdb/test.fdb' page_size 8192 user 'SYSDBA' password 'foobar' DEFAULT CHARACTER SET UTF8;

我收到以下错误:

Statement failed, SQLSTATE = 08001
I/O error during "open O_CREAT" operation for file "/tracker/fdb/test.fdb"
-Error while trying to create file
-Permission denied

如果将 'tracker' 目录更改为属于 'firebird' 组,那么它会创建数据库,这是有道理的,但由于 firebird 用户属于 'tracker' 组,它不应该有任何权限问题。

我在这里想念什么?

我正在使用 Ubuntu 和 firebird 2.5。

谢谢

4

1 回答 1

1

我不经常使用 Linux,但是您评论说,如果您在更高级别的目录中为每个人添加执行位,它确实有效,这让我再次思考。

Firebird 服务器正在运行 - 大概 - 在firebird用户下。在您的示例设置中,该用户有权访问该/tracker/fdb文件夹,但无权访问该/tracker文件夹。

为了能够访问/tracker/fdb(例如创建文件),用户需要对所有更高级别目录的执行权限,直到根目录(否则firebird用户无法知道(或检查)该fdb文件夹是否存在于其中/tracker)。

另请参阅Unix 文件权限

rw 和 x 对目录的真正含义是什么?

目录也是文件,“读取”权限意味着您可以读取它。但是如果没有 x 的许可,你真的不能做很多事情。对于目录,您通常同时拥有读取和执行权限,或者两者都没有。在一个目录上,那个 x 被正式称为“搜索权限”。您需要 x 才能使用路径名中的目录。因此,如果您尝试“cat /etc/passwd”,您将需要在 / 和 /etc 上使用 x。您还需要 x 以 cd 进入目录。假设您对某个目录具有读取但没有搜索 (x) 权限。你能做什么?不多。您可以使用“ls”查看文件名。即使“ls -l”也不起作用。没有搜索权限的读取权限不是很有用。仍然比仅对目录具有写权限要好……那完全没用。我没有看到任何其他明确说明这一点的文档,所以让我重复一遍:对目录的写入但没有执行权限根本不会授予任何权限。假设您对目录具有搜索 (x) 权限但没有读取权限。现在,如果您碰巧知道文件名,就可以打开目录中的文件。您可以 cd 进入该目录。就是这样。您甚至无法创建新文件。添加写权限将允许您创建文件。如果您碰巧知道文件的名称,则可以删除文件。您甚至无法创建新文件。添加写权限将允许您创建文件。如果您碰巧知道文件的名称,则可以删除文件。您甚至无法创建新文件。添加写权限将允许您创建文件。如果您碰巧知道文件的名称,则可以删除文件。

于 2013-10-17T18:15:50.717 回答