Linux ทำไมฉันถึงเขียนไม่ได้ทั้งๆที่มีสิทธิ์กลุ่ม


108

ฉันต้องการสร้างไฟล์ในไดเร็กทอรีของกลุ่มพนักงานที่ฉันเป็นสมาชิกอยู่ ทำไมฉันถึงทำสิ่งนี้ไม่ได้

bmccann@bmccann-htpc:~$ ls -l /usr/local/lib/R/
total 4
drwxrwsr-x 2 root staff 4096 2010-07-31 16:21 site-library
bmccann@bmccann-htpc:~$ id -nG bmccann
bmccann adm dialout cdrom plugdev staff lpadmin admin sambashare
bmccann@bmccann-htpc:~$ touch /usr/local/lib/R/site-library/tmp
touch: cannot touch `/usr/local/lib/R/site-library/tmp': Permission denied

1
คุณมีสิทธิ์เขียนลงในไดเร็กทอรีไลบรารีไซต์ใน / usr / local / lib / R หรือไม่
Ted Hopp

1
คำสั่งแรกที่ฉันโพสต์แสดงว่ากลุ่มมีสิทธิ์ในการเขียนไม่ใช่หรือ
Ben McCann

3
มีsite-library/tmpไฟล์ / ไดเร็กทอรีอยู่แล้วหรือไม่?
Jeremiah Willcock

คำตอบ:


200

คุณออกจากระบบและกลับเข้าสู่ระบบหลังจากทำการเปลี่ยนแปลงกลุ่มหรือไม่ ดู:
คำตอบของ Super User ที่เกี่ยวข้องกับความล้มเหลวในการอนุญาตการสัมผัส


1
หากฉันเปิดหน้าต่างเทอร์มินัลใหม่นั่นไม่ควรถือเป็นกระบวนการใหม่ใช่หรือไม่ ฉันค่อนข้างแน่ใจว่าได้ลองทำแล้ว แต่ก็ไม่ได้ผลบังคับให้ฉันออกจากระบบ
Ben McCann

7
@ เบ็น: การเริ่มต้นกระบวนการใหม่จะสืบทอด uid / gids จากพาเรนต์ คุณต้องมีโปรแกรมที่ได้รับการยกเว้น (เช่นlogin, suฯลฯ ) เพื่อตั้งจริง UID gids /
ephemient

4
ถ้ามันไม่สะดวกที่จะออกจากระบบ / su your-user-nameเข้าสู่ระบบกลับมาในขณะที่โดยนัยข้างต้นคุณสามารถทำเช่นนี้ในสถานี: เชลล์ผลลัพธ์จะมีสิทธิ์กลุ่มที่อัปเดตของคุณ
TJ Crowder

2
ขอบคุณสำหรับสิ่งนี้! ฉันใช้เวลาประมาณ 15 นาทีในการดึงผมออกเพื่อพยายามหาสาเหตุว่าทำไมฉันถึงไม่มีสิทธิ์กลุ่มในโฟลเดอร์
Jeremy Spencer

2
ต้องรีสตาร์ทสำหรับฉันบน Ubuntu 16.04 x64 ไม่ใช่แค่ออกจากระบบและเข้าสู่ระบบอีกครั้ง
Kartikey Tanna

15

ทำไมผู้ใช้ Linux ไม่สามารถแก้ไขไฟล์ในกลุ่มที่เขาเป็นส่วนหนึ่งของ?

ฉันใช้ Ubuntu 12.04 และมีปัญหาเดียวกันกับที่ผู้ใช้ไม่สามารถเขียนไฟล์ที่เขาได้รับอนุญาตให้เข้าถึงกลุ่มได้ ตัวอย่างเช่น:

whoami                                        //I am user el
  el                                            

touch /foobar/test_file                       //make a new file

sudo chown root:www-data /foobar/test_file    //User=root  group=www-data

sudo chmod 474 /foobar/test_file              //owner and others get only read, 
                                              //group gets rwx


sudo groupadd www-data                        //create group called www-data    

groups                                        //take a look at the groups and see
 www-data                                     //www-data exists.

groups el                                     //see that el is part of www-data
  el : www-data                               

รีสตาร์ทเทอร์มินัลทันทีเพื่อให้แน่ใจว่าผู้ใช้และกลุ่มมีผล เข้าสู่ระบบด้วย el.

vi /foobar/test_file                          //try to edit the file.

สร้างคำเตือน:

Warning: W10: Warning: Changing a readonly file"

อะไร? ฉันทำทุกอย่างถูกต้องแล้วทำไมถึงไม่ได้ผล?

ตอบ:

ทำการรีบูตเครื่องคอมพิวเตอร์ทั้งหมด การหยุดเครื่องไม่เพียงพอที่จะแก้ไขปัญหาเหล่านี้

ฉันคิดว่าสิ่งที่เกิดขึ้นคือ apache2 ยังใช้กลุ่ม www-data ดังนั้นงานนี้จึงทำให้ผู้ใช้และกลุ่มไม่สามารถบังคับใช้ได้อย่างถูกต้อง คุณไม่เพียง แต่ต้องออกจากระบบ แต่คุณต้องหยุดและเริ่มบริการใหม่ ๆ ที่ใช้กลุ่มของคุณ หากรีบูตไม่ได้แสดงว่าคุณมีปัญหาใหญ่ขึ้น


1
“ ปัญหาที่ใหญ่กว่า” คืออะไร?
Ejaz

13

ฉันมีปัญหาเดียวกันตรวจสอบว่าโฟลเดอร์มีกฎ ACL เพิ่มเติมหรือไม่!

หากคุณเห็น + (เครื่องหมายบวก) เมื่อคุณแสดงรายการโฟลเดอร์แสดงว่ามีกฎการเข้าถึงพิเศษ ตัวอย่างเช่น:

[user_in_apache_group@web02 html]$ ls -l
total 16
drwxrwxr-x  16 apache apache 4096 Sep  4 13:46 ilias
drwxrwxr-x+ 15 apache apache 4096 Sep  4 13:46 ilias5

ดูการอนุญาต:

[user_in_apache_group@web02 html] getfacl ilias5
# file: ilias5
# owner: apache
# group: apache
user::rwx
user:user_in_apache_group:r-x
group::rwx
mask::rwx
other::r-x

นั่นหมายความว่าผู้ใช้ของฉัน (user_in_apache_group) ไม่มีสิทธิ์เขียนสำหรับโฟลเดอร์นั้น

วิธีแก้ปัญหาคือสิ่งที่ @techtonik กล่าวเพิ่มสิทธิ์การเขียนสำหรับผู้ใช้:

[user_in_apache_group@web02 html]$ sudo setfacl -m u:user_in_apache_group:rwx ./ilias5

ตรวจสอบการอนุญาตอีกครั้ง:

[user_in_apache_group@web02 html] getfacl ilias5
...
user:user_in_apache_group:rwx
...

หวังว่าจะช่วยได้ ;)


8

ใช้ Linux ACL (รายการควบคุมการเข้าถึง) - เป็นระบบการอนุญาตที่ละเอียดยิ่งขึ้น

setfacl -R -m 'group:staff:rwx' -m 'd:group:staff:rwx' /usr/local/lib/R/

สิ่งนี้ตั้งค่าทั้งสิทธิ์ที่ใช้งานสำหรับไดเรกทอรีและสิทธิ์เริ่มต้นสำหรับสิ่งที่สร้างขึ้นภายใน

การดำเนินการนี้ล้มเหลวโดยไม่ต้องลงชื่อเข้าใช้ใหม่หากคุณเพิ่งเพิ่มตัวเองเข้าในstaffกลุ่ม แต่คุณสามารถตั้งค่าการอนุญาตสำหรับเซสชันปัจจุบันสำหรับตัวคุณเองเท่านั้น


5

ฉันมีปัญหาเมื่อผู้ใช้ไม่สามารถเข้าถึง/foo/bar/bazไดเร็กทอรีแม้ว่าเขาจะมีสิทธิ์เนื่องจากเขาไม่มีสิทธิ์เข้าถึงbarไดเร็กทอรี


-2

ตรวจสอบว่าไดเร็กทอรีหลักของคุณมีสิทธิ์ก่อนที่คุณจะเพิ่มเนื้อหาลงในไฟล์นั้นหรือไม่

sudo chmod -R 777 /yourDir/file.log
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.