Эти флаги определены в файлах спецификаций GCC , поэтому лучший способ определить различия между ними — заглянуть туда:
gcc -dumpspecs
Соответствующей частью является link_command
определение. Это показывает, что -nostdlib
, -nodefaultlibs
и -nostartfiles
имеют следующее влияние:
%{!nostdlib:%{!nodefaultlibs:%:pass-through-libs(%(link_gcc_c_sequence))}}
— при необходимости добавляет libgcc
, libpthread
, libc
, libieee
с помощью макроса и спецификационных строк lib
и libgcc
; %{!nostdlib:%{!nostartfiles:%S}}
— это добавляет спецификационную строку startfile
, в которой указываются объектные файлы, добавляемые для обработки запуска(crti.o
и т. д.)%{!nostdlib:%{fvtable-verify=std: -lvtv -u_vtable_map_vars_start -u_vtable_map_vars_end} %{fvtable-verify=preinit: -lvtv -u_vtable_map_vars_start -u_vtable_map_vars_end}}
— добавляет проверку виртуальной таблицы с помощьюlibvtv
%{!nostdlib:%{!nodefaultlibs:%{mmpx:%{fcheck-pointer-bounds: %{static:--whole-archive -lmpx --no-whole-archive %:include(libmpx.spec)%(link_libmpx)} %{!static:%{static-libmpx:-Bstatic --whole-archive} %{!static-libmpx:--push-state --no-as-needed} -lmpx %{!static-libmpx:--pop-state} %{static-libmpx:--no-whole-archive -Bdynamic %:include(libmpx.spec)%(link_libmpx)}}}}%{mmpx:%{fcheck-pointer-bounds:%{!fno-chkp-use-wrappers: %{static:-lmpxwrappers} %{!static:%{static-libmpxwrappers:-Bstatic} -lmpxwrappers %{static-libmpxwrappers: -Bdynamic}}}}}}}
— это ручкиlibmpx
%{!nostdlib:%{!nodefaultlibs:%{%:sanitize(address): %{static-libasan:%:include(libsanitizer.spec)%(link_libasan)} %{static:%ecannot specify -static with -fsanitize=address}} %{%:sanitize(thread): %{static-libtsan:%:include(libsanitizer.spec)%(link_libtsan)} %{static:%ecannot specify -static with -fsanitize=thread}} %{%:sanitize(undefined):%{static-libubsan:-Bstatic} -lubsan %{static-libubsan:-Bdynamic} %{static-libubsan:%:include(libsanitizer.spec)%(link_libubsan)}} %{%:sanitize(leak): %{static-liblsan:%:include(libsanitizer.spec)%(link_liblsan)}}}}
— управляет различными вариантами санитарной обработки %{!nostdlib:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}}
— это добавляет опции защиты стека и повторяет последовательность ссылок C (, библиотеки которых уже были указаны в начале)%{!nostdlib:%{!nostartfiles:%E}}
— это добавляет спецификационную строку endfile
, которая указывает объектные файлы, которые нужно добавить для обработки левых -оверов (crtfastmath.o
, crtend.o
и т. д.)Как вы поняли из документации, -nostdlib
является надмножеством -nodefaultlibs
и -nostartfiles
. Он также отключает проверку виртуальной таблицы.
Итак, -nostdlib
достаточно, чтобы отключить все связанные функции; -nodefaultlibs
и -nostartfiles
ничего к этому не добавляют. (Но их тоже не помешает упомянуть.)
Скрытие пароля в текстовом файле дает ограниченный уровень безопасности, но да, это небольшое улучшение.
В конце концов, пароли unix тоже хранятся, но с солью, в /etc/shadow.
Помните, что если у людей есть доступ к компьютеру и они загружаются, например, с live CD, поскольку они являются root в среде live cd, они смогут прочитать любой файл на вашем компьютере.
Изменив владельца на root и удалив все права доступа для других пользователей и групп, вы можете эффективно гарантировать, что ваш скрипт не будет прочитан кем-либо, у кого нет root-доступа.
Этого можно добиться, выполнив следующие две команды.
Первый гарантирует, что только владелец файла (root )имеет разрешение на чтение и выполнение скриптаchmod 500 script.py
(Если вам также необходимо иметь возможность записывать файл, вы можете использовать chmod 700 script.py
, но обычно мы хотим следовать правилу наименьших привилегий, когда это возможно.)
Вторая команда сделает root владельцем скрипта sudo chown root:root script.py
С этого момента никто, кроме пользователя root, не сможет читать, писать или выполнять ваш скрипт. Имейте в виду, что когда пользователи запускают sudo
, они действуют как пользователь root.