Почему некоторые приложения прекращают работать, когда полномочия изменяются в/usr/bin?

Я не действительно уверен, что Вы пытаетесь сделать здесь, но Вы можете grep "все строки, которые начинаются $ и конец с небуквенно-цифровым знаком" с этим:

grep -oP '\$.+?\W' 

В ответ на Ваш комментарий, как насчет чего-то вроде этого:

for f in `find . -name "*.php"`; do \
  echo "----- $f -----";
  for s in $(grep -iE "mysql_connect|mysql_select_db|new PDO" $f | 
     grep  -oP '\$\w+?\W' | sed 's/.$//' | sort | uniq); do \
       grep -m 1 $s $f; 
 done; 
done

Этот scriptlet найдет все .php файлы, grep каждый из них для переменных, Вы интересуетесь и затем печатаете первую инстанцию каждой переменной в файле, в котором это было найдено. Например, я создал 2 .php файла, aa.php и bb.php, их содержание:

$ cat aa.php 
$servername='localhost';
$database_username='someName';
$database_password='p@ssw0rd';
$database_name='someDatabase';
mysql_connect($servername, $database_username, $database_password);
mysql_select_db($database_name);

$ cat bb.php 
$servername='localhost2';
$database_username='some2Name';
$database_password='p@ssw0rd2';
$database_name='someDatabase2';
$pdo = new PDO("mysql: host={$servername}; dbname={$$database_name}", $database_username, $database_password);

Вывод сценария выше:

----- ./bb.php -----
$database_name='someDatabase2';
$database_password='p@ssw0rd2';
$database_username='some2Name';
$pdo = new PDO("mysql: host={$servername}; dbname={$$database_name}", $database_username, $database_password);
$servername='localhost2';
----- ./aa.php -----
$database_name='someDatabase';
$database_password='p@ssw0rd';
$database_username='someName';
$servername='localhost';
6
23.05.2017, 15:40
2 ответа
[

]Проблема в том, что способ Finder модифицировать разрешения не только влияет на указанные биты, как можно подумать. По какой-то причине он обнуляет первый восьмеричный разряд режима работы файла и оставляет исполняемые биты нетронутыми. Так, некоторым жизненно важным программам удаляются их [][]setuid/setgid[][] и [][]sticky[][] биты, что делает их либо бесполезными, либо ведут себя неустойчиво.[

] [

]Бит setuid нужен некоторым программам в []/usr/bin/[], так как они должны взаимодействовать с системой на более низком уровне, чем обычные программы. Например, []sudo[], []passwd[], []newgrp[] или []login[] нужны привилегии, выходящие за рамки тех, что даны обычному пользователю, и поэтому для их выполнения нужен пароль. Если вы удалите их setuid бит, они просто не смогут выполнить свою работу, что приведет к их преждевременному выходу или даже аварийному завершению. [

] [

] Так, например, правильными разрешениями для []/usr/bin/login[] являются []4555[] или []-r-sr-xr-x[], и после манипуляции с вашим другом у нас есть []0757[] или []-rwxr-xrwx[]. Терминал.app []Terminal.app[] вызывает []/usr/bin/login[] для прикрепления пользователя к tty (см. [][]man stty[][]), и отсутствующий бит setuid приводит к его отказу. Освобождение нераспределённого указателя, вероятно, является ошибкой, связанной с этим. В OS X 10.6.8 я не получаю эту ошибку указателя, но []Terminal.app[] выходит сразу после запуска и я нахожу запись типа []login[6647]: pam_open_session(): системная ошибка[] в []/var/log/системе. log[].[

] [

][]Edit.[] Как упоминает Антуан Лекайл в комментарии, простой способ сделать Terminal.app дисфункциональным - это выдать []$ sudo chmod -s /usr/bin/login[]. Обратите внимание, что после этого вы даже не сможете открыть новое окно, так как это также зависит от вызова для входа в систему. Чтобы отменить его, просто сделайте []$ sudo chmod +s /usr/bin/login[].[

] [
] [

]Я протестировал влияние Finder на разрешения следующим образом:[

] [
$ # create a directory with the same permissions as /usr/bin
$ mkdir -m 755 test
$ sudo chown root:wheel test
$ ls -l | grep test
drwxr-xr-x 2 root     wheel    68 Jul  6 15:01 test
$ # create 4096 empty files with all possible permissions
$ cd test
$ sudo touch file_{0..7}{0..7}{0..7}{0..7}
$ for perms in {0..7}{0..7}{0..7}{0..7}; do sudo chmod $perms file_$perms; done
] [

]Цикл []для [] может занять минуту, потому что []chmod[] работает медленно. После этого в папке []test[] находятся файлы []file_wxyz[] с разрешениями []wxyz[]. Например[

] [
$ ls -l file_4555
-r-sr-xr-x 1 root wheel 0 Jul  6 15:02 file_4555
] [

]Теперь мы можем вытащить трюк вашего друга и изменить разрешения папки и всего ее содержимого с помощью Finder: []$ откройте .[] и []Cmd[]+[]I[] и сделайте то, что вы объяснили в своем сообщении. Я решил предоставить права на чтение колесу группы и права на чтение+запись всем.[

] [

]Теперь давайте посмотрим, что случилось с нашими файлами: Следующая трубка перечисляет каталог, считывает колонку, содержащую разрешения, сортирует ее и подавляет дубликаты строк:[

] [
$ ls -l | awk '{print $1}' | sort -u
-rw-r--rw-
-rw-r--rwx
-rw-r-xrw-
-rw-r-xrwx
-rwxr--rw-
-rwxr--rwx
-rwxr-xrw-
-rwxr-xrwx
total
$ ls -l file_4555
-rwxr-xrwx 1 root wheel 0 Jul  6 15:02 file_4555
] [

]Как видите, биты setuid/setgid/sticky больше не устанавливаются; разрешения на чтение и запись одинаковы для всех файлов; и разрешения теперь различаются только для исполняемых битов (из которых есть восемь возможных комбинаций).[

].
6
27.01.2020, 20:28

Short Answer

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

Detailed Answer

/bin - Пользовательские двоичные файлы

  1. Содержит двоичные исполняемые файлы.
  2. Обычные команды linux, которые необходимо использовать в однопользовательских режимах, следующие находится под этим каталогом.
  3. Здесь находятся команды, используемые всеми пользователями системы.
  4. Например: ps, ls, ping, grep, cp.

Теперь мы изменили разрешения на /usr/bin. Итак, давайте посмотрим, как затрагиваются разрешения для символьных линков.

Из записи в Википедии для Символическая ссылка:

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

Итак, теперь понятно, что изменение разрешений на базовом файле не влияет на разрешения символической ссылки.

Так что же на самом деле означает эта ошибка?

Это значит, что код пытается освободить то, что не было выделено с помощью malloc/realloc. Также, какой смысл возвращать освобожденный мертвый указатель в память?

Основываясь на вышеприведенных наблюдениях, Полагаю, что после изменения разрешений на символическую ссылку нельзя было ссылаться, поэтому указатель стал мертвым (на символическую ссылку нет соответствующих разрешений). Итак, вы получаете описанную выше ошибку.

Ссылки

https://stackoverflow.com/questions/14575545/pointer-freed-not-allocated https://superuser.com/questions/303040/how-do-file-permissions-apply-to-symlinks https://superuser.com/questions/395035/are-world-readable-writable-executable-links-in-usr-bin-security-holes

0
27.01.2020, 20:28

Теги

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