النقاط الرئيسية
- بإمكانك إدراج حسابات المستخدمين على Linux باستخدام أوامر مثل “cat /etc/passwd” أو “getent passwd”.
- إن الحسابات غير الضرورية وغير المستخدمة تضيف فوضى إلى نظامك، وقد تشكل أيضًا خطرًا أمنيًا، اعتمادًا على حالتك.
Linux هو نظام تشغيل متعدد المستخدمين، لذا فإن إنشاء العديد من حسابات المستخدمين أمر سهل. بمرور الوقت، من السهل أن تفقد مسار الحسابات المطلوبة. تساعدك قائمة حسابات المستخدمين في إدارتها.
عادةً ما تؤدي الحسابات الإضافية إلى إضافة المزيد من الفوضى، ولكنها قد تؤدي أيضًا إلى فتح ثغرات أمنية.
غالبًا ما تجلب التطورات في التكنولوجيا مشكلاتها الجديدة الخاصة بها. بمجرد أن أصبحت أجهزة الكمبيوتر قادرة على دعم مستخدمين متعددين، أصبحت الحاجة إلى عزل عمل كل شخص وعزله عن الآخرين واضحة. أدى هذا إلى ظهور مفهوم حسابات المستخدم. كل مستخدم لديه معرف باسمه وكلمة مرور. هذه هي بيانات الاعتماد التي تسمح له بتسجيل الدخول إلى حسابه. يتم الاحتفاظ بملفاته في منطقة خاصة بكل مستخدم.
في نظام مزدحم، من السهل أن تفقد التركيز على الحسابات التي أنشأتها، وتلك التي لم تعد هناك حاجة إليها. ومن وجهة نظر أمنية، من الممارسات السيئة الاحتفاظ بحسابات المستخدمين التي لم تعد بحاجة إلى تكوينها والوصول إليها على جهاز الكمبيوتر الخاص بك. يجب عليك إزالة هؤلاء المستخدمين.
حتى لو لم يكن لديك أشخاص آخرون يستخدمون جهاز الكمبيوتر الخاص بك، فقد تكون قمت بإنشاء بعض الحسابات فقط لتعلم كيفية القيام بذلك، أو لتعلم وممارسة عمليات الإدارة.
تتمثل الخطوة الأولى في سرد حسابات المستخدمين التي تم تكوينها على جهاز الكمبيوتر الخاص بك. يتيح لك ذلك مراجعتها واتخاذ قرار بشأن الحسابات التي يمكن حذفها. هناك عدة طرق لسرد المستخدمين. بغض النظر عن التوزيع الذي تستخدمه، يجب أن تعمل هذه الأساليب معك دون الحاجة إلى تثبيت أي تطبيقات أو أدوات مساعدة.
قائمة المستخدمين باستخدام الأمر cat
يتم الاحتفاظ بقائمة بالمستخدمين الذين تم تكوينهم، بالإضافة إلى معلومات حول كل مستخدم، في ملف “/etc/passwd”. وهو عبارة عن ملف نصي يمكن للمستخدمين العاديين إدراجه في نافذة المحطة الطرفية. لست بحاجة إلى استخدام sudo للاطلاع على ملف “/etc/passwd”.
يمكننا استخدام cat أمر لإرسال محتويات ملف “/etc/passwd” إلى نافذة المحطة الطرفية. سيؤدي هذا إلى إدراج محتويات الملف بالكامل. وهذا يعني أنك سترى أيضًا الإدخالات الخاصة بحسابات المستخدم المملوكة للعمليات والنظام، وليس الأشخاص.
cat /etc/passwd
هناك سطر من المعلومات الكثيفة يتم الإبلاغ عنه لكل حساب مستخدم.
تحتوي معلومات حساب المستخدم المسمى “dave” على هذه القطع من المعلومات، مع النقطتين “:” بينهم .
- ديف:اسم حساب المستخدم. عادةً ما يكون اسم الشخص الذي يمتلك الحساب.
- س:في وقت ما، كان هذا الملف يحتوي على كلمة مرور الحساب. أما الآن، يتم تخزين كلمات المرور في ملف “/etc/shadow”. ويعني “x” أن كلمة المرور موجودة في هذا الملف.
- 1000:معرف المستخدم لهذا الحساب. جميع حسابات المستخدمين لها معرف رقمي فريد. تبدأ حسابات المستخدمين العادية عادةً من 1000، حيث يأخذ كل حساب جديد المعرف المجاني التالي، مثل 1001 و1002 وما إلى ذلك.
- 1000:معرف المجموعة للمجموعة الافتراضية التي ينتمي إليها المستخدم. في الظروف العادية، تحمل المجموعة الافتراضية نفس قيمة معرف المستخدم.
- ديف،،،:مجموعة من المعلومات الإضافية الاختيارية حول المستخدم. يحتوي هذا الحقل على بيانات بفاصلات “
,“بينهم. يمكنهم الاحتفاظ بأشياء مثل الاسم الكامل للمستخدم ورقم مكتبه ورقم هاتفه. يُظهر إدخال حساب المستخدم “mary” أن اسمها الكامل هو Mary Quinn. - /الرئيسية/ديف:المسار إلى المجلد الرئيسي للمستخدم.
- /bin/bash:الغلاف الافتراضي لهذا المستخدم.
إذا قمنا بنقل الناتج من هذا الأمر عبر wc الأداة المساعدة واستخدامها -l باستخدام خيار (lines) يمكننا حساب الأسطر الموجودة في الملف. سيعطينا هذا عدد الحسابات التي تم تكوينها على هذا الكمبيوتر.
cat /etc/passwd | wc -l
يتضمن هذا الرقم حسابات النظام والمستخدمين الذين تم إنشاؤهم بواسطة التطبيقات. يوجد حوالي 400 مستخدم عادي تم تكوينهم على هذا الكمبيوتر. من المرجح أن تكون نتيجتك أقل بكثير.
مع هذا العدد الكبير من الحسابات، أصبح الاستخدام أكثر ملاءمة less لعرض الملف “/etc/passwd”.
less /etc/passwd
استخدام less يسمح لك أيضًا بالبحث داخل المخرجات، إذا كنت تريد البحث عن حساب مستخدم معين.
الأمر awk
استخدام awk يمكننا عرض اسم المستخدم فقط باستخدام الأمر. وقد يكون هذا مفيدًا عند كتابة نص برمجي يحتاج إلى تنفيذ أمر ما على عدد كبير من حسابات المستخدمين. وقد يكون إدراج أسماء حسابات المستخدمين وإعادة توجيهها إلى ملف نصي أمرًا موفرًا للوقت بشكل كبير. كل ما عليك فعله بعد ذلك هو نسخ ولصق بقية الأمر في كل سطر.
سنخبر awk باستخدام النقطتين “:” كفاصل للحقل، وطباعة الحقل الأول. سنستخدم خيار -F (فاصل الحقل).
awk -F: '{print $1}' /etc/passwd
يتم كتابة أسماء حسابات المستخدم في نافذة المحطة الطرفية دون أي معلومات أخرى عن الحساب.
أمر القطع
يمكننا تحقيق نفس النوع من الأشياء باستخدام cut الأمر. نحن بحاجة إلى استخدام -d خيار (الفاصل) واطلب منه تحديد الحقل الأول فقط، باستخدام -f خيار (الحقول).
cutr -d: -f1
تحتوي هذه القائمة على جميع حسابات المستخدمين، بما في ذلك حسابات النظام والحسابات غير البشرية الأخرى.
الأمر compgen
ال compgen يمكن استخدام الأمر مع -u خيار (المستخدم) لإدراج حسابات المستخدم. سنقوم بنقل الناتج عبر column أمر لإدراج حسابات المستخدمين في أعمدة، بدلاً من قائمة طويلة تحتوي على اسم مستخدم واحد لكل سطر.
compgen -u | column
مرة أخرى، حسابات المستخدم الأولى المدرجة تنتمي إلى العمليات، وليس البشر.
الحد الأدنى لـ UID والحد الأقصى لـ UID
يتم منح حسابات المستخدمين معرفًا رقميًا، وهو ما رأيناه سابقًا. عادةً، تبدأ حسابات المستخدمين البشرية العادية من 1000، وتبدأ حسابات المستخدمين غير البشرية للنظام من 0. معرف حساب الجذر هو 0.
إذا تمكنا من التحقق من أدنى وأعلى معرفات المستخدم الممكنة، فيمكننا استخدام هذه المعلومات لتحديد حسابات المستخدم التي تقع بين هاتين القيمتين. وهذا سيسمح لنا بتحديد حسابات المستخدم التي تنتمي إلى أشخاص حقيقيين فقط.
يتتبع Linux هاتين القيمتين باستخدام معلمات التكوين المسماة UID_MIN و UID_MAX يتم حفظ هذه القيم في ملف “/etc/login.defs”. يمكننا بسهولة رؤية هذه القيم باستخدام grep.
نحن سوف نستخدم -E خيار (التعبير العادي الممتد). يبحث سلسلة البحث لدينا عن الأسطر التي تبدأ بـ “UID_MIN” أو “UID_MAX” في ملف “/etc/login.defs”.^“يمثل بداية السطر.
grep -E '^UID_MIN|^UID_MAX' /etc/login.defs
يتراوح نطاق معرفات المستخدم على هذا الكمبيوتر من 1000 إلى 60000.
الأمر getent
ال getent يقوم الأمر بقراءة المعلومات من قواعد بيانات النظام. يمكننا أن نطلب منه إدراج الإدخالات في ملف “/etc/passwd” باستخدام “passwd” كمعلمة.
getent passwd
وهذا يعطينا نفس القراءة التي يمكننا الحصول عليها باستخدام cat. ولكن أين getent إن التألق يتم عن طريق قبول القيم المعروفة باسم “المفاتيح”. يحدد المفتاح المعلومات التي getent يتم عرض التقارير على. إذا أردنا رؤية الإدخال لمستخدم واحد، فيمكننا تمرير اسم حساب المستخدم الخاص به على سطر الأوامر.
getent passwd Sarah
لاحظ أن اسم حساب المستخدم حساس لحالة الأحرف.
getent passwd sarah
يمكننا أيضًا تمرير الحدود العليا والسفلى لمعرفات حسابات المستخدم التي نريد رؤيتها. لرؤية جميع حسابات المستخدم العادية تمامًا، يمكننا استخدام القيم من UID_MIN و UID_MAX.
getent passwd {1000..60000}
يستغرق تنفيذ هذا الأمر بعض الوقت. وفي النهاية، سيتم إرجاعك إلى موجه الأوامر.
السبب وراء وقت التنفيذ الطويل هو أن getent يحاول العثور على تطابقات لجميع قيم حساب المستخدم حتى 60000.
دعنا نرى ما هو أعلى معرف لحساب المستخدم. سنستخدم cut الأمر، ولكن هذه المرة سنطلب الحقل الثالث، حقل معرف المستخدم. وسنقوم بتوجيه الإخراج عبر sort و استخدم -g (الخيار (الفرز الرقمي العام)).
cut -d: -f3 /etc/passwd | sort -g
أعلى قيمة معرف لحساب مستخدم مملوك للإنسان هي 1401.
تم تعيين معرف المستخدم 65534 لمفهوم النظام “لا أحد”.
getent passwd {65534..65534}
لذلك نحن نعلم أنه بدلاً من استخدام UID_MAX قيمة 60000، يمكننا على هذا الكمبيوتر استخدام قيمة أكثر واقعية مثل 1500. وهذا من شأنه تسريع الأمور بشكل جيد. كما سنقوم أيضًا بتوجيه الإخراج عبر cut لاستخراج أسماء حسابات المستخدم فقط.
الحصول على كلمة المرور {1000..1500} | قطع -d: -f1
يتم إدراج المستخدمين ويتم إرجاعنا على الفور إلى موجه الأوامر.
بدلاً من توصيل الإخراج عبر cutدعونا ننقل الناتج من خلال wc وعد الأسطر مرة أخرى. سيعطينا هذا عدد حسابات المستخدمين “الحقيقية”.
getent passwd {1000..1500} | wc -l
يمكننا الآن أن نرى أنه على هذا الكمبيوتر، يوجد بالتأكيد 400 حساب مستخدم مملوك للإنسان ومُهيأ.
القوة والبساطة
من المؤكد أن إحدى هذه التقنيات تناسب احتياجاتك عندما تحتاج إلى مراجعة حسابات المستخدم على جهاز كمبيوتر يعمل بنظام Linux. يجب أن تكون هذه الأوامر موجودة في جميع التوزيعات، ولا يتطلب أي منها sudo الوصول إليها، بحيث تكون جميعها متاحة لكل مستخدم.