การอ่านไฟล์เป็น sudo จาก Ruby on Rails

Aug 19 2020

น่าแปลกที่ฉันไม่พบใครพยายามทำสิ่งนี้นั่นคือเหตุผลที่ฉันตั้งคำถามนี้

สิ่งนี้คือฉันมีไฟล์ที่ฉันเก็บข้อมูลบางอย่าง ฉันต้องการมีตัวเลือกในโครงการรางของฉันซึ่งคุณสามารถ "ส่งออก" วัตถุบางอย่างที่กำหนดไว้ในไฟล์นี้ได้

ไฟล์นี้เป็นของ root ดังนั้นถ้าฉันพยายามอ่านด้วย File.read ("myfile.json") มันล้มเหลวด้วยข้อผิดพลาดนี้:

#<Errno::EACCES: Permission denied @ rb_sysopen - /opt/rb/etc/cep/state.json>

มีวิธีที่ฉันสามารถอ่านเป็นรูทได้หรือไม่? บางทีวิธีแก้คือเรียกใช้ "sudo cat myfile.json" เป็นคำสั่งจาก Ruby และฉีดผลลัพธ์ลงในตัวแปร?

เป้าหมายของฉันคือวางเนื้อหาของไฟล์นี้ไว้ในไฟล์อื่นที่ผู้ใช้จะดาวน์โหลดดังนั้นในภายหลังเขาจึงสามารถอัปโหลดไฟล์นี้และมีวัตถุทั้งหมดจากก่อนหน้านี้ เป็นเรื่องแปลกที่ไม่เห็นคนพยายามทำสิ่งนี้มากขึ้นดังนั้นฉันจึงไม่รู้ว่าฉันอาจจะถามอะไรโง่ ๆ ฉันไม่พบข้อมูลใด ๆ ใน Google เกี่ยวกับเรื่องนี้อาจเป็นไปไม่ได้ที่จะเปิดไฟล์เป็น sudo ด้วย File.open

คำตอบ

1 ViníciusAlonso Aug 19 2020 at 20:23

วิธีง่ายๆในการแก้ปัญหาอย่างรวดเร็วคือเปลี่ยนเจ้าของไฟล์

sudo chown $USER myfile.json

1 Ebordon Aug 19 2020 at 20:27

หากคุณต้องการเข้าถึงไฟล์ฉันคิดว่าไม่ใช่ความคิดที่ดีที่จะให้แอปพลิเคชันของคุณเข้าถึง sudo อาจเป็นอันตรายได้

คุณอาจเปลี่ยนสิทธิ์ในไฟล์แทนโดยเปลี่ยนเจ้าของ / กลุ่มสำหรับไฟล์

ที่นี่คุณสามารถหาวิธีการที่จะได้รับผู้ใช้เรียกใช้โปรแกรมประยุกต์

คำสั่งนี้จะเปลี่ยนเจ้าของไฟล์

sudo chown <my_user> /opt/rb/etc/cep/state.json

อีกทางเลือกหนึ่งคือการสร้างกลุ่มกับเจ้าของปัจจุบันและผู้ใช้รางและตั้งกลุ่มนั้นเป็นเจ้าของ:

sudo groupadd mynewgroup
sudo usermod -a -G mynewgroup <my_user>
sudo usermod -a -G mynewgroup <current_user>
sudo chgrp mynewgroup /opt/rb/etc/cep/state.json