linuxでのCまたはC++言語呼び出しにはroot権限が必要です

1433 ワード

一、紹介
 
linuxはファイルに対する権限制御が厳格であり、特殊な意図を持つプログラムがroot権限を取得することを回避するが、c++プログラムではrootの実行権限を取得してrootのみが読み書き可能なファイルを操作したい.
二、詳しく
1、setuid法
(1)rootユーザにログインし、プログラムをroot:root所有者に設定する(rootユーザコンパイラにログインすることと等価).また、rootグループに通常のユーザを直接追加することもでき、コンパイラはユーザを切り替えるために使用されません.(2)rootユーザ設定プログラムのUID,#chmod u+s Appにログインする.
(3)プログラムでの使用:

uid_t uid = getuid();
if (setuid(0)) {
    return -1;
}
//...
if (setuid(uid)) {   //  uid
}

上記の手順では、通常のユーザーでもrootユーザーでもroot権限を取得できます.
注意:
(1)コピー時にそのUIDビットとともにコピーするには,cpにパラメータ−a,scpにパラメータ−pを加える.
(2)他のLinuxホストにコピーする場合は、プログラムがroot:root所有者であることを保証します.
 
2、sudo法
 
システムコマンドを呼び出すときはsudo+パイプで解決しますが、sudoリストを変更する必要があります.
(1)sudoのプロファイルは/etc/sudoers
1つの構成を追加します:username ALL=(ALL)ALLこのようにして、普通のユーザーusernameはroot権限のすべてのコマンドを実行してusernameユーザーでログインした後、実行:#sudo su-それからusernameユーザー自身のパスワードを入力して、rootユーザーに切り替えることができます.
 
(2)プログラムはroot権限が必要なコードを呼び出す際にsystem,echo"userpassword"|sudo-S sh-c"CMD 1;CMD 2;..."を使用する.
注意:rootパスワードを変更できないなど、sudoリストでユーザーusernameの操作権限を制御できます.
三、まとめ
(1)本稿では2つの方法しかまとめていないが,root権限を取得する方法が多いかもしれない.
(2)ArchLinuxにsudoを加えることはroot権限を取得したことに等しく,これは議論中ではない.
(3)本人の考え方は限られていて、もっと良いデザインの提案があれば、メールでコミュニケーションすることもできます.ここで感謝します.メールアドレス[email protected].
 
ユートピア2号のCSDNブログから
全文アドレスをクリックしてください:https://blog.csdn.net/taiyang1987912/article/details/41113503?utm_source=copy