使用sudoers在Linux中将文件所有者从用户更改为root
我想通过修改 /etc/sudoers 文件,把一个文件的拥有者从 bangtest(用户)改成 root。
改的原因是:我用 Django 应用从 bangtest(用户)上传了一张图片到我的服务器,结果这个图片文件的权限是这样的:
ls -l /home/bangtest/alpha/media/products/image_2093.jpg
-rw-r--r-- 1 bangtest bangtest 28984 May 6 02:47
但是当我尝试通过 //myhost/media/products/image_2093.jpg 来访问这些文件时,却遇到了 404 错误。当我试着记录这个错误时,内容是这样的:
Caught race condition abuser. attacker: 0, victim: 502 open file owner: 502, open file: /home/bangtest/alpha/media/products/image_2093.jpg
后来我把文件的拥有者从 bangtest 改成了 root,这样我就能顺利访问图片了。
所以我想用 Python 脚本动态地改变文件的拥有者。
我尝试按照下面的方式修改 sudoers 文件,但还是遇到了这样的错误:
chown: changing ownership of `image.jpg': Operation not permitted
我的 sudoers 代码:
root ALL=(ALL) ALL
bangtest ALL=(ALL) /bin/chown root:bangtest /home/bangtest/alpha/*
有没有人知道为什么 sudoers 不起作用?
注意:操作系统是 Linux。
谢谢
2 个回答
setfacl -dm u::rwx,g::rwx,o::rwx /home/bangtest/alpha/media/products/
在这个文件夹里创建的所有文件,所有用户都有读、写和执行的权限。
编辑提示:更改chmod的权限是有风险的,但可以做到,编辑/etc/sudoers文件。
bangtest ALL=(ALL) NOPASSWD: /usr/bin/chmod
看起来你的问题是,你试图通过使用 //myhost 来访问你本地机器上的一个文件。这种方式在服务器上是行不通的,至少在我使用的 Ruby on Rails 框架中是这样。如果你要访问的是本地机器上的文件,可以用 //myhost/media/products/image_2093.jpg。如果你是想通过服务器来访问某个东西,那就试试 /myhost/media/products/image_2093.jpg。我不知道有什么好的帖子可以推荐给你,但我自己测试了一下。
我找到了一些有趣的信息,听起来像是证据。http://www.mail-archive.com/dev@httpd.apache.org/msg55666.html