Существует также dladdr()
функция в libc, который возвращает путь к двоичному файлу, в котором указатель заданной функции существует, но:
-rdynamic
чтобы это работало. Я не думаю потребности библиотек это.Для библиотеки Ваши опции намного более ограничены: существует нет argv[0]
таким образом, Ваши опции dladdr()
, или неясный взлом ручного парсинга только для Linux /proc/self/maps
и поиск диапазона адреса памяти, содержащего адрес памяти некоторой библиотеки внутренний символ (например, указатель функции или статическая переменная).
Другие решения я видел в дикой природе:
./configure --prefix=SOME_UNIQUE_VERY_LONG_STRING
, затем при поиске времени установки и замене, что длинная строка в двоичном файле (!!) с /path/to/actual/install/prefix/suffixed/by/enough/slashes//////
и надеюсь, что пользователь никогда ничего не переименовывает в том пути.chroot()
, смонтируйтесь цикл, файловая система FUSE, взломал libc (Проект всплеска), виртуальная машина, и т.д../configure --prefix=..
и затем никогда не звоните chdir()
. Это также повредит вещи, если какие-либо утечки пути из приложения и перейдут к другому приложению, так как другое приложение не сможет правильно разрешить относительный путь.getClass().getProtectionDomain().getCodeSource().getLocation()
, C# имеет Application.StartupPath
среди других большинство языков сценариев имеет некоторый путь.POSIX должен действительно стандартизировать dladdr()
.
Ваш сценарий изменяет разрешение 2 файлов,/etc/sudoers и tempfl.log. Разделите команду в двух строках, и необходимо быть в порядке.
Ваш сценарий делает точно, что Вы говорите ему делать:
chmod 0440 /etc/sudoers tempfl.log
будет применяться r--r-----
в оба из тех файлов.
Вы действительно не должны возиться с sudoers
файл, если Вы не пишете администраторские сценарии и, даже затем, полномочия, должен быть оставлен в покое, так как это помогает защитить Вашу систему. sudo
сама программа проверяет полномочия своего конфигурационного файла и предупреждает Вас (как Вы видели). Слушайте его. Это, очевидно, знает лучше, чем Вы :-)
Вы уверены, что только пытаетесь выполнить определенные части своего сценария под sudo
, как в:
sudo chmod 0440 tempfl.log 2>&1
В противном случае и Вы действительно хотите изменить оба файла (но с различными полномочиями, используйте две отдельных команды:
chmod 0440 /etc/sudoers 2>&1
chmod 0644 tempfl.log 2>&1
Когда Вы пишете chmod 0440 /etc/sudoers tempfl.log
это изменяет полномочия /etc/sudoers
и tempfl.log
обоим быть 0440, который является неправильным.
Когда Вы пишете chmod 0644 /etc/sudoers tempfl.log
это изменяет полномочия /etc/sudoers
и tempfl.log
обоим быть 0644, который является неправильным.
Необходимо ли изменить полномочия на /etc/sudoers
вообще? Вы на самом деле хотели записать chmod 0644 tempfl.log
?
/etc/sudoers
.
–
01.09.2010, 07:29