প্রসেসগুলি যেগুলির মাধ্যমে সুবিধাগুলি ডি-এসকেল করেsetuid()
এবং setgid()
তারা নির্ধারিত ইউআইডি / গিডের গোষ্ঠী সদস্যতার উত্তরাধিকারী বলে মনে হয় না।
আমার কাছে একটি সার্ভার প্রক্রিয়া রয়েছে যা কোনও অধিকারযুক্ত বন্দর খোলার জন্য অবশ্যই রুট হিসাবে কার্যকর করতে হবে; তারপরে এটি নির্দিষ্ট-অ-প্রিভিলিজযুক্ত ইউআইডি / গিডে ডি-এস্কেল্ট হয়, 1 - যেমন, ব্যবহারকারীর foo
(ইউআইডি 73)। ব্যবহারকারী foo
গোষ্ঠীর সদস্য bar
:
> cat /etc/group | grep bar
bar:x:54:foo
সুতরাং আমি যদি লগইন করি তবে আমি এই বৈশিষ্ট্যগুলি সহ foo
একটি ফাইল পড়তে পারি /test.txt
:
> ls -l /test.txt
-rw-r----- 1 root bar 10 Mar 8 16:22 /test.txt
তবে, নিম্নলিখিত সি প্রোগ্রাম (সংকলন std=gnu99
), যখন রুট চালান:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main (void) {
setgid(73);
setuid(73);
int fd = open("/test.txt", O_RDONLY);
fprintf(stderr,"%d\n", fd);
return 0;
}
সর্বদা অনুমতি অস্বীকার রিপোর্ট । আমি ভাবছি এটি একটি লগ-ইন না করা প্রক্রিয়া হওয়ার সাথে সাথে করাতে পারে তবে অনুমতিগুলি যেভাবে কাজ করবে বলে মনে করা হচ্ছে এটি হ্যামস্ট্রিংয়ের মতো।
1. প্রায়ই সার্ভারের জন্য দেশ কোনটি, এবং আমি মনে করি একটি উপায় হিসেবে আমি দেখেছি এই সমস্যা এড়ানোর হতে হবে একটি রিপোর্ট কাউকে Apache সঙ্গে এরকম - Apache অডিও গোষ্ঠীতে যুক্ত করা হয়েছে এবং দৃশ্যত তারপর সাউন্ড সিস্টেম ব্যবহার করতে পারেন। অবশ্যই, এটি সম্ভবত একটি কাঁটাচামচে ঘটবে এবং মূল প্রক্রিয়া নয়, তবে প্রকৃতপক্ষে ঘটনাটি আমার প্রসঙ্গে একই (এটি একটি শিশু প্রক্রিয়াটি সেটুইড কলের পরে কাঁটাযুক্ত)।
setgid(54)
পরিবর্তে ব্যবহার করেন setgid(73)
(যেমন হিসাবে /etc/groups
, গ্রুপে bar
গিড রয়েছে 54) তবে এটি কি কাজ করে?
setuid()
এটি করার পরে আপনি আর পারবেন না ... তবে, হুম ... আমি মনে করি আপনি এটি দিয়ে করতে পারবেন seteuid()
...
setuid()
/setgid()
কলগুলি স্যুইচ করুন ।