Для некоторых тестирование компонентов, в моем C ++ TestApp на Ubuntu 14.04,
Я хотел бы переименовать / SBIN / перезагрузка временно запретить моей тестируемой системе (другое большое приложение c ++, запущенное внутри testapp) от вызова
system("/sbin/reboot")
и после теста хочу восстановить /sbin/reboot
во всей своей красе.
Так на оболочке cmd я называю
sudo setcap cap_chown,cap_dac_override,cap_setfcap=+ep testapp
чтобы мой testapp позвонил system("chown user /sbin/reboot")
более того system("chgrp developer /sbin/reboot")
а также system("mv /sbin/reboot /sbin/reboot.tmp")
Но Testapp останавливается с
chown: смена владельца ‘/ sbin / reboot’: операция не разрешена
Итак, что нужно сделать, чтобы включить переименование этого конкретного файла из приложения, не запускающего sudo?
Для всех экспертов по возможностям Linux в www: вопрос был — «Какие из возможностей linux нужно переименовать / sbin / reboot моему приложению sudo — чтобы получить тот же эффект, что и при вызове sudo mv /sbin/reboot /sbin/reboot.tmp
в оболочке.
@datenwolf: Без вежливости, но если я попрошу толпу «Какое время»? ответ как «Вы задали неправильный вопрос, потому что у меня нет часов, но у меня есть измеритель влажности, поэтому, если вы спросите о влажности, я буду рад вам помочь» не помогает мне вообще.
Решение переименовать файл, принадлежащий корню, состоит в том, чтобы установить только
sudo setcap cap_dac_override=+ep MyTestApp
в командной строке и вместо использования
system("mv file1 file2");
в исходном коде MyTestApp переключитесь обратно на
rename("file1" "file2");
Тогда все работает как шарм.
Других решений пока нет …