ให้สิทธิ์การเขียนแก่ผู้ใช้หลายคนในโฟลเดอร์ใน Ubuntu


80

มีโฟลเดอร์ที่เป็นเจ้าของโดยผู้ใช้ tomcat6:

drwxr-xr-x 2 tomcat6 tomcat6 69632 2011-05-06 03:43 document

ฉันต้องการอนุญาตให้ผู้ใช้รายอื่นเขียนเอกสารในโฟลเดอร์เอกสาร ผู้ใช้สองคน (tomcat6 และ ruser) ไม่ได้อยู่ในกลุ่มเดียวกัน ฉันได้ลองใช้setfacl:

sudo setfacl -m  u:ruser:rwx document

แต่นี่ทำให้ฉันsetfacl: document: Operation not supportedผิดพลาด กรุณาช่วยฉัน

คำตอบ:


143

มีสองวิธีในการทำเช่นนี้: ตั้งค่าไดเรกทอรีเป็น "โลก" เขียนได้หรือสร้างกลุ่มใหม่สำหรับผู้ใช้สองคนและทำให้ไดเรกทอรีเขียนได้ในกลุ่มนั้น

เห็นได้ชัดว่าทำให้โลกเขียนได้เป็นสิ่งที่ไม่ดีดังนั้นตัวเลือกที่สองจึงเป็นที่นิยม

ผู้ใช้ใน Linux สามารถเป็นสมาชิกมากกว่าหนึ่งกลุ่ม ในกรณีนี้คุณต้องการสร้างกลุ่มใหม่ให้เรียกมันว่าtomandruser:

sudo groupadd tomandruser

ตอนนี้กลุ่มมีอยู่แล้วให้เพิ่มผู้ใช้สองคนลงในกลุ่ม:

sudo usermod -a -G tomandruser tomcat6
sudo usermod -a -G tomandruser ruser

ตอนนี้สิ่งที่เหลือคือการตั้งค่าการอนุญาตในไดเรกทอรี:

sudo chgrp -R tomandruser /path/to/the/directory
sudo chmod -R 770 /path/to/the/directory

ตอนนี้เฉพาะสมาชิกของกลุ่ม tomandruser เท่านั้นที่สามารถอ่านเขียนหรือดำเนินการอะไรก็ได้ในไดเรกทอรี หมายเหตุอาร์กิวเมนต์ -R ไปยังคำสั่ง chmod และ chgrp: สิ่งนี้บอกให้พวกเขาเรียกเก็บเงินคืนในทุกไดเรกทอรีย่อยของไดเรกทอรีเป้าหมายและแก้ไขทุกไฟล์และไดเรกทอรีที่พบ

คุณอาจต้องการเปลี่ยน 770 เป็นอย่างเช่น774ถ้าคุณต้องการให้ผู้อื่นสามารถอ่านไฟล์ได้775หากคุณต้องการให้คนอื่นอ่านและเรียกใช้ไฟล์ ฯลฯ การเปลี่ยนแปลงการมอบหมายกลุ่มจะไม่มีผลจนกว่าผู้ใช้จะออกจากระบบและย้อนกลับ ใน.

หากคุณยังต้องการ (คุณอาจจะทำ) ว่าไฟล์ใหม่ที่สร้างขึ้นภายในไดเรกทอรีโดยหนึ่งในผู้ใช้จะสามารถเขียนได้โดยอัตโนมัติโดยคนอื่น ๆ ในกลุ่มแล้วดูที่นี่


2
คุณอาจต้องการตั้งค่าการตั้งค่า set-group-ID สำหรับไดเรกทอรีเพื่อสร้างไฟล์และไดเรกทอรีย่อยใหม่โดยอัตโนมัติโดยกลุ่มที่เหมาะสม:sudo find /path/to/the/directory -type d -exec chmod 2770 '{}' \;
Marcello Nuccio

8
ฉันจะหลีกเลี่ยงการใช้ chmod 770, 775 หรืออะไรก็ตาม ที่ยุ่งกับสิทธิ์ของไฟล์ทั้งหมด แทนที่จะใช้สิ่งที่ต้องการchmod -R g+wเพิ่มสิทธิ์ในการเขียนโดยไม่รบกวนทุกอย่างอื่น
Christian Varga

2
หากผู้ใช้สร้างไฟล์ใหม่ที่นั่น (เช่น mysql โดยSELECT INTO OUTFILE) มันจะกำหนดสิทธิ์ให้กับกลุ่มหลัก ( mysqlในกรณีนี้) และไฟล์นั้นไม่สามารถเข้าถึงได้โดยผู้ใช้รายอื่น วิธีแก้ปัญหานี้?
Olexa

2
ถ้าคุณต้องการให้ผู้ใช้สามารถเขียนการเข้าถึงโฟลเดอร์โดยไม่เปลี่ยนความเป็นเจ้าของโฟลเดอร์เช่นคุณไม่ต้องการยุ่งกับสิทธิ์ของ apache ในโฟลเดอร์ public_html
codecowboy

2
หมายเหตุ: "การเปลี่ยนแปลงการมอบหมายกลุ่มจะไม่มีผลจนกว่าผู้ใช้จะออกจากระบบและกลับเข้ามาใหม่" ฉันพลาดไปแล้ว :)
Vladimir Vukanac

3

สคริปต์ตัวอย่างแสดงให้เห็นเป็นตัวอย่างเพื่อให้w (write)/ r (read) / x (execute)สิทธิ์ในการเส้นทางโฟลเดอร์ที่กำหนด/path/to/the/directoryสำหรับการและUSER1 USER2หากคุณต้องการที่จะให้สิทธิ์ในการเขียนเท่านั้นโปรดแทนที่ด้วยrwxw


#!/bin/bash

# Block others and people in the same group to do read/write/execute on give folder:    
sudo chmod 700 /path/to/the/directory 

#Give read/write/execute access to USER1 on give folder:
sudo setfacl -R -m user:USER1:rwx  /path/to/the/directory 

#Give read/write/execute access to USER2 on give folder:
sudo setfacl -R -m user:USER2:rwx  /path/to/the/directory 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.