如何以用户身份创建文件,然后以其他用户身份修改它?

如何以用户身份创建文件,然后以其他用户身份修改它?

我有一个脚本,先执行“su - oracle”,然后运行 ​​exp。我需要将该文件存储到目录 /app/dumps 中,以便用户“backups”可以读取和写入该文件。

设置 /app/dumps 目录的正确方法是什么,以便“backups”有权修改目录中的任何文件,但“oracle”仍然可以将数据写入目录?

答案1

解决此问题的最简单方法是将目录粘性位与适当的组权限一起使用。

  1. 创建新组:groupadd orabak
  2. 将两个用户都添加到组中:usermod -G orabak oracle; usermod -G orabak backups
  3. 在目录上设置组粘性位:chmod g+s /app/dumps
  4. 确保当 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 维基条目将会启发你。

这给你留下了一些选择:

  1. 创建一个名为 的群组backup,并将用户backups和添加oracle到其中。由 -group 组拥有的文件backups现在将与用户backups和共享访问权限oracle
  2. 创建一个组,backups将用户添加backups到其中。将所有权授予用户oracle,将组所有权授予组backups。这将为用户oracle和组内所有组成员提供单独的权限backup
  3. 操作与 2 相同,但oracle

执行此操作的工具是 groupadd、chown、chmod 和 usermod。手册页将为您提供更详细的信息。我知道这有点像 RTFM 答案。但我确信,如果您阅读了这些内容,您将来将能够处理 Linux 文件权限。=) 祝你好运

悖论

相关内容