У процесса нет абсолютно никакого способа повысить свои привилегии. Если бы это было возможно, то они уже были бы у него.
Если процесс имеет повышенный реальный или сохраненный uid, он может скопировать этот uid в эффективный uid; Если у него есть разрешенные возможности, он может скопировать их в действующий набор, но для начала у него должны быть эти привилегии. Вы не можете заколдовать их из воздуха плавников (что хорошего в замке, для которого вы можете создать ключ по своему желанию).
(будьте осторожны с этим, только для экспертов)
Есть два способа (традиционно один, но они оба похожи, и оригинал может однажды исчезнуть). Для обоих это происходит, когда вы вызываете exec. (ОК, я солгал выше, потому что после запуска exec мы находимся в том же процессе, с измененными привилегиями, но выполняем новый код).
exec
отредактирован, идентификатор пользователя и / или идентификатор группы изменится на идентификатор файла (возможно, root), ( это не слово для скриптовых языков в большинстве Unix). exec
отредактирован, процесс получит возможности, установленные в файле. Теперь это рекомендательный метод.
Пример:
//renice.cc
#include <unistd.h>
#include <sys/capability.h>
class Renice {
cap_t original_cap_state;
cap_t can_nice_cap_state;
cap_value_t cap_list[1];
public:
Renice() {
original_cap_state = cap_get_proc();
if ( original_cap_state == NULL)
/* handle error */;
can_nice_cap_state = cap_get_proc();
if ( can_nice_cap_state == NULL)
/* handle error */;
cap_list[0] = CAP_SYS_NICE;
if (cap_set_flag(can_nice_cap_state, CAP_EFFECTIVE, 1, cap_list, CAP_SET) == -1)
/* handle error */;
}
~Renice() {
if (cap_free(original_cap_state) == -1 )
/* handle error */;
}
void new_value(int v) {
if (cap_set_proc(can_nice_cap_state) == -1)
/* handle error */;
nice (v);
/* handle error */
if (cap_set_proc(original_cap_state) == -1)
/* handle error */;
}
};
int main () {
Renice renice;
renice.new_value(-1);
nice (-2); //won't work, capability no longer set
sleep (30);
}
g ++ -lcap renice.cc
sudo setcap CAP_SYS_NICE + p a.out
./ a .out
Иногда это происходит, если у вас заканчивается место на жестком диске, если вы можете освободить место с помощью команды «CD» для навигации по каталогам ur и использовать команду «rm 'file'», чтобы удалить файл, который может дать вам немного свободного места. затем используйте команду выключения, чтобы выйти и снова запустить компьютер, и он загрузится с графическим интерфейсом пользователя. Писай
У меня был GDM3, в Debian SID после обновления до нестабильного пакета GDM не работал,
После нескольких поисков в Google я нашел решение, удалив файл.ICEauthority и затем настроив GDM3 для использования только X11 из /etc/gdm3/something.conf