проблемы безопасности при доступе к файлу теневых паролей из php - PullRequest
3 голосов
/ 30 октября 2011

Я написал эту функцию в php для проверки пользователя / прохода по учетной записи на сервере Linux.Он работает нормально, но меня немного беспокоит безопасность.

/*    Need to add www-data to group shadow (and restart apache)
        $ sudo adduser www-data shadow
        $ sudo /etc/init.d/apache2 restart
      Needs whois to be installed to run mkpasswd
        $ sudo apt-get install whois
      Assumes that sha-512 is used in shadow file
*/

function authenticate($user, $pass){
  // run shell command to output shadow file, and extract line for $user
  // then split the shadow line by $ or : to get component parts
  // store in $shad as array
  $shad =  preg_split("/[$:]/",`cat /etc/shadow | grep "^$user\:"`);
  // use mkpasswd command to generate shadow line passing $pass and $shad[3] (salt)
  // split the result into component parts and store in array $mkps
  $mkps = preg_split("/[$:]/",trim(`mkpasswd -m sha-512 $pass $shad[3]`));
  // compare the shadow file hashed password with generated hashed password and return
  return ($shad[4] == $mkps[3]);
}

// usage...
if(authenticate('myUsername','myPassword')){
  // logged in   
} else {
  // not valid user
}
  1. Вносит ли добавление www-данных в тень группы большой риск для безопасности на выделенном сервере во внутренней сети?(Я понимаю, что на сервере общего хостинга это может дать возможность хакерам использовать солт-значения для взлома паролей других пользователей)

  2. Есть ли какие-либо другие проблемы безопасности с использованием метода, который я использую?1010 *

  3. Какие-либо предложения, чтобы сделать его более надежным?

1 Ответ

1 голос
/ 30 октября 2011

Я не очень хорошо знаком с тем, как работает теневая группа, но предоставление PHP-доступа к ней звучит очень опасно - один PHP-скрипт с ошибочным вызовом include может получить злоумышленнику содержимое /etc/shadow.Хотя это не равносильно получению доступа с правами root, наличие зашифрованных паролей в открытом доступе, конечно, все еще неприятно.

Если нет собственной команды Unix / Linux, которая может аутентифицировать пользователя, которого вы могли бы запускать выборочно,подумайте о вашей идее

Другой способ, который я попробовал - который также работает, - создать сценарий оболочки, который использует su для входа в систему как пользователь и возвращает код выхода 0 для успеха.Затем его можно вызвать из файла php.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...