निर्देशिका मालिकों के रूप में कई समूहों की स्थापना


31

मेरे सर्वर पर मेरी निर्देशिका है /srv/svn

उदाहरण के लिए devFirmA, कई समूह स्वामित्व रखने के लिए इस निर्देशिका को सेट करना संभव है , devFirmBऔर devFirmC?

मुद्दा यह है, मैं subversionकई रिपॉजिटरी के बीच कई उपयोगकर्ताओं को नियंत्रित करना चाहता हूं, और मैं यह नहीं जानता कि मर्ज कैसे करना /srv/svnहै, रिपॉजिटरी की रूट डायरेक्टरी, परमिशन। उदाहरण के लिए, मेरे पास तीन फर्म हैं FirmA, FirmBऔर FirmC। अब, अंदर /srv/svnमैं तीन निर्देशिका, बना लिया है FirmA, FirmB, FirmCऔर उन्हें अंदर मैं प्रत्येक परियोजना के लिए भंडार बना लिया है और अब मैं नहीं जानता कि अनुमति योजना के बाद से सभी elementes अंदर स्थापित करने के लिए कैसे /srv/svnके स्वामित्व में हैं root:root, है, जो ठीक नहीं है या मैं कर रहा हूँ गलत?


1
क्या फर्म समूह एक-दूसरे की फाइलों तक पहुंचते हैं? या क्या वे मूल निर्देशिका को साझा करने के अलावा पूरी तरह से अलग हैं?
जेएम बेकर

@TechZilla फर्म समूह जरूरी एक-दूसरे की फाइलों तक पहुंच नहीं है, इसके लिए अलग होना चाहिए, केवल मेरे पास सभी निर्देशिकाओं तक पहुंच होनी चाहिए।
कर्नेलपनिक

ठीक है, मैंने सही उत्तर पोस्ट किया है, आपको इसके लिए एसीएल का उपयोग नहीं करना चाहिए। वे एक अंतिम उपाय विकल्प हैं, यह समस्या अभी भी बहुत आम है।
जेएम बेकर

जवाबों:


16

यह एक अत्यंत सामान्य समस्या है, अगर मैं इसे सही ढंग से समझता हूं, और मैं इसका लगातार सामना करता हूं। अगर मैं हर तुच्छ समूहीकरण समस्या के लिए ACL का उपयोग करता, तो मेरे पास बहुत सारी असहनीय प्रणालियाँ होतीं। जब आप इसे किसी अन्य तरीके से नहीं कर सकते, तो इस स्थिति के लिए नहीं कर सकते। यह वह विधि है जिसकी मैं बहुत दृढ़ता से अनुशंसा करता हूं।

सबसे पहले आपको अपने umask को 002 पर सेट करने की आवश्यकता है, यह ऐसा समूह है जो स्वयं को साझा कर सकता है। मैं आमतौर पर एक फ़ाइल बनाता हूं /etc/profile.d/firm.sh, और फिर ओमास्क के साथ एक परीक्षण कमांड जोड़ता हूं ।

[ $UID -gt 10000 ] && umask 002

आगे आपको निर्देशिकाओं को उनके संबंधित समूहों में सेट करने की आवश्यकता है,

chgrp -R FirmA /srv/svn/FirmA 
chgrp -R FirmB /srv/svn/FirmB
chgrp -R FirmC /srv/svn/FirmC

अंत में आपको SGID बिट ठीक से सेट करने की आवश्यकता है, इसलिए समूह हमेशा आपके द्वारा सेट किए गए पर रहेगा। यह एक लिखित फाइल को लेखक के GID पर सेट होने से रोकेगा।

find /srv/svn/FirmA -type d -print0 | xargs -0 chmod 2775
find /srv/svn/FirmB -type d -print0 | xargs -0 chmod 2775
find /srv/svn/FirmC -type d -print0 | xargs -0 chmod 2775

find /srv/svn/FirmA -type f -print0 | xargs -0 chmod 664
find /srv/svn/FirmB -type f -print0 | xargs -0 chmod 664
find /srv/svn/FirmC -type f -print0 | xargs -0 chmod 664

अब अंत में यदि आप निर्देशिका को अन्य उपयोगकर्ताओं द्वारा एक्सेस होने से रोकना चाहते हैं।

chmod 2770 /srv/svn/FirmA
chmod 2770 /srv/svn/FirmB
chmod 2770 /srv/svn/FirmC

2
चेतावनी: यह काम करना चाहिए लेकिन सभी फाइलों पर निष्पादन अनुमति बिट को हटा देता है। यह ठीक है यदि आपकी निर्देशिका ट्री में केवल दस्तावेज हैं। यदि इसमें निष्पादन योग्य फाइलें हैं, तो यह निष्पादन को रोक देगा, जो आपके सेटअप को बर्बाद कर सकता है।
स्टीफन गौरिचोन

1
यह भी एक अच्छा विचार हो सकता है, लेकिन इस सवाल का जवाब बिल्कुल नहीं है।
सीलिंग

यह वर्णित है कि केवल तीन फ़ोल्डरों का विभाजन होता है ताकि प्रत्येक फर्म के सदस्य केवल अपनी संबंधित फाइलों को संशोधित कर सकें - यह 'svn' को वह एक्सेस नहीं देता जिसकी उसे जरूरत है।
अमीर पी

यह हालांकि बहुत करीब है। क्या याद आ रही है आप सभी समूहों के लिए पहुँच प्रदान करते हैं। अपना लॉगिन मानते हुए इस चरण को जोड़ें svnadmin: sudo usermod -a -G FirmA,FirmB,FirmC svnadminयह svnadminइन सभी समूहों को जोड़ देगा । चूंकि इन सभी समूहों की फाइलों में 'ग्रुप राइट' सक्षम ( chmod 664ऐसा किया गया है), आप, प्लस फ़र्मएक्स, फ़र्मएक्स के स्वामित्व वाली फाइलों के एकमात्र लेखक होंगे।
अमीर पी

1
बेहतर - आप जो भी जोड़ना / घटाना चाहते हैं उसे जोड़ने / घटाने के लिए अनुमतियाँ बदलें - जैसे करते हैंfind /srv/svn/FirmA -type f -print0 | xargs -0 chmod ug+rw,o+r,o-wx
अमीर p

25

आपके पास स्वामी के रूप में केवल एक समूह हो सकता है ।

हालांकि एक्सेस कंट्रोल लिस्ट का उपयोग करके आप अन्य समूहों के लिए अनुमतियों को परिभाषित कर सकते हैं।

जाँच करें कि क्या आपके पास ACL कमांड जारी करने वाला है getfacl। यदि आपका सिस्टम ACL स्थापित नहीं है, तो कमांड लाइन टूल स्थापित करें जो कि aclपैकेज में हैं:sudo apt-get install acl

साथ getfaclआप एक निर्देशिका या अन्य फ़ाइल के एसीएल जानकारी पढ़ सकते हैं, और साथ setfaclआप एक फाइल करने के लिए समूह जोड़ सकते हैं।

उदाहरण के लिए:

setfacl -m g:devFirmB:rwx /srv/svn/  

समूह जोड़ता है devFirmBसाथ आर EAD, w संस्कार, ई एक्स निर्देशिका के लिए ecute अनुमतियाँ /srv/svn

यदि आप भी उस निर्देशिका में बनाई गई फ़ाइलों को कई समूहों के स्वामित्व में चाहते हैं, तो ACL को डिफ़ॉल्ट ACL के रूप में सेट करें। Xडिफ़ॉल्ट समूह प्रविष्टि में अर्थ है "निष्पादन की अनुमति यदि स्वामी (या कोई अन्य व्यक्ति) द्वारा निष्पादन योग्य"।

setfacl -m g:devFirmB:rwx /srv/svn/  
setfacl -d -m g:devFirmB:rwX /srv/svn/  

6

पारंपरिक यूनिक्स अनुमतियों के साथ कई लिनक्स समूहों के स्वामित्व वाली फ़ाइल होना संभव नहीं है। (हालांकि, यह एसीएल के साथ संभव है ।)

लेकिन आप निम्नलिखित वर्कअराउंड का उपयोग कर सकते हैं और एक नया समूह बना सकते हैं (जैसे कहा जाता है devFirms) जिसमें समूहों के सभी उपयोगकर्ता शामिल होंगे devFirmA, devFirmBऔर devFirmC
आप इसके साथ नए उपयोगकर्ता समूह बनाते हैं:

sudo addgroup NEWGROUPNAME

सबसे पहले, आपको -कमांड id-utilsप्राप्त करने के लिए स्थापित करना lidहोगा:

sudo apt-get install id-utils

तो फिर आप आसानी से के सभी उपयोगकर्ताओं को कॉपी करने के कोड की निम्न पंक्ति चला सकते हैं SOURCEGROUPकरने के लिए TARGETGROUP। निश्चित रूप से आपको उस प्रत्येक समूह के लिए एक बार कमांड चलाना होगा जिसे आप कॉपी करना चाहते हैं। वास्तविक समूह के नामों के साथ पूंजीकृत स्थान-धारकों को बदलना न भूलें।

for u in $(lid -g -n SOURCEGROUP); do sudo usermod -a -G TARGETGROUP $u; done

तो आपके मामले में आपको कमांड चलाना होगा (सभी लाइनें एक साथ):

sudo addgroup devFirms &&
for u in $(lid -g -n devFirmA); do sudo usermod -a -G devFirms $u; done &&
for u in $(lid -g -n devFirmB); do sudo usermod -a -G devFirms $u; done &&
for u in $(lid -g -n devFirmC); do sudo usermod -a -G devFirms $u; done

ध्यान दें कि ये आदेश केवल उन सभी उपयोगकर्ताओं को कॉपी करते हैं जो स्रोत समूहों के वर्तमान सदस्य हैं। बाद में जोड़े जाने वाले प्रत्येक उपयोगकर्ता को adduserकमांड के साथ अपने सामान्य समूह में मैन्युअल रूप से जोड़ना होगा । वास्तविक उपयोगकर्ता और समूह के नाम ( devFirms) के साथ एक बार फिर पूंजीकृत स्थान-धारकों को प्रतिस्थापित करें :

sudo adduser NEWUSER TARGETGROUP

जस्टिन एथियर को यूनिक्स और लिनक्स पर अपने जवाब के लिए धन्यवाद। ईएसई: एक समूह के सभी उपयोगकर्ताओं को दूसरे समूह में जोड़ें?


@ क्या आपको लगता है कि आपकी योजना प्रश्न के अपडेट के रूप में कई उपयोगकर्ताओं के साथ सबवर्सन सर्वर के कई रिपॉजिटरी के लिए काम करेगी?
कर्नेलपनिक 16

2

नहीं, यह संभव नहीं है।

प्रत्येक फ़ाइल (और इसलिए निर्देशिकाएं) में केवल एक उपयोगकर्ता और एक समूह हो सकता है।


6
समान या समान परिणाम प्राप्त करने के लिए एक वैकल्पिक दृष्टिकोण प्रदान करना अच्छा होगा।
बाइट कमांडर

2

कई समूहों या उपयोगकर्ताओं को अलग-अलग अधिकार प्रदान करने के लिए निम्नलिखित आदेशों का उपयोग करें (RHEL 6 और 7 पर परीक्षण):

समूह का नया स्वामी बनाने के लिए:

setfacl -m g:<group_name>:<rights you want to give eg.rwx> -R <directory_name>

वर्तमान एसीएल सेटिंग्स की जाँच करने के लिए:

getfacl <directory_name>

परीक्षण किया गया, उबंटू 16.04.3 पर भी काम करता है
दिमित्री
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.