سؤال

حسنًا ، سؤالي بسيط ، لكنني جديد نوعًا ما على C وكنت آمل أن يساعدني أحد. أرغب في التغيير إلى مستخدم مختلف في C. على سبيل المثال ، أعرف كلمة مرور المستخدم ، وإذا كان المستخدم:. أعلم أن هذه قد تكون مشكلة أمنية في الوقت الحالي ، لكنني لست قلقًا بشأن الأمن في الوقت الحالي.

هل كانت مفيدة؟

المحلول

سترغب في استخدام setuid الذي يمكن العثور عليه في unistd.h لذلك فهو متوفر على أنظمة Posix (لذلك يجب أن يكون أي Linux/Unix Falvour على ما يرام)

من صفحة الرجل

إذا كانت العملية تحتوي على امتيازات مناسبة ، فيجب على setuid () تعيين معرف المستخدم الحقيقي ومعرف المستخدم الفعال ، ومعرف المستخدم المحفوظ لعملية الاتصال إلى UID.

إذا لم يكن للعملية امتيازات مناسبة ، ولكن UID تساوي معرف المستخدم الحقيقي أو معرف المستخدم المحفوظ ، يجب على setuid () تعيين معرف المستخدم الفعال على UID ؛ يجب أن يظل معرف المستخدم الحقيقي ومستخدم المستخدم المحفوظ دون تغيير.

يجب ألا تؤثر وظيفة setuid () على قائمة المجموعة التكميلية بأي شكل من الأشكال.

هنا هو مثال

نصائح أخرى

اتصل ب su ثنائي (مثل من خلال system() أو مزيج من fork() وواحد من exec وظائف) ، والتي تعرف جميع تعقيدات تغيير بيانات الاعتماد ، سواء بشكل أولي أو على نظام التشغيل الخاص بك. تتم مشاركة المحطة ويستمر في الانتماء إلى المستخدم الأصلي.

بعض هذه التعقيدات التي لم يتم التعامل معها من قبل بسيطة setuid() المكالمة هي مجموعات ، وحدود الحساب وحدود الموارد.

إذا كان هذا للمتعة فقط ، setuid() اخراج بواسطة setgid() و initgroups() ربما تكون كافية لك.

عليك أن تكتشف استخدام UID getpwuid (). بعد ذلك ، عليك تعيين UID في برنامجك مع setuid () تليها التطبيق/الوظيفة التي تنوي تشغيلها مع هذه الحقوق الجديدة ، على سبيل المثال القشرة. لبدء تطبيق مع تيار استخدام UID النظام().

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top