Dateiberechtigung nur ausführen

12

Wie kann ich festlegen, dass die Datei nur für andere Benutzer ausführbar, aber nicht lesbar / beschreibbar ist? Der Grund dafür ist, dass ich etwas mit meinem Benutzernamen ausführe, aber das Kennwort nicht preisgeben möchte. Ich habe es versucht :

chmod 777 testfile
chmod a=x
chmod ugo+x

Bei der Ausführung als anderer Benutzer wird mir immer noch die Berechtigung verweigert.

c0mrade
quelle
Was ist, wenn Sie es NICHT als anderer Benutzer ausführen? Und ist das ein Skript oder ein Binärprogramm? Skripte müssen vom Dolmetscher gelesen werden.
Psusi
Haben Sie einen Knall oben in der Datei? #! / bin / sh
J Baron

Antworten:

10

Sie benötigen Lese- und Ausführungsberechtigungen für ein Skript, um es ausführen zu können. Wenn Sie den Inhalt des Skripts nicht lesen können, können Sie es auch nicht ausführen.

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
quelle
In der Tat aktualisiert, um zu reflektieren, dass es für Skripte gilt, die unter Berücksichtigung der ursprünglichen Frage meiner Meinung nach der Fall sind.
EightBitTony
12

Die vorherigen Aussagen haben eine halbe Wahrheit. Sie können ein Skript so einrichten, dass es vom Benutzer nicht gelesen, aber dennoch ausführbar ist. Der Vorgang ist etwas langwierig, aber Sie können eine Ausnahme in / etc / sudoer machen, damit der Benutzer das Skript vorübergehend als Sie selbst ausführen kann, ohne zur Eingabe eines Kennworts aufgefordert zu werden. Beispiel unten:

Einige Skripte, die ich mit einem Benutzer teilen möchte:

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

Erstellen Sie ein Shell-Skript, das 'somescript.pl' aufruft, und speichern Sie es in / bin /:

me@OB1:/bin$ sudo cat somescript.sh
[sudo] password for me: 
#!/bin/bash
sudo -u me /home/me/Desktop/script/somescript.pl $@

OPTIONALER SCHRITT Erstellen Sie einen Symlink zu somescript.sh in / bin /:

sudo ln -s /bin/somescript.sh /bin/somescript

Stellen Sie sicher, dass das Shell-Skript für den Benutzer lesbar / ausführbar ist (kein Schreibzugriff):

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

Machen Sie eine Ausnahme in / etc / sudoer, indem Sie die folgenden Zeilen hinzufügen:

# 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

Beweis in der Pudding:

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

Diese Methode sollte besser sein als der Versuch, sie zu verschleiern Filter::Cryptooder PAR::Filter::Cryptooder Acme::Bleachdie von einem bestimmten Benutzer rückgängig gemacht werden kann. Gleiches gilt für das Kompilieren Ihres Skripts in Binärform. Lassen Sie mich wissen, wenn Sie mit dieser Methode etwas falsch finden. Für fortgeschrittene Benutzer möchten Sie möglicherweise den Abschnitt User_Alias ​​vollständig entfernen und SCRIPTUSER durch '% groupname' ersetzen. Auf diese Weise können Sie Ihre Skriptbenutzer mit usermodBefehl verwalten.

Santana
quelle
6

Wenn Sie andere Benutzer ein Programm ausführen lassen, können sie alles wissen, was das Programm tut, ob die Programmdatei lesbar ist oder nicht. Sie müssen lediglich auf einen Debugger (oder ein debuggerähnliches Programm wie strace) verweisen . Eine ausführbare Binärdatei kann ausgeführt werden, wenn sie ausführbar und nicht lesbar ist (ein Skript kann dies nicht, da der Interpreter das Skript lesen muss), dies gibt Ihnen jedoch keine Sicherheit.

Wenn Sie möchten, dass andere Benutzer Ihr Programm als Black Box ausführen können, ohne dass sie genau sehen, was das Programm tut, müssen Sie Ihrem Skript erhöhte Berechtigungen erteilen: Legen Sie es für Ihren Benutzer fest. Nur root kann Debugging-Tools für setuid-Programme verwenden. Beachten Sie, dass das Schreiben sicherer Setuid-Programme nicht einfach ist und die meisten Sprachen nicht geeignet sind. siehe Lassen Sie setuid auf Shell - Skripten für weitere Erklärungen. Wenn Sie ein Setuid-Programm schreiben möchten, empfehle ich dringend Perl, das über einen Modus (Taint-Modus) verfügt, der explizit sichere Setuid-Skripte ermöglichen soll.

Gilles 'SO - hör auf böse zu sein'
quelle
-1

Sie können Dateiberechtigungen mit dem Befehl chmod festlegen. Sowohl der Root-Benutzer als auch der Dateieigentümer können Dateiberechtigungen festlegen. chmod hat zwei Modi, symbolisch und numerisch.

Zunächst entscheiden Sie, ob Sie Berechtigungen für den Benutzer (u), die Gruppe (g), andere (o) oder alle drei (a) festlegen. Anschließend fügen Sie entweder eine Berechtigung (+) hinzu, entfernen sie (-) oder löschen die vorherigen Berechtigungen und fügen eine neue hinzu (=). Als Nächstes entscheiden Sie, ob Sie die Leseberechtigung (r), die Schreibberechtigung (w) oder die Ausführungsberechtigung (x) festlegen. Zuletzt teilen Sie chmod mit, welche Dateiberechtigungen Sie ändern möchten.

Hier einige Beispiele.

Löschen Sie alle Berechtigungen, aber fügen Sie Leseberechtigungen für alle hinzu:

$ chmod a=r filename

Nach dem Befehl lauten die Berechtigungen der Datei -r - r - r--

Ausführungsberechtigungen für Gruppe hinzufügen:

$ chmod g+x filename

Jetzt wären die Berechtigungen der Datei -r - r-xr--

Fügen Sie Schreib- und Ausführungsberechtigungen für den Eigentümer der Datei hinzu. Beachten Sie, wie Sie mehrere Berechtigungen gleichzeitig festlegen können:

$ chmod u + wx Dateiname

Danach lauten die Dateiberechtigungen -rwxr-xr--

Entfernen Sie die Ausführungsberechtigung sowohl vom Eigentümer als auch von der Gruppe der Datei. Beachten Sie erneut, wie Sie beide gleichzeitig einstellen können:

$ chmod ug-x Dateiname

Jetzt sind die Berechtigungen -rw-r - r--

Dies ist eine Kurzreferenz zum Festlegen von Dateiberechtigungen im symbolischen Modus:

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
J Baron
quelle
Aus der Frage geht hervor, dass das OP versteht, wie man es benutzt chmod. Dies beantwortet die Frage nicht.
Scott