我有一个脚本,先执行“su - oracle”,然后运行 exp。我需要将该文件存储到目录 /app/dumps 中,以便用户“backups”可以读取和写入该文件。
设置 /app/dumps 目录的正确方法是什么,以便“backups”有权修改目录中的任何文件,但“oracle”仍然可以将数据写入目录?
答案1
解决此问题的最简单方法是将目录粘性位与适当的组权限一起使用。
- 创建新组:
groupadd orabak
- 将两个用户都添加到组中:
usermod -G orabak oracle; usermod -G orabak backups
- 在目录上设置组粘性位:
chmod g+s /app/dumps
- 确保当 oracle 和备份用户写入文件时,他们在设置组写入位的情况下进行操作(您可以为此使用 umask)
答案2
您应该能够使用这两个命令完成您想要做的事情:
chown oracle:backups /app/dumps
chmod 2370 /app/dumps
chown 将目录的所有者设置为 oracle 用户,将组设置为 backup 用户。
chmod 执行以下操作:
- 设置 setgid 位
- 授予所有者 (oracle) 写入/执行权限
- 授予组(备份)读/写/执行访问权限
在目录上设置 setgid 意味着在该目录中创建的文件将继承目录的组,而不是创建者的组。在您的实例中,这意味着 oracle 写入该目录的任何文件都将以组的形式进行备份。
Oracle 可以写入目录但不能读取。如果需要,请将权限更改为 2770。
这也假设您的脚本正在 /app/dumps 目录中创建具有读/写访问权限的文件。如果不是这种情况,您可以运行setfacl -d -m g::rw /app/dumps
以将在 /app/dumps 中创建的文件的默认组权限设置为读/写。
答案3
如果你这样做,ls -alh /somedir
你会得到类似的东西
ls -alh /somedir
drwxrwxrwx 1 owner group [size and date] .
drwxrwxrwx 1 powner pgroup [size and date] ..
-rwxrwxrwx 1 owner owner [size and date] somefile
一旦你理解了这一点,你就能弄清楚你必须为你的文件设置什么权限和所有权。这Ubuntu 维基条目将会启发你。
这给你留下了一些选择:
- 创建一个名为 的群组
backup
,并将用户backups
和添加oracle
到其中。由 -group 组拥有的文件backups
现在将与用户backups
和共享访问权限oracle
。 - 创建一个组,
backups
将用户添加backups
到其中。将所有权授予用户oracle
,将组所有权授予组backups
。这将为用户oracle
和组内所有组成员提供单独的权限backup
- 操作与 2 相同,但
oracle
执行此操作的工具是 groupadd、chown、chmod 和 usermod。手册页将为您提供更详细的信息。我知道这有点像 RTFM 答案。但我确信,如果您阅读了这些内容,您将来将能够处理 Linux 文件权限。=) 祝你好运
悖论