ошибка, переустанавливающая httpd на CentOS 7, как я могу разрешить его?

Я могу позволить людям войти в систему с корневыми учетными данными на мой графический интерфейс в PHP?

Если вы имеете в виду процесс GUI имеет корневые учетные данные, то да. Это требование. Passwd и другие вещи, которые делают это, имеют BIT SETUID и принадлежат корневым. Для получения инструкций о том, как это сделать с PHP . Смотрите здесь .

Сначала, чтобы убедиться, что основной факт о паролях понятен - я думаю, что вы, вероятно, уже знаете это, но: пароли не являются , сохраненные в системе. Один из них хэш. Один из хэш - это строка, которая может быть создана с использованием алгоритма шифрования из исходной строки (e.g., фактический пароль), но Источник не может быть воссоздан из хеша .

Это означает, что даже если кто-то получает / и т. Д. / Тень , для них нет способа восстановить пароли пользователя. Шифрование одностороннее, оно не может быть изменено. Тем не менее, вы можете взять строку, шифровать ее так же, и сравнить его с хеш. Вот как происходит аутентификация пароля.

Структура хэш-строки в / и т. Д. / Тень объясняется в хорошем ответе Антона . Ниже приведен основной процесс аутентификации, продемонстрированный в C. PHP, имеет обертку для getPwnm () или вы сможете разбираться и хранить / etc / Shadow самостоятельно. Чтобы понять, что Crypt () делает со строкой (как упоминание Антона, он включает в себя индикацию используемого алгоритма и «солью» для создания хэша), см. Примечания -> Plicibc Notes В Человек 3 склеп . PHP Crypt () , по-видимому, работает так же, как док менее четко.

Единственные существенные функции GetPwnwn () и Crypt () , все остальное - это просто базовый вход, вывод и манипулирование на строке.

#define _XOPEN_SOURCE // Important.
#include 
#include 
#include 
#include 
#include 
#include 

int main (int argc, const char *argv[]) {
    if (argc < 2) {
        puts("Username required.");
        return 1;
    }

// Get shadow password.
    struct spwd *spw = getspnam(argv[1]);
    if (!spw) {
        if (errno == EACCES) puts("Permission denied.");
        else if (!errno) puts("No such user.");
        else puts(strerror(errno));
        return 1;
    }

// Read password from user.
    fprintf(stderr, "%s> ", argv[1]);
    char buffer[4096];
    int len = read(0, buffer, 4095);
    // Ditch the newline.
    buffer[len - 1] = '\0';

// Hash and report.
    char *hashed = crypt(buffer, spw->sp_pwdp);
    printf("%s\n%s\n", spw->sp_pwdp, hashed);
    if (!strcmp(spw->sp_pwdp, hashed)) puts("Password matched.");
    else puts("Password DID NOT match.");

    return 0;
} 

Вы можете компилировать это:

gcc --std=c99 whatever.c -o testpw -lcrypt

Вам нужно запустить его как root или вы получите «разрешение запрещено». Вам необходимо указать реальное имя пользователя:

./testpw me

Примечание ECHO не отключено, поэтому пароль будет виден при его введении.

0
20.06.2016, 19:45
2 ответа

Разделим решение на две части:

  1. Найдите, где сохраняется настройка. Разумные программы хранят свои пользовательские параметры настройки в «точечных» файлах в $ HOME , обычно либо в .progname (будь то файл или каталог с более сложными конфигурациями), либо в .config/. XFCE использует последнее, при этом окружении рабочего стола хранятся в файле

     ~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml
    

    Структура файла не слишком проста из-за того, что он может обрабатывать многомониторные установки, Xinerama и многое другое. Найдите имя файла текущего фона, если вы хотите знать, как именно он выглядит в вашем конкретном случае.

  2. Убедитесь, что эти настройки распространяются на вновь созданные учетные записи пользователей. В разумной системе это именно роль /etc/skel , который хранит файлы, скопированные в вновь созданные домашние каталоги учетных записей пользователей (см., например, hier (7) man page).

Таким образом, скопируйте файл (с ведущими каталогами до $ HOME ) туда, и это должно быть. Вы можете хитро использовать install (в Linux обычно находится в пакете coreutils) для создания всех нужных каталогов:

install -D -v \
    {$HOME,/etc/skel}/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml

Если вам потребуется изменить это и для существующих пользователей, простое использование sed в существующих файлах может сделать этот трюк в большинстве случаев, но вам придется разобрать конфигурационные GROUPs, чтобы сделать его пуленепробиваемым ( обязательная ссылка на известную публикацию SO ).

-121--175254-
XZ_OPT=-9e tar cJf tarfile.tar.xz directory

даже лучше, чем

XZ_OPT=-9 tar cJf tarfile.tar.xz directory
-121--2908-

У вас есть конфликтующая версия httpd-tools , очевидно, из источника, отличного от официальных хранилищ CentOS. Сначала удалите его:

 # rpm -e httpd-tools

Если он дает статические сведения о нем, добавьте -force и/или -nodeps , пока он не подчинится.

При установке httpd необходимо также установить новую копию httpd-tools .

1
28.01.2020, 02:36

Основная причина маскировки сервиса - это предотвращение случайного запуска или включения сервиса.

Например, firewalld может быть замаскирован с помощью systemctl firewalld

При запуске службы firewalld вы можете получить сообщение об ошибке

Failed to issue method call: Unit firewalld.service is masked.

Для решения этой проблемы размаскируйте брандмауэр с помощью systemctl unmask firewalld.

1
28.01.2020, 02:36

Теги

Похожие вопросы