Дозвіл файлів виконується лише


12

Як я можу встановити файл, який можна виконувати лише для інших користувачів, але не читабельний / для запису, причиною цього я щось виконую зі своїм ім'ям користувача, але не хочу видавати пароль. Я намагався :

chmod 777 testfile
chmod a=x
chmod ugo+x

Мені все-таки отримують відмову в дозволі під час виконання в якості іншого користувача.


А як щодо виконання НЕ як іншого користувача? А це сценарій чи двійкова програма? Сценарії повинні читати перекладач.
psusi

У вас є шебанг у верхній частині файлу? #! / bin / sh
J Барон

Відповіді:


10

Вам потрібно як читати, так і виконувати дозволи на сценарій, щоб мати можливість його виконувати. Якщо ви не можете прочитати вміст сценарію, ви також не можете його виконати.

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

Дійсно, оновлений, щоб відобразити, що це правда для сценаріїв, які враховують оригінальний питання, - це те, що я підозрюю, що це так.
EightBitTony

13

У попередніх твердженнях є половина правди. Ви можете налаштувати сценарій так, щоб він не читався користувачем, але все-таки виконувався. Процес трохи промальовано, але це можливо, зробивши виняток у / 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 на "% name name". Таким чином ви можете керувати своїми сценаріями користувачами usermodкомандою.


6

Якщо ви дозволите іншим користувачам виконувати програму, вони можуть знати, що програма робить, чи читається програмний файл чи ні. Все, що їм потрібно зробити, - це вказати налагоджувач (або програму, схожу на відладчик, наприклад strace). Бінарний виконуваний файл може працювати, якщо він виконуваний і не читабельний (скрипт не може, тому що інтерпретатор повинен мати можливість читати сценарій), але це не дає вам ніякої безпеки.

Якщо ви хочете, щоб інші могли виконувати вашу програму як чорний ящик, не даючи їм побачити, що саме робить програма, потрібно надати своєму сценарію підвищені привілеї: зробити його налаштованим для вашого користувача. Тільки root може використовувати засоби налагодження у встановлених програмах. Зауважте, що написати безпечні налаштовані програми непросто, і більшість мов не підходять; див. Дозволити налаштування на скриптах оболонок для отримання додаткових пояснень. Якщо ви збираєтеся писати налаштовану програму, я настійно рекомендую Perl, який має режим (режим taint), який явно призначений для того, щоб зробити можливими безпечні сценарії налаштування.


-1

Ви можете встановити дозволи файлів за допомогою команди chmod. Як кореневий користувач, так і власник файлу можуть встановлювати дозволи файлу. 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. Це не дає відповіді на запитання.
Скотт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.