如何防止更改文件所有权? 我有一个具有如下权限的文件:
-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
请帮助。
答案 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