การอ่านไฟล์เป็น sudo จาก Ruby on Rails
น่าแปลกที่ฉันไม่พบใครพยายามทำสิ่งนี้นั่นคือเหตุผลที่ฉันตั้งคำถามนี้
สิ่งนี้คือฉันมีไฟล์ที่ฉันเก็บข้อมูลบางอย่าง ฉันต้องการมีตัวเลือกในโครงการรางของฉันซึ่งคุณสามารถ "ส่งออก" วัตถุบางอย่างที่กำหนดไว้ในไฟล์นี้ได้
ไฟล์นี้เป็นของ 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
คำตอบ
วิธีง่ายๆในการแก้ปัญหาอย่างรวดเร็วคือเปลี่ยนเจ้าของไฟล์
sudo chown $USER myfile.json
หากคุณต้องการเข้าถึงไฟล์ฉันคิดว่าไม่ใช่ความคิดที่ดีที่จะให้แอปพลิเคชันของคุณเข้าถึง 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