私は誰かのために汚いLinuxハックをしなければならなかったので、彼らはcupsenable printername非rootユーザーである間にshellコマンドでプリンターを起動することができました。構文全体をrootとして使用できるようにしたくなかったcupsenableので、入力をサニタイズしてargv[1]を呼び出すCラッパーを作成しましたsystem("cupsenable sanitizedprintername")。
プログラムをsetuidrootにしましたが、それでもcupsenable「permissiondenied」で失敗しました。それから私setuid(0)は前に電話を入れました、そしてsystem()、見よ、それはうまくいきました。
ユーザーがプリンターを制御できるようにするためのより良い方法があるという問題は無視してください。おそらくもっと良い方法があります。私が興味を持っているのは、vs。vs chmod u+s.の複雑さsetuid(0)ですsystem()。なぜそのように振る舞ったのですか?