ผู้ใช้ไม่สามารถแตะ -t


10

เมื่อ SCP กำลังเข้าสู่เซิร์ฟเวอร์ Fedora ของฉันผู้ใช้จะพบข้อผิดพลาดเกี่ยวกับการไม่สามารถแก้ไขการประทับเวลาของไฟล์ ("กำหนดเวลา: ไม่อนุญาตให้ใช้งาน") ผู้ใช้ไม่ใช่เจ้าของไฟล์ แต่เราไม่สามารถchownไฟล์ให้กับผู้ใช้รายนี้ด้วยเหตุผลด้านความปลอดภัย ผู้ใช้สามารถทำได้sudoแต่เนื่องจากสิ่งนี้เกิดขึ้นผ่านไคลเอนต์ SCP / FTP จึงไม่มีทางทำเช่นนั้น และในที่สุดเราไม่ต้องการให้สิทธิ์การเข้าถึงรูทของผู้ใช้เพียงเพื่อให้เขาใช้การซิงโครไนซ์อย่าง rsync หรือ WinSCP ที่จำเป็นต้องตั้งค่าการประทับเวลา

ผู้ใช้เป็นส่วนหนึ่งของกลุ่มที่มีrwสิทธิ์แบบเต็มในไฟล์และ dirs ที่เกี่ยวข้องทั้งหมด มีความคิดเห็นเกี่ยวกับวิธีการให้สิทธิ์ผู้ใช้ในtouch -tไฟล์เฉพาะเหล่านี้โดยไม่ต้องส่งchownให้เขาหรือไม่?

ข้อมูลเพิ่มเติมทั้งหมดนี้เกี่ยวข้องกับการเปิดใช้งานการพัฒนา PHP ในสถานการณ์ผู้พัฒนาเดี่ยว (เช่น: ไม่มี SCM) ฉันกำลังพยายามทำงานกับ Eclipse หรือ NetBeans เพื่อทำงานบนสำเนาของไซต์ PHP-based (WordPress) ในขณะที่อนุญาตให้ผู้ใช้ "ทันที" ดูตัวอย่างการเปลี่ยนแปลงของเขาบนเซิร์ฟเวอร์การพัฒนา ผู้ใช้จะทำงานจากระยะไกล จนถึงตอนนี้ความพยายามในการซิงโครไนซ์อัตโนมัติทั้งหมดล้มเหลว - แม้จะใช้ WinSCP ในโหมด "watch folder" ซึ่งจะตรวจสอบโฟลเดอร์ในเครื่องและพยายามอัปโหลดการเปลี่ยนแปลงใด ๆ จนถึงข้อผิดพลาดของไดเรกทอรีระยะไกล .

ผู้ใช้มีสิทธิ์เข้าถึง sudo แต่ฉันได้รับแจ้งว่าไม่ใช่ความคิดที่ดีที่จะทำงานภายใต้ 'root' ดังนั้นฉันจึงไม่เต็มใจที่จะเข้าสู่ระบบเพื่อทำงานนี้ นอกจากนี้ก็ไม่จำเป็นที่จะต้อง ฉันต้องการให้ผู้อื่นที่ไม่ใช่ผู้ใช้ระดับสูงสามารถทำสิ่งเดียวกันได้โดยใช้ข้อมูลบัญชีสร้างการเชื่อมต่อ FTP และสามารถทำงานจากระยะไกลผ่านการซิงค์ ดังนั้นโซลูชันต้องทำงานให้กับผู้ที่ไม่มีการเข้าถึงรูท

สิ่งที่ทำให้ฉันสะดุดคือความยากลำบากที่ฉันมี ซอฟต์แวร์เหล่านี้ทั้งหมด (NetBeans, Eclipse, WinSCP) ได้รับการออกแบบมาเพื่ออนุญาตการซิงโครไนซ์และพวกเขาทั้งหมดพยายามเขียนการประทับเวลา ดังนั้นจะต้องเป็นไปได้ WinSCP มีตัวเลือกให้ปิด "set timestamp" แต่ตัวเลือกนี้จะไม่สามารถใช้งานได้ (เสมอ "เปิด") เมื่อคุณเลือกโฟลเดอร์มอนิเตอร์ / ซิงโครไนซ์ ดังนั้นจึงได้เป็นสิ่งที่เป็นมาตรฐานเป็นธรรม

ระบุว่าฉันเป็นคนงี่เง่าที่สมบูรณ์เมื่อพูดถึง Linux และฉันเป็น dev "ผู้ดูแลเซิร์ฟเวอร์" ฉันสามารถสันนิษฐานได้ว่ามันเป็นเรื่องงี่เง่าที่ฉันกำลังทำอยู่

สรุปโดยย่อฉันต้องการให้ผู้ใช้ใด ๆ ที่มีกลุ่ม r / w เข้าถึงไดเรกทอรีเพื่อให้สามารถเปลี่ยนการประทับเวลาของไฟล์ในไดเรกทอรีใน SCP นั้น


1
ระบบไฟล์ของคุณติดตั้งอยู่กับสิ่งที่ตลกหรือไม่? คุณใช้ ACL หรือไม่ โดยปกติจะเป็นไปได้ด้วยการเป็นสมาชิกกลุ่ม
คาเลบ

5
โดยทั่วไประบบของคุณกำลังบอกคุณว่า "คุณไม่สามารถแตะ -t [เขา]"
boehj

@Caleb: ไม่คุณสามารถตั้งค่าวันที่ปัจจุบันได้เว้นแต่คุณจะเป็นเจ้าของ @ ทอม: เป็นสิ่งสำคัญไหมที่ต้องเคารพวันที่? คุณสามารถขยายความต้องการได้เล็กน้อย: หากผู้ใช้สามารถเขียนลงไฟล์ได้ทำไมมันถึงมีความสำคัญถ้าเขาอาจเป็นเจ้าของมัน? โดยปกติในสถานการณ์เหล่านี้ใครก็ตามที่เขียนไฟล์ล่าสุดจะเป็นเจ้าของไฟล์
Gilles 'หยุดความชั่วร้าย' ใน

@ ทอม: มีความขัดแย้งที่ชัดเจนระหว่าง“ เราไม่ต้องการให้สิทธิ์การเข้าถึงรูทของผู้ใช้รายนี้” และ“ ผู้ใช้สามารถ sudo” คุณช่วยอธิบายส่วนนี้ให้ดีขึ้นได้ไหม? เกี่ยวกับการใช้rootกลุ่ม: rootกลุ่มไม่มีสิทธิ์พิเศษเฉพาะrootผู้ใช้เท่านั้น
Gilles 'หยุดความชั่วร้าย'

คำตอบ:


10

ทำไมมันไม่ทำงาน

เมื่อคุณพยายามเปลี่ยนเวลาแก้ไขของไฟล์ด้วยtouchหรือโดยทั่วไปกับการเรียกระบบพื้นฐานutimeมีสองกรณี

  • คุณกำลังพยายามตั้งเวลาแก้ไขไฟล์เป็นเวลาที่กำหนด สิ่งนี้ต้องการให้คุณเป็นเจ้าของไฟล์ (เทคนิคการพูด ID ผู้ใช้ที่มีประสิทธิภาพของกระบวนการจะต้องเป็นเจ้าของไฟล์²)
  • คุณกำลังพยายามตั้งเวลาแก้ไขไฟล์เป็นเวลาปัจจุบัน มันจะทำงานถ้าหากคุณมีสิทธิ์ที่จะเขียนลงไฟล์ เหตุผลสำหรับข้อยกเว้นนี้คือคุณสามารถได้รับผลกระทบเดียวกันโดยการเขียนทับไบต์ที่มีอยู่ของไฟล์ด้วยค่าเดียวกัน¹

ทำไมสิ่งนี้โดยทั่วไปไม่สำคัญ

  • เมื่อคุณคัดลอกไฟล์ด้วย ftp, scp, rsync ฯลฯ การคัดลอกจะสร้างไฟล์ใหม่ที่เป็นของใครก็ตามที่ทำสำเนา ดังนั้นเครื่องถ่ายเอกสารจึงได้รับอนุญาตให้กำหนดเวลาของไฟล์
  • ด้วย rsync คุณจะไม่สามารถกำหนดเวลาของไดเรกทอรีที่มีอยู่: พวกเขาจะถูกตั้งค่าเป็นเวลาที่มีการซิงโครไนซ์ไฟล์ครั้งล่าสุด ในกรณีส่วนใหญ่สิ่งนี้ไม่สำคัญ คุณสามารถบอก rsync ไม่ให้รบกวนเวลาไดเรกทอรีโดยผ่าน--omit-dir-times( -O)
  • ด้วยระบบควบคุมเวอร์ชันวันที่แก้ไขจะถูกเก็บไว้ในไฟล์ ข้อมูลเมตาของไฟล์ส่วนใหญ่ไม่เกี่ยวข้อง

โซลูชั่น

ทั้งหมดนี้เกี่ยวข้องกับการเปิดใช้งานการพัฒนา PHP ในสถานการณ์ผู้พัฒนาเดี่ยว (เช่น: ไม่มี SCM)

ตกลงหยุดตรงนั้น เพียงเพราะมีผู้พัฒนารายเดียวไม่ได้หมายความว่าคุณไม่ควรใช้ SCM คุณควรใช้ SCM ให้นักพัฒนาเช็คอินไฟล์และให้วิธีกดปุ่ม“ นำไปใช้” เพื่อตรวจสอบไฟล์จาก SCM ไปยังไดเรกทอรีสด

ไม่มีเหตุผลทางเทคนิคอย่างแน่นอนว่าทำไมคุณไม่ควรใช้ SCM แต่อาจมีเหตุผลของมนุษย์ ถ้าคนที่ทำงานกับไฟล์เหล่านี้มีสไตล์เป็น "ผู้พัฒนา" เขาควรใช้ SCM แต่ถ้านี่ไม่ใช่บุคคลที่มีความรู้ด้านเทคนิคในการผลักดันเอกสาร SCM อาจซับซ้อนเกินไป ดังนั้นให้ทำการพุชไฟล์ผ่าน FTP หรือ SSH มีสามวิธีนี้สามารถทำงานได้

  • คุณต้องการซิงโครไนซ์ครั้งหรือไม่ ตามที่ระบุไว้ข้างต้นrsyncมีตัวเลือกให้ไม่ซิงโครไนซ์ครั้ง Scp ไม่ได้นอกจากคุณจะบอกให้ ฉันไม่รู้จัก WinSCP แต่ก็อาจทำได้เช่นกัน
  • ทำสิ่งที่คุณทำต่อไปเพียงเพิกเฉยต่อข้อความเกี่ยวกับเวลา ไฟล์ยังคงถูกคัดลอก นี่ไม่ใช่ตัวเลือกที่ดีเนื่องจากการละเลยข้อผิดพลาดนั้นมีความเสี่ยงเสมอ แต่เป็นไปได้ในทางเทคนิค
  • หากคุณต้องการความยืดหยุ่นในการเติมไฟล์ที่apacheผู้ใช้เป็นเจ้าของวิธีการปกติจะช่วยให้ผู้ใช้สามารถเข้าถึง SSH apacheได้ ง่ายวิธีการที่จะมีผู้ใช้สร้างคีย์ส่วนตัว SSH ~apache/.ssh/authorized_keysและเพิ่มคีย์สาธารณะที่สอดคล้องกับ ซึ่งหมายความว่าผู้ใช้จะสามารถเรียกใช้คำสั่งโดยพลการในฐานะapacheผู้ใช้ เนื่องจากคุณโอเคที่จะให้สิทธิ์แก่ผู้ใช้ sudo ต่อไปมันไม่สำคัญเลยในกรณีของคุณ เป็นไปได้ แต่ไม่ใช่เรื่องง่ายที่จะวางข้อ จำกัด เพิ่มเติม (คุณต้องการรายการฐานข้อมูลผู้ใช้แยกต่างหากด้วยชื่อที่แตกต่างกัน ID ผู้ใช้เดียวกันเชลล์ จำกัด และคุก chroot รายละเอียดของคำถามแยกต่างหาก บนเว็บไซต์นี้หรือบนServer Fault )

¹ หรือสำหรับไฟล์ว่างให้เขียนไบต์แล้วตัดทอน
² นอกเหนือจากภาวะแทรกซ้อนเพิ่มเติม แต่ไม่มีสิ่งใดที่ฉันรู้ว่าใช้กับที่นี่


ขอบคุณ Gilles สำหรับคำอธิบายที่น่าสนใจ ฉันไม่แน่ใจว่าฉันจะมีความชัดเจนมากขึ้นเกี่ยวกับกรณีการใช้งานอย่างไร NetBeans ยังคงโยนข้อผิดพลาด "ไม่สามารถตัดการเชื่อมต่อ" เมื่อใดก็ตามที่ฉันซิงค์ (แม้ว่าไฟล์จะถูกถ่ายโอนอย่างถูกต้องและตรวจสอบบนเซิร์ฟเวอร์); WinSCP พ่นเวลาที่กำหนด: ข้อผิดพลาดที่ไม่อนุญาตให้ดำเนินการ เมื่อฉันยกเลิกไฟล์ฉันจะได้รับคำเตือนว่าไม่สามารถตั้งค่าการประทับเวลาเป็นเวลาในอนาคตได้ นอกเหนือจากนั้นฉันไม่รู้ว่าปัญหาอยู่ตรงไหน ฉันเพียงต้องการที่จะสามารถซิงค์ท้องถิ่นกับ dir ระยะไกล ผ่าน SCP / FTP และดูเหมือนว่าปัญหาจะมีการประทับเวลา สิ่งนี้ช่วยได้ไหม? อาจจะไม่.
Tom Auger

@Tom: ฉันยังไม่เข้าใจว่าทำไมคุณไม่สามารถให้ผู้ใช้เป็นเจ้าของไฟล์ได้
Gilles 'หยุดความชั่วร้าย'

ไฟล์บางไฟล์จำเป็นต้องเป็นเจ้าของโดย Apache (ตัวอย่างเช่นไดเรกทอรีอัพโหลด) ดังนั้นฉันจึงไม่สามารถเปลี่ยนเจ้าของได้เพราะมีใครบางคนกำลังทำงานกับไฟล์บางไฟล์ในไดเรกทอรี สิ่งที่คุณพูดไม่สมเหตุสมผล - เมื่อฉันเขียนทับไฟล์โดยใช้ FTP เจ้าของไม่จำเป็นต้องเปลี่ยนแปลง ฉันไม่เห็นความจำเป็นในการแก้ไขพฤติกรรมนี้
Tom Auger

@Tom: เจ้าของไม่เปลี่ยนแปลงเนื่องจากเป็นไฟล์ที่มีอยู่ ฉันไม่เข้าใจว่าทำไมคุณไม่ให้ผู้ใช้อัปโหลดไฟล์เป็นapache- จากนั้นพวกเขาจะสามารถกำหนดเวลา ดูคำตอบที่แก้ไขแล้วของฉันสำหรับคำตอบที่เหมาะสมและคำตอบที่ไม่ดีสองข้อ
Gilles 'หยุดความชั่วร้าย'

ขอบคุณที่เกาะติดกับคำถามนี้ Gilles การใช้ SVN หรือตัวแปรบางตัวเป็นสิ่งที่ไม่ดีจากมุมมองการพัฒนา ทุกคนที่ทำการพัฒนาเว็บจากระยะไกลสามารถบอกคุณได้ว่ากระบวนการนี้มักจะเพิ่มขึ้นเล็กน้อยโดยเฉพาะเมื่อจัดแต่งทรงผมด้วยสายตาคุณจึงต้องทำทุก ๆ 30-60 วินาที หากคุณต้องออกจาก IDE ของคุณอย่างต่อเนื่องเรียกใช้คอมมิชชันแล้วดูตัวอย่างเบราว์เซอร์ของคุณคุณกำลังเพิ่มค่าใช้จ่ายจำนวนมากให้กับกระบวนการที่ใช้งานง่าย SVN เหมาะสมในบริบทเมื่อมี devs หลายตัวกำลังทำงานในส่วนเดียวกันของไซต์ มันแตกต่างจากการเขียนโปรแกรม
Tom Auger

2

คุณสามารถตั้งค่า rsync ให้ใช้ sudo บนรีโมทปลายทางดังนี้:

rsync -ave ssh --rsync-path="sudo rsync" /source/ user@host:/dest/

กฎ sudo จะเป็นอย่างไร เพียงแค่ให้ rsync ช่วยให้ผู้ใช้สามารถเขียนทับไฟล์โดยพลการ มันค่อนข้างยากที่จะได้รับข้อ จำกัด การโต้แย้งและที่นี่ฉันคิดว่าคุณต้องใส่ข้อ จำกัด ในการป้อนข้อมูลของ rsync ซึ่งเป็นไปได้ในทางเทคนิคด้วยสคริปต์ตัวห่อ แต่ไม่ง่าย
Gilles 'หยุดความชั่วร้าย'

คุณพูดถูกการอนุญาตsudo rsyncยากมาก ฉันแนะนำเพียงเพราะ OP กล่าวว่าผู้ใช้มีสิทธิ์เข้าถึง sudo แล้ว
คาเลบ

ขอบคุณ - มันน่าสนใจแม้ว่านักพัฒนาจะอยู่ในกล่อง Windows ดังนั้นฉันไม่แน่ใจว่า rsync เป็นวิธีที่ดีที่สุด อีกครั้งตามที่ฉันกล่าวถึงในการแก้ไขการโพสต์ของฉันฉันต้องการโซลูชันนี้ทำงานสำหรับผู้ใช้เฉลี่ยใด ๆ ไม่ใช่ผู้ใช้ที่มีสิทธิ์บางคนเกินกว่าใครบางคนที่อยู่ในกลุ่มที่เป็นเจ้าของไดเรกทอรีนั้น
Tom Auger

ฉันคิดว่าสิ่งต่อไปที่ควรพิจารณาคือตั้งค่า ACL (Access Control Lists) แต่ฉันมีประสบการณ์น้อยในพื้นที่นี้ดังนั้นบางทีกูรูบางคนสามารถเพิ่มคำตอบและอธิบายได้ว่าควรทำอย่างไร
Caleb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.