Как упомянуто Портативным способом найти inode число и Обнаружение chroot тюрьмы из, можно проверить ли inode количество /
2
:
$ ls -di /
2 /
inode число это отличается от 2, указывает, что очевидный корень не является фактическим корнем файловой системы. Это не обнаружит chroots, которые, оказывается, базированы на точке монтирования, или в операционных системах со случайным корнем inode числа.
Вы нуждаетесь и в чтении и выполняете полномочия на сценарии, чтобы смочь выполнить его. Если Вы не можете считать содержание сценария, Вы не можете выполнить его также.
tony@matrix:~$ ./hello.world
hello world
tony@matrix:~$ ls -l hello.world
-rwxr-xr-x 1 tony tony 17 Jul 13 22:22 hello.world
tony@matrix:~$ chmod 100 hello.world
tony@matrix:~$ ls -l hello.world
---x------ 1 tony tony 17 Jul 13 22:22 hello.world
tony@matrix:~$ ./hello.world
bash: ./hello.world: Permission denied
Если Вы позволяете другим пользователям выполнить программу, то они могут знать все, что программа делает, читаем ли программный файл или нет. Все, что они должны сделать, указать на отладчик (или подобная отладчику программа такой как strace
). Двоичный исполняемый файл может работать, если это - исполняемый файл, и не читаемый (сценарий не может, потому что интерпретатор должен смочь прочитать сценарий), но это не дает Вам безопасности.
Если Вы хотите, чтобы другие смогли выполнить Вашу программу как черный квадрат, не позволяя им видеть точно, что делает программа, необходимо дать поднятые полномочия сценария: сделайте это setuid Вашему пользователю. Только корень может использовать средства отладки на setuid программах. Обратите внимание, что запись безопасных setuid программ не легка, и большинство языков не подходит; посмотрите Позволяют setuid на сценариях оболочки для большего количества объяснений. Если Вы собираетесь записать setuid программу, я настоятельно рекомендую Perl, который имеет режим (режим инфекции), это явно предназначается для создания безопасных setuid сценариев возможными.
Существует половина истины к предыдущим операторам. Можно установить сценарий так, чтобы это не было читаемо пользователем, но все еще исполняемо. Процесс немного вытянут, но это выполнимо путем создания исключения в/etc/sudoer так, чтобы пользователь мог запустить скрипт как самостоятельно временно, не будучи предложенным пароль. Пример ниже:
Некоторый сценарий я хочу совместно использовать с пользователем:
me@OB1:~/Desktop/script/$ chmod 700 somescript.pl
me@OB1:~/Desktop/script/$ ls -l somescript.pl
-rwx------ 1 me me 4519 May 16 10:25 somescript.pl
Сделайте сценарий оболочки, который называет 'somescript.pl', и сохраните его в/bin/:
me@OB1:/bin$ sudo cat somescript.sh
[sudo] password for me:
#!/bin/bash
sudo -u me /home/me/Desktop/script/somescript.pl $@
ДОПОЛНИТЕЛЬНЫЙ ШАГ Делает символьную ссылку на somescript.sh в/bin/:
sudo ln -s /bin/somescript.sh /bin/somescript
Удостоверьтесь, что сценарий оболочки читаем/исполняем пользователю (никакой доступ для записи):
sudo chmod 755 /bin/somescript.sh
me@OB1:/bin$ ls -l somescript*
lrwxrwxrwx 1 root root 14 May 28 16:11 somescript -> /bin/somescript.sh
-rwxr-xr-x 1 root root 184 May 28 18:45 somescript.sh
Сделайте исключение в/etc/sudoer путем добавления этих строк:
# User alias specification
User_Alias SCRIPTUSER = me, someusername, anotheruser
# Run script as the user 'me' without asking for password
SCRIPTUSER ALL = (me) NOPASSWD: /home/me/Desktop/script/somescript.pl
ДОКАЗАТЕЛЬСТВО В ПУДИНГЕ:
someuser@OB1:~$ somescript
***You can run me, but can't see my private parts!***
someuser@OB1:~$ cat /home/me/Desktop/script/somescript.pl
cat: /home/me/Desktop/script/somescript.pl: Permission denied
Этот метод должен быть лучше, чем попытка запутать с Filter::Crypto
или PAR::Filter::Crypto
или Acme::Bleach
который может быть инвертирован спроектированный решительным пользователем. То же идет для компиляции Вашего сценария к двоичному файлу. Сообщите мне, находите ли Вы что-то не так с этим методом. Для большего количества опытных пользователей можно хотеть удалить раздел User_Alias полностью и заменить SCRIPTUSER '%groupname'. Таким образом, можно управлять пользователями сценария с usermod
команда.
Можно установить полномочия файла с командой chmod. И пользователь root и владелец файла могут установить полномочия файла. chmod имеет два режима, символьные и числовые.
Во-первых, Вы решаете, устанавливаете ли Вы полномочия для пользователя (u), группа (g), другие (o), или все три (a). Затем Вы или добавляете разрешение (+), удаляете его (-), или вытираете предыдущие полномочия и добавляете новый (=). Затем, Вы решаете, устанавливаете ли Вы разрешение (r) чтения, запишите разрешение (w) или выполните разрешение (x). Наконец, Вы скажете chmod, какие полномочия файла Вы хотите изменить.
Вот несколько примеров.
Вытрите все полномочия, но добавьте разрешение чтения для всех:
$ chmod a=r filename
После команды полномочия файла были бы-r - r - r--
Добавьте выполняют полномочия для группы:
$ chmod g+x filename
Теперь, полномочия файла были бы-r - r-xr-
Добавьте и запись и выполните полномочия для владельца файла. Отметьте, как можно установить больше чем одно разрешение одновременно:
$ chmod u+wx имя файла
После этого полномочия файла будут-rwxr-xr-
Удалите выполнить разрешение и от владельца и от группы файла. Отметьте, снова, как можно установить их обоих сразу:
$ chmod ug-x имя файла
Теперь, полномочия являются-rw-r - r--
Это - справочник для установки полномочий файла в символьном режиме:
Which user?
u user/owner
g group
o other
a all
What to do?
+ add this permission
- remove this permission
= set exactly this permission
Which permissions?
r read
w write
x execute
chmod
. Это не отвечает на вопрос.
– Scott
18.02.2015, 22:12