如何允许服务器上的任何用户编辑特定文件?

时间:2015-07-04 10:50:36

标签: linux perl permissions sudo

我创建了这段代码,允许用户更改特定文件中的端口,

#Change Port
IRSSIPORT1=`head -n 1 /etc/ports.txt | tail -n 1`
sudo perl -pi -e "s/^$IRSSIPORT1.*\n$//g" /etc/ports.txt
sudo perl -pi -e "s/web_port = 8081/web_port = $IRSSIPORT1/g" .sickbread/config.ini
echo "sickbread Port: $IRSSIPORT1" | sudo tee -a $HOME/private/SBinfo.txt

这段代码的作用是从文件中获取一个数字,然后将其放入配置文件中,在该文件中需要更改并从初始文件中删除该数字,但它也需要读取权限作为写访问,

我在我的知识中尝试了一切,让它在没有sudo的情况下工作,但我没有做到。

有什么建议吗?

我收到此错误 -

  

无法删除/etc/ports.txt:权限被拒绝,跳过文件。

2 个答案:

答案 0 :(得分:0)

虽然似乎问题更多的是关于系统管理而不是编程,但它实际上有点关于perl,所以它可能是一个很好的地方。

执行chmod 666 /etc/ports.txt授予所有用户对此特定文件的读写权限(当然,您不需要输入777,因为它不是可执行文件或脚本)。所以任何人都可以打开这个文件进行写作并将任何内容放入其中。

但是当你执行perl -pi -e ... /etc/ports.txt时,你不会只写入该文件。相反,perl将要删除然后重新创建此文件,如strace输出中所示:

# strace perl -pi -e 's/a/b/' /etc/ports.txt 2>&1 | grep /etc/ports.txt
...
open("/etc/ports.txt", O_RDONLY)        = 3
unlink("/etc/ports.txt")                = 0
open("/etc/ports.txt", O_WRONLY|O_CREAT|O_EXCL, 0600) = 4

要删除文件,它需要具有写入权限,而不是文件本身,而是对/etc目录,当然,您无法向任何用户提供。

所以我想你不需要尝试使用就地编辑,因为它总是与删除或重命名文件有关,而是获取文件的内容,进行必要的更改然后写它回到同一个文件。

答案 1 :(得分:0)

您无法对666内的/etc文件进行现场编辑,因为-i开关生成新文件并删除目录中的旧文件。

由于用户没有足够的权限来添加/删除/etc中的文件(这也不是一个好主意),您必须立即读取所有文件内容,进行更改并回写到同一个文件。使用临时文件也是一种可行的解决方案。

相关问题