Перейти к содержанию

EL[michlen]

Members
  • Постов

    914
  • Зарегистрирован

  • Посещение

    Никогда

Сообщения, опубликованные EL[michlen]

  1. Самый простой и логичный способ - использовать сокеты или следить за PID-ом. Можно сделать двухпоточного ребенка, где один поток следит за PID-ом родителя (getppid() в цикле), а другой ждет сигнала. Если родитель помер, первый сам посылает второму какой-нибудь сигнал, раз уж надо его разбудить. =) То же самое с сокетами.

    Еще есть функция atexit() (см. man), но она работает только при нормальном завершении, при сигнале KILL и т.п. она не выполнится. А еще, по-моему, можно использовать select для синхронизации между процессами по pipe-ам.

  2. Есть куча видов IPC:

    * Полудуплексные каналы UNIX

    * FIFO (именованные каналы)

    * Очереди сообщений в стиле SYSV

    * Множества семафоров в стиле SYSV

    * Разделяемые сегменты памяти в стиле SYSV

    * Сетевые сокеты (в стиле Berkeley)

    * Полнодуплексные каналы (каналы потоков)

    (см. Linux Programmer's Guide, Scott Burkett)

    Может синхронизировать это по каналам? Скажем, ребенок изредка спрашивает родителя: "Чувак, ты еще жив?", на что родитель должен ответить: "Да живая я, спокуха!" =)

    Ну или отслеживать Process ID.

  3. Цитата:

    пользователь запустил скрип со своими привелегиями

    Такое возможно, если пароль для su прописать в самом скрипте. Если боитесь, что юзер будет просматривать текст скрипта, можно записать туда пароль в закодированном виде. Например, методом

    // Пример на С для наглядности:
    char *code(char *str2code, char *code2use)
    {
    // str2code - строка, которую мы кодируем
    // code2use - некая строка, которую мы используем в качестве кода
    	while (strlen(str2code) > strlen(code2use))
    	{
    		strcat(code2use,"A"); // Если длина кода меньше, чем строка, увеличиваем эту длину
    	}
    	
    	for (int i=0; i<strlen(str2code); i++)
    	{
    		str2code = str2code ^ code2use; // Собственно, кодирование =)
    	}
    	return str2code;
    }
    /*
    В данном случае для декодирования строки используется эта же функция. При другом code2use, оригинальную
    строку мы уже не получим, т.е. нужно использовать один и тот же код для кодирования и декодирования
    (можно задать его константным, а можно использовать для разных пользователей).
    */
    

    а при выполнении su декодировать его и передавать на ввод su, таким образом избегая его явного просмотра. Тогда в этом сможет разобраться только программист, хотя это и несложно.

×
×
  • Создать...