文件的所有权正在自动更改

时间:2019-05-09 08:58:58

标签: linux file-permissions rpm

如何防止更改文件所有权? 我有一个具有如下权限的文件:

-rw-r-----. 1 netcool ncoadmin 1689 May  8 14:54 NCI_Constellation.proj

作为RPM软件包安装的一部分,我正在运行一个脚本,该脚本应该将数据写入NCI_Constellation.proj文件。在软件包安装过程中,文件的许可权将按以下方式更改,并且不会写入文件。

-rw-r-----. 1 root root 1689 May  8 14:54 NCI_Constellation.proj

有没有一种方法可以不更改NCI_Constellation.proj文件的所有权并将其保持如下所示,以便能够将数据写入该文件?

-rw-r-----. 1 netcool ncoadmin 1689 May  8 14:54 NCI_Constellation.proj

请帮助。

3 个答案:

答案 0 :(得分:1)

问题是:该文件属于哪个软件包,并且具有哪些权限?

rpm -qf /path/to/NCI_Constellation.proj

将为您提供拥有该文件的软件包(假设NCI.rpm)。然后

rpm -qlv NCI.rpm | grep NCI_Constellation.proj

将为您提供NCI.rpm打包的此文件的所有者和权利。如果您是一个包装NCI.rpm;您应该在%files部分中输入以下内容:

%files
%attr(640,netcool,ncoadmin) /path/to/NCI_Constellation.proj

请确保您确实可以使用这些权限写入文件;首先测试...谁在运行脚本来更改此文件?作为哪个用户?然后以该用户身份手动运行它,以确保这些文件权限就足够了。

答案 1 :(得分:1)

我认为您有两种选择,

first:通过以下操作将netcool设置为根组: $ sudo usermod -a -G root netcool 使用此命令,即使更改了权限,用户也可以更改和修改文件。

second:通过更改/etc/passwd文件将netcool用户设置为第二个root用户。 为此,使用所需的每个文件编辑器打开文件,然后将UID和GID更改为0。如果执行此操作,则运行$ grep netcool /etc/passwd后应该会看到: netcool:x:0:0: {the rest may change for anybody}

答案 2 :(得分:0)

我们可以通过使用目录上的setgid位来防止文件组的更改。因此,如果将用户netcool添加到ncoadmin并授予ncoadmin写入权限,则可以编辑该文件。这是在目录上设置SetGid位的方法。

chmod g+s your_directory_containing_file(NCI_Constellation.proj)

有关目录上的setgid的更多信息:

setgid可用于目录,以确保目录内的所有文件均归所有者所有 由目录的组所有者。 setgid位显示在与x相同的位置 群组所有者的权限。 setgid位由s表示(意味着x也在那里) 或S(如果组所有者没有x)。如本例所示,即使root 不属于组proj55,由/ project55中的root创建的文件将属于 proj55,因为设置了setgid。

root@RHELv4u4:~# groupadd proj55
root@RHELv4u4:~# chown root:proj55 /project55/
root@RHELv4u4:~# chmod 2775 /project55/
root@RHELv4u4:~# touch /project55/fromroot.txt
root@RHELv4u4:~# ls -ld /project55/
drwxrwsr-x 2 root proj55 4096 Feb 7 17:45 /project55/
root@RHELv4u4:~# ls -l /project55/
total 4
-rw-r--r-- 1 root proj55 0 Feb 7 17:45 fromroot.txt