คำสั่ง 'chmod g + s'


44

สวัสดีฉันต้องการเข้าใจบทบาทของchmod g+sคำสั่งใน Unix

ฉันอยากจะรู้ว่ามันทำอะไรในบริบทนี้:

cd /home/canard;
touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

ฉันเข้าใจบทบาทคำสั่งทั้งหมดยกเว้นchmod g+sและฉันต้องการทราบความแตกต่างระหว่างไฟล์unและdeuxผลลัพธ์จากชุดคำสั่งนี้

คำตอบ:


60
chmod g+s .;

คำสั่งนี้จะตั้งค่ารหัสกลุ่ม (setgid) .บนไดเรกทอรีปัจจุบันเขียนเป็น

ซึ่งหมายความว่าไฟล์ใหม่และไดเรกทอรีย่อยทั้งหมดที่สร้างขึ้นภายในไดเรกทอรีปัจจุบันสืบทอด ID กลุ่มของไดเรกทอรีแทนที่จะเป็น ID กลุ่มหลักของผู้ใช้ที่สร้างไฟล์ สิ่งนี้จะถูกส่งไปยังไดเรกทอรีย่อยใหม่ที่สร้างในไดเรกทอรีปัจจุบัน

g+s ส่งผลกระทบต่อ ID กลุ่มของไฟล์ แต่ไม่ส่งผลกระทบต่อ ID เจ้าของ

โปรดทราบว่าสิ่งนี้ใช้ได้กับไฟล์ที่สร้างขึ้นใหม่เท่านั้น ไฟล์ที่ ย้าย ( mv) ลงในไดเรกทอรีไม่ได้รับผลกระทบจากการตั้งค่า setgid ไฟล์ที่คัดลอกมาcp -pนั้นจะไม่ได้รับผลกระทบเช่นกัน

ตัวอย่าง

touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

ในกรณีนี้deuxจะเป็นของกลุ่มcanardแต่unจะเป็นของกลุ่มผู้ใช้ที่สร้างมันขึ้นมาไม่ว่าจะเป็นอะไรก็ตาม

หมายเหตุเล็กน้อยเกี่ยวกับการใช้เครื่องหมายอัฒภาคในคำสั่งเชลล์

แตกต่างจากcหรือperlคำสั่งเชลล์จะต้องตามด้วยเครื่องหมายอัฒภาคเท่านั้นหากมีคำสั่งเชลล์อื่นตามด้วยบรรทัดคำสั่งเดียวกัน ดังนั้นให้พิจารณาบรรทัดคำสั่งต่อไปนี้:

chgrp canard .; chmod g+s .;

อัฒภาคสุดท้ายไม่จำเป็นและสามารถลบออกได้:

chgrp canard .; chmod g+s .

เพิ่มเติมถ้าเราต้องวางคำสั่งสองคำในบรรทัดที่แยกกันอัฒภาคที่เหลืออยู่ไม่จำเป็น:

chgrp canard .
chmod g+s .

1
ไฟล์ที่ถูกคัดลอก (เช่นโดยcp) เป็นจริงที่สร้างขึ้นใหม่ หากพวกเขาไม่ได้รับอนุญาตจากกลุ่มโปรแกรมคัดลอกกำลังเล่นเกมเช่นการคัดลอกไปยังไฟล์ชั่วคราวจากนั้นย้ายไปยังไดเรกทอรีเป้าหมาย
Kaz

1
@Kaz จุดที่ดี ฉันอัปเดตคำตอบเพื่อชี้แจงว่าเป็นcp -pเพราะแทนที่การตั้งค่า setgid
John1024

แต่cp -pแทนที่การตั้งค่า setgid? ในทุกการดำเนินการ Unix เดียวอยู่? POSIX บอกว่ามันไม่ได้ระบุว่ามีความล้มเหลวในการคัดลอก ID ผู้ใช้หรือ ID กลุ่มภายใต้ผล cp -p ในข้อความวินิจฉัย! อย่างไรก็ตามจำเป็นต้องล้างบิต S_SUID และ S_SGID ตามลำดับในสถานการณ์นั้น (เช่นถ้าไฟล์เป็น setuid bob แต่ไม่สามารถคัดลอกความเป็นเจ้าของของ bob ได้เพื่อให้ไฟล์เป็นเจ้าของโดย janet อย่าทำให้ setuid เป็นเจ้าของ Janet.)
Kaz

" cp -pแทนที่การตั้งค่า setgid หรือไม่" ตามข้อมูลจำเพาะ POSIX นั่นคือสิ่งที่ควรทำ มันทำเช่นนั้นกับระบบ Unix ทั้งหมดที่ฉันใช้ คุณได้อ้างถึงส่วนหนึ่งของข้อมูลจำเพาะเกี่ยวกับสิ่งที่ต้องทำเพื่อปกป้องความปลอดภัยในกรณีที่ไม่สามารถทำซ้ำID กลุ่มได้ ฉันไม่เคยพบเจอสถานการณ์แบบ "ไม่สามารถ" ใช่ไหม?
John1024

7

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

Unix / Linux มีผู้ใช้และกลุ่มผู้ใช้ที่สามารถกำหนดให้เข้าถึงไฟล์ได้

ตัวเลือก g + s มีดังนี้:

g - สิทธิ์ที่ผู้ใช้รายอื่นในกลุ่มของไฟล์มีให้

s - ตั้งค่า ID ผู้ใช้หรือกลุ่มในการดำเนินการ

นี่คือตัวอย่างการใช้งาน:

chmod =rwx,g+s filename

(อนุญาตให้ทุกคนอ่านเขียนและเรียกใช้ไฟล์เฉพาะและเปิด set group-ID)

ในการตั้ง / แก้ไขการอนุญาตของไฟล์คุณต้องใช้โปรแกรม chmod แน่นอนเฉพาะเจ้าของไฟล์เท่านั้นที่สามารถใช้ chmod เพื่อแก้ไขการอนุญาตของไฟล์ chmod มีรูปแบบต่อไปนี้: ไฟล์โหมด chmod [options] ส่วน 'mode' จะระบุการอนุญาตใหม่สำหรับไฟล์ที่ตามด้วยอาร์กิวเมนต์ โหมดระบุสิทธิ์ของผู้ใช้ที่ควรเปลี่ยนและหลังจากนั้นควรเปลี่ยนประเภทการเข้าถึง สมมติว่าเป็นตัวอย่าง: chmod ax socktest.pl

ซึ่งหมายความว่าบิตการดำเนินการควรถูกล้าง (-) สำหรับผู้ใช้ทั้งหมด (เจ้าของกลุ่มและส่วนอื่น ๆ ของโลก) การอนุญาตเริ่มต้นด้วยตัวอักษรที่ระบุสิ่งที่ผู้ใช้ควรได้รับผลกระทบจากการเปลี่ยนแปลงซึ่งอาจเป็นสิ่งต่อไปนี้:

u the owner user
g the owner group
o others (neither u, nor g)
a all users

ตามด้วยคำสั่งการเปลี่ยนแปลงซึ่งประกอบด้วย + (set bit) หรือ - (clear bit) และตัวอักษรที่สอดคล้องกับ bit ที่ควรเปลี่ยน ลองดูตัวอย่าง:

$ ls -l socktest.pl 
-rwxr-xr-x   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod a-x socktest.pl 
$ ls -l socktest.pl 
-rw-r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod g+w socktest.pl 
$ ls -l socktest.pl 
-rw-rw-r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod ug+x socktest.pl 
$ ls -l socktest.pl 
-rwxrwxr--   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod ug-wx socktest.pl 
$ ls -l socktest.pl 
-r--r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

ตัวเลขแปลก ๆ ... คุณอาจพบบางอย่างเช่น chmod 755 somefile และแน่นอนว่าคุณจะสงสัยว่านี่คืออะไร สิ่งนี้คือคุณสามารถเปลี่ยนรูปแบบการอนุญาตทั้งหมดของไฟล์ในคราวเดียวโดยใช้หมายเลขหนึ่งเหมือนที่แสดงในตัวอย่างนี้ ทุกโหมดมีหมายเลขรหัสที่สอดคล้องกันและอย่างที่เราจะเห็นว่ามีวิธีที่ง่ายมากที่จะคิดออกว่าหมายเลขใดที่สอดคล้องกับโหมดใด ๆ ทุกหนึ่งในสามหลักของหมายเลขโหมดตรงกับหนึ่งในสามของสิทธิ์อนุญาตทั้งสาม (u, g และ o) บิตการอนุญาตทุกรายการใน triplet สอดคล้องกับค่า: 4 สำหรับ r, 2 สำหรับ w, 1 สำหรับ x หากบิตการอนุญาตคุณเพิ่มมูลค่านี้เป็นจำนวนของ Triplet การอนุญาต หากล้างแล้วคุณจะไม่เพิ่มอะไรเลย (บางท่านอาจสังเกตเห็นว่าในความเป็นจริง

แฝดสำหรับคุณ: rwx => 4 + 2 + 1 = 7

Triplet สำหรับ g: r-x => 4 + 0 + 1 = 5

Triplet สำหรับ o: r-x => 4 + 0 + 1 = 5

ซึ่งทำให้: 755

ดังนั้น 755 จึงเป็นคำย่อที่บอกว่า 'ฉันไม่รังเกียจถ้าคนอื่นอ่านหรือเรียกใช้ไฟล์นี้ แต่มีเพียงฉันเท่านั้นที่สามารถแก้ไขได้' และ 777 หมายถึง 'ทุกคนสามารถเข้าถึงไฟล์นี้ได้อย่างสมบูรณ์'

การอ้างอิงที่สมบูรณ์


0

ผลลัพธ์ของคำสั่ง ls จะขึ้นอยู่กับ umask

g + s จะตั้ง sgid เป็นไฟล์ ตรวจสอบที่นี่สำหรับข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับ SUID SGID

ดังนั้นถ้า umask ของคุณเป็น 022 ผลลัพธ์จะเป็นดังนี้:

-rw-r--r--    1 romeo    canard     0 Jan 31 20:58 deux
-rw-r-Sr--    1 romeo    UsersGrp   0 Jan 31 20:58 un

0

ใน Linux หนึ่งในตัวเลือกเมานต์เริ่มต้นสำหรับ ext? fs คือ 'nogrpid | sysvgroups' ดังนั้นสัมผัสแรกยกเลิกสร้างไฟล์ที่มีกลุ่ม id เท่ากับ fsgid ของกระบวนการสร้างที่ fsgid = egid

chmod g + s. ทำให้การสร้างไฟล์ / dir ที่ตามมาได้รับกลุ่ม id จากโฟลเดอร์หลักและหากสิ่งที่สร้างขึ้นเป็น dir ก็จะได้รับการตั้งค่า g + s เป็นผู้ปกครอง

ที่นี่สัมผัส deux สร้าง deux ด้วยกลุ่มเท็จ

ความหมายเปลี่ยนไปหากตัวเลือกการเมานท์คือ 'grpid | bsdgroups 'ในกรณีนั้นการสร้างไฟล์ / dir ใหม่จะสืบทอด ID กลุ่มจากโฟลเดอร์หลักแม้ว่าจะไม่มีการตั้งค่า g + s สำหรับผู้ปกครองเองก็ตาม

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