如何防止更改文件的所有权?我有一个文件,权限如下:
-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请帮帮忙。
发布于 2019-05-09 17:25:57
问题是:该文件属于哪个包,具有什么权限?
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顺便说一句,确保你真的可以用这些权限写文件;首先测试一下…谁在运行脚本来更改此文件?以哪个用户的身份?然后以该用户的身份手动运行它,以确保这些文件权限足够。
发布于 2019-05-09 17:35:44
在我看来你有两个选择,
首先:通过执行以下操作将netcool设置为根用户组:$ sudo usermod -a -G root netcool使用此命令,即使在权限更改后,您的用户仍能够更改和修改文件。
第二:通过更改/etc/passwd文件,将netcool用户设置为第二个根用户。为此,使用您想要的每个文件编辑器打开该文件,然后将UID和GID更改为0。这样做之后,如果您运行$ grep netcool /etc/passwd,您应该会看到:netcool:x:0:0: {the rest may change for anybody}。
发布于 2019-05-09 17:54:41
我们可以通过在目录上使用setgid位来防止文件组的更改。因此,如果您将用户netcool添加到ncoadmin并将写权限授予ncoadmin,那么您就可以编辑该文件。下面是如何在目录上设置SetGid位。
chmod g+s your_directory_containing_file(NCI_Constellation.proj)
有关目录上的 on的更多信息:
setgid可以在目录上使用,以确保目录中的所有文件都归该目录的组所有者所有。setgid位显示在与组所有者的x权限相同的位置。setgid位由s(意味着x也在那里)或S(当没有x表示组所有者时)表示。如本例所示,即使根用户不属于proj55组,因为设置了setgid,所以根用户在/project55中创建的文件将属于proj55。
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.txthttps://stackoverflow.com/questions/56055793
复制相似问题