Я могу позволить людям войти в систему с корневыми учетными данными на мой графический интерфейс в PHP?
Если вы имеете в виду процесс GUI имеет корневые учетные данные, то да. Это требование.
Passwd
и другие вещи, которые делают это, имеют BIT SETUID и принадлежат корневым. Для получения инструкций о том, как это сделать с PHP . Смотрите здесь .Сначала, чтобы убедиться, что основной факт о паролях понятен - я думаю, что вы, вероятно, уже знаете это, но: пароли не являются , сохраненные в системе. Один из них хэш. Один из хэш - это строка, которая может быть создана с использованием алгоритма шифрования из исходной строки (e.g., фактический пароль), но Источник не может быть воссоздан из хеша .
Это означает, что даже если кто-то получает
/ и т. Д. / Тень
, для них нет способа восстановить пароли пользователя. Шифрование одностороннее, оно не может быть изменено. Тем не менее, вы можете взять строку, шифровать ее так же, и сравнить его с хеш. Вот как происходит аутентификация пароля.Структура хэш-строки в
/ и т. Д. / Тень
объясняется в хорошем ответе Антона . Ниже приведен основной процесс аутентификации, продемонстрированный в C. PHP, имеет обертку дляgetPwnm ()
или вы сможете разбираться и хранить/ etc / Shadow
самостоятельно. Чтобы понять, чтоCrypt ()
делает со строкой (как упоминание Антона, он включает в себя индикацию используемого алгоритма и «солью» для создания хэша), см. Примечания -> Plicibc Notes ВЧеловек 3 склеп
. PHPCrypt ()
, по-видимому, работает так же, как док менее четко.Единственные существенные функции
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 не отключено, поэтому пароль будет виден при его введении.
Разделим решение на две части:
Найдите, где сохраняется настройка. Разумные программы хранят свои пользовательские параметры настройки в «точечных» файлах в $ HOME
, обычно либо в .progname
(будь то файл или каталог с более сложными конфигурациями), либо в .config/
. XFCE использует последнее, при этом окружении рабочего стола хранятся в файле
~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml
Структура файла не слишком проста из-за того, что он может обрабатывать многомониторные установки, Xinerama и многое другое. Найдите имя файла текущего фона, если вы хотите знать, как именно он выглядит в вашем конкретном случае.
Убедитесь, что эти настройки распространяются на вновь созданные учетные записи пользователей. В разумной системе это именно роль /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 ).
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
.
Основная причина маскировки сервиса - это предотвращение случайного запуска или включения сервиса.
Например, firewalld может быть замаскирован с помощью systemctl firewalld
При запуске службы firewalld вы можете получить сообщение об ошибке
Failed to issue method call: Unit firewalld.service is masked.
Для решения этой проблемы размаскируйте брандмауэр с помощью systemctl unmask firewalld
.