![](https://seccdn.libravatar.org/avatar/36545824f598e466583a81e838e79f14.jpg?s=120&d=mm&r=g)
Hi, kurz vor Weihnachten noch eine - wahrscheinlich dumme - Frage: Ich möchte ein Kommando mit Wildcard sudo ausführen, mal ganz trivial: sudo ls *.jpg das schlägt mit $? == 1 fehl, leider keine Ausgabe auf stderr. Wie mache ich das denn richtig? Diverse Quotings, die Nutzung der Optionen -i und -s und -- haben mich auch nicht weitergebracht. Irgendwo steh ich auf dem Schlauch... THX für jeden Tipp cu jth -- www.teddylinx.de -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
![](https://seccdn.libravatar.org/avatar/65f6637f0abadc8a2f09ebecb9ec8ffc.jpg?s=120&d=mm&r=g)
Am 22.12.2016 um 16:22 schrieb Joerg Thuemmler:
Hi,
kurz vor Weihnachten noch eine - wahrscheinlich dumme - Frage:
Ich möchte ein Kommando mit Wildcard sudo ausführen, mal ganz trivial:
sudo ls *.jpg
das schlägt mit $? == 1 fehl, leider keine Ausgabe auf stderr. Wie mache ich das denn richtig? Diverse Quotings, die Nutzung der Optionen -i und -s und -- haben mich auch nicht weitergebracht. Irgendwo steh ich auf dem Schlauch...
Seltsam, bei mir funktioniert das tadellos, sowohl auf meiner 13.1 als auch auf einem Debian 8
THX für jeden Tipp
Kann ich dir leider keinen geben, scheint bei dir irgendetwas zerkonfiguriert zu sein Gruß Manfred -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
![](https://seccdn.libravatar.org/avatar/ffcbb0f1ce7068f1fde373b35ab383f4.jpg?s=120&d=mm&r=g)
Joerg Thuemmler wrote:
kurz vor Weihnachten noch eine - wahrscheinlich dumme - Frage:
Ich möchte ein Kommando mit Wildcard sudo ausführen, mal ganz trivial:
sudo ls *.jpg
das schlägt mit $? == 1 fehl, leider keine Ausgabe auf stderr. Wie mache ich das denn richtig? Diverse Quotings, die Nutzung der Optionen -i und -s und -- haben mich auch nicht weitergebracht. Irgendwo steh ich auf dem Schlauch...
Kurze Verständnisfrage dazu: Du willst für sudo explizit das Kommando "ls *.jpg" erlauben? Oder hast du "ls" für sudo freigegeben und dein Kommando oben geht nicht? Letzteres müsste einwandfrei funktionieren; bei erstem wüsste ich auch nicht weiter. Andreas
![](https://seccdn.libravatar.org/avatar/36545824f598e466583a81e838e79f14.jpg?s=120&d=mm&r=g)
Am 23.12.2016 um 08:45 schrieb Kyek, Andreas, Vodafone DE (External):
Joerg Thuemmler wrote:
kurz vor Weihnachten noch eine - wahrscheinlich dumme - Frage:
Ich möchte ein Kommando mit Wildcard sudo ausführen, mal ganz trivial:
sudo ls *.jpg
das schlägt mit $? == 1 fehl, leider keine Ausgabe auf stderr. Wie mache ich das denn richtig? Diverse Quotings, die Nutzung der Optionen -i und -s und -- haben mich auch nicht weitergebracht. Irgendwo steh ich auf dem Schlauch...
Kurze Verständnisfrage dazu:
Du willst für sudo explizit das Kommando "ls *.jpg" erlauben? Oder hast du "ls" für sudo freigegeben und dein Kommando oben geht nicht?
Letzteres müsste einwandfrei funktionieren; bei erstem wüsste ich auch nicht weiter.
Andreas
Hi, nein, ich will das gar nicht über /etc/sudoers machen. "ls" ist auch nur ein Beispiel, chmod, chown... reagieren genauso. Das Ganze soll in einem Script laufen, genauer gesagt, es lief bis vor einer Weile: user=`whoami` cd $DIR # sudo gphoto2 --get-file $result # sudo gphoto2 -R --delete-file $result echo $user # test pwd # test sudo ls -l *.JPG # test # sudo chown -v $user.users *.JPG echo $? # test Normalerweise fragt das System beim ersten sudo gphoto... nach dem root-PW und dann nicht mehr und führt sudo chown... klaglos aus. Seit einiger Zeit nicht mehr, habe es leider nicht sofort bemerkt, weil ich erst später beim Bearbeiten der JPGs gemerkt habe, dass sie immer noch root gehören. Wenn man statt des "*.JPG" z.B. test.JPG nimmt, fragt das System (wenn die gphotos auskommentiert sind) nach dem root-PW und führt ls aus. Fast würde ich sagen, sudo hat eine Sperre für Wildcards bekommen...? Aber nur, wenn es in scripts läuft? ??? cu jth -- www.teddylinx.de -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
![](https://seccdn.libravatar.org/avatar/36545824f598e466583a81e838e79f14.jpg?s=120&d=mm&r=g)
Am 28.12.2016 um 08:43 schrieb Joerg Thuemmler:
Am 23.12.2016 um 08:45 schrieb Kyek, Andreas, Vodafone DE (External):
Joerg Thuemmler wrote:
kurz vor Weihnachten noch eine - wahrscheinlich dumme - Frage:
Ich möchte ein Kommando mit Wildcard sudo ausführen, mal ganz trivial:
sudo ls *.jpg
das schlägt mit $? == 1 fehl, leider keine Ausgabe auf stderr. Wie mache ich das denn richtig? Diverse Quotings, die Nutzung der Optionen -i und -s und -- haben mich auch nicht weitergebracht. Irgendwo steh ich auf dem Schlauch...
Kurze Verständnisfrage dazu:
Du willst für sudo explizit das Kommando "ls *.jpg" erlauben? Oder hast du "ls" für sudo freigegeben und dein Kommando oben geht nicht?
Letzteres müsste einwandfrei funktionieren; bei erstem wüsste ich auch nicht weiter.
Andreas
Hi,
nein, ich will das gar nicht über /etc/sudoers machen. "ls" ist auch nur ein Beispiel, chmod, chown... reagieren genauso. Das Ganze soll in einem Script laufen, genauer gesagt, es lief bis vor einer Weile:
user=`whoami` cd $DIR # sudo gphoto2 --get-file $result # sudo gphoto2 -R --delete-file $result echo $user # test pwd # test sudo ls -l *.JPG # test # sudo chown -v $user.users *.JPG echo $? # test
Normalerweise fragt das System beim ersten sudo gphoto... nach dem root-PW und dann nicht mehr und führt sudo chown... klaglos aus. Seit einiger Zeit nicht mehr, habe es leider nicht sofort bemerkt, weil ich erst später beim Bearbeiten der JPGs gemerkt habe, dass sie immer noch root gehören. Wenn man statt des "*.JPG" z.B. test.JPG nimmt, fragt das System (wenn die gphotos auskommentiert sind) nach dem root-PW und führt ls aus.
Fast würde ich sagen, sudo hat eine Sperre für Wildcards bekommen...? Aber nur, wenn es in scripts läuft? ???
cu jth
Hi nochmal, ich habe das jetzt umgangen, weil ich es nicht lösen konnte: user=`whoami` newfiles=`ls -1 *.JPG | tr '\n' ' '` for newfile in $newfiles do sudo chown $user.users $newfile done korrekterweise werde ich beim ersten sudo nach dem root-PW gefragt, dann werden alle chowns korrekt ausgeführt. Kann mir das nur so erklären, dass für sudo Wildcards gesperrt sind, evt. nur, wenn man den Befehl _nicht_ in /etc/sudoers hat (was ja hier gewollt so ist). cu jth -- www.teddylinx.de -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
![](https://seccdn.libravatar.org/avatar/d3cd6102005a21f892d5f0bc526fb343.jpg?s=120&d=mm&r=g)
On Wednesday 2017-01-04 09:58, Joerg Thuemmler wrote:
Hi nochmal,
ich habe das jetzt umgangen, weil ich es nicht lösen konnte:
user=`whoami` newfiles=`ls -1 *.JPG | tr '\n' ' '` for newfile in $newfiles do sudo chown $user.users $newfile done
korrekterweise werde ich beim ersten sudo nach dem root-PW gefragt, dann werden alle chowns korrekt ausgeführt.
Kann mir das nur so erklären, dass für sudo Wildcards gesperrt sind, evt. nur, wenn man den Befehl _nicht_ in /etc/sudoers hat (was ja hier gewollt so ist).
cu jth
Keine Lösung, aber Erklärung: Die Wildcard wird durch die Shell durch die Dateinamen ersetzt, sodass der ausgefuhrte Befehl eben "chown foo:bar a.JPG b.JPG c.JPG" und nicht "chown foo:bar *.JPG" (was dann gegen die /etc/sudoers geprüft werden könnte) ist. Dass die /etc/sudoers wildcards unterstützt, würde ich stark anzweifeln, da dies eine riesige sicherheitslücke darstellen würde, hinter dem * könnte sich z.b. ein weiterer Befehl in backticks verbergen.
![](https://seccdn.libravatar.org/avatar/36545824f598e466583a81e838e79f14.jpg?s=120&d=mm&r=g)
Am 04.01.2017 um 10:05 schrieb Paul Neuwirth:
On Wednesday 2017-01-04 09:58, Joerg Thuemmler wrote:
Hi nochmal,
ich habe das jetzt umgangen, weil ich es nicht lösen konnte:
user=`whoami` newfiles=`ls -1 *.JPG | tr '\n' ' '` for newfile in $newfiles do sudo chown $user.users $newfile done
korrekterweise werde ich beim ersten sudo nach dem root-PW gefragt, dann werden alle chowns korrekt ausgeführt.
Kann mir das nur so erklären, dass für sudo Wildcards gesperrt sind, evt. nur, wenn man den Befehl _nicht_ in /etc/sudoers hat (was ja hier gewollt so ist).
cu jth
Nochmal grundsätzlich: der chown-Befehl steht _nicht_ in /etc/sudoers. Ich will nach dem PW gefragt werden.
Keine Lösung, aber Erklärung: Die Wildcard wird durch die Shell durch die Dateinamen ersetzt, sodass der ausgefuhrte Befehl eben "chown foo:bar a.JPG b.JPG c.JPG" und nicht "chown foo:bar *.JPG"
Ja, deshalb habe ich es ja mit diversen Backslashs und Quotings probiert, aber das führte auch zu nichts. Entweder wurde literal eine Datei "*.JPG" gesucht, dann kam eine passende Fehlermeldung, oder es kam keine und der $? war einfach 1 (was dann gegen die /etc/sudoers geprüft werden
könnte) ist. Dass die /etc/sudoers wildcards unterstützt, würde ich stark anzweifeln, da dies eine riesige sicherheitslücke darstellen würde, hinter dem * könnte sich z.b. ein weiterer Befehl in backticks verbergen.
Ja, sehe ich auch so. Habe ich auch nicht näher untersucht, würde ich auch nicht anwenden, wenn es möglich wäre. Prinzipiell scheint mir das Format der /etc/sudoers nicht trivial ;-) Aber, wie gesagt, es geht hier ja nicht um die /etc/sudoers, man kann ja prinzipiell jeden Befehl einfach so mit sudo ausführen lassen und braucht dann halt das root-PW. Egal, der workaround funzt ja. cu jth -- www.teddylinx.de -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
![](https://seccdn.libravatar.org/avatar/638c5f9b9a41e53d4663197a58261c49.jpg?s=120&d=mm&r=g)
Hallo, Am Wed, 04 Jan 2017, Joerg Thuemmler schrieb:
Am 04.01.2017 um 10:05 schrieb Paul Neuwirth:
On Wednesday 2017-01-04 09:58, Joerg Thuemmler wrote:
user=`whoami` newfiles=`ls -1 *.JPG | tr '\n' ' '` for newfile in $newfiles do
Das fällt dir auf die Füße, wenn Leerzeichen etc. in Dateinamen auftauchen.
sudo chown $user.users $newfile
Speziell wenn du hier nicht quotest. [..]
Dass die /etc/sudoers wildcards unterstützt, würde ich stark anzweifeln, da dies eine riesige sicherheitslücke darstellen würde, hinter dem * könnte sich z.b. ein weiterer Befehl in backticks verbergen.
==== sudoers(5) ==== A Cmnd_List is a list of one or more commandnames, directories, and other aliases. A commandname is a fully qualified file name which may include shell-style wildcards (see the Wildcards section below). A simple file name allows the user to run the command with any arguments he/she wishes. However, you may also specify command line arguments (including wildcards). Alternately, you can specify "" to indicate that the command may only be run without command line arguments. [..] Wildcards sudo allows shell-style wildcards (aka meta or glob characters) to be used in host names, path names and command line arguments in the sudoers file. Wildcard matching is done via the POSIX glob(3) and fnmatch(3) routines. Note that these are not regular expressions. [..] Note that a forward slash ('/') will not be matched by wildcards used in the path name. When matching the command line arguments, however, a slash does get matched by wildcards. This is to make a path like: /usr/bin/* match /usr/bin/who but not /usr/bin/X11/xterm. Exceptions to wildcard rules The following exceptions apply to the above rules: "" If the empty string "" is the only command line argument in the sudoers entry it means that command is not allowed to be run with any arguments. ==== Bzgl. glob -> siehe 'man 7 glob'.
Egal, der workaround funzt ja.
Teste mal: sudo sh -c 'chown *.JPG' Würde mich wundern, wenn das nicht klappt. Die Shell drumrum brauchst du, weil chown den '*' ja nicht selber expandiert. HTH, -dnh -- "Stef, if you were any stupider you'd be on life support." -- Miranda on userfriendly -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
![](https://seccdn.libravatar.org/avatar/36545824f598e466583a81e838e79f14.jpg?s=120&d=mm&r=g)
Am 04.01.2017 um 20:54 schrieb David Haller:
Hallo,
Am Wed, 04 Jan 2017, Joerg Thuemmler schrieb:
Am 04.01.2017 um 10:05 schrieb Paul Neuwirth:
On Wednesday 2017-01-04 09:58, Joerg Thuemmler wrote:
user=`whoami` newfiles=`ls -1 *.JPG | tr '\n' ' '` for newfile in $newfiles do
Das fällt dir auf die Füße, wenn Leerzeichen etc. in Dateinamen auftauchen.
ja, ist klar. Sind Kamerabilder, haben nie Leerzeichen.
sudo chown $user.users $newfile
Speziell wenn du hier nicht quotest.
s.o.
[..]
Dass die /etc/sudoers wildcards unterstützt, würde ich stark anzweifeln, da dies eine riesige sicherheitslücke darstellen würde, hinter dem * könnte sich z.b. ein weiterer Befehl in backticks verbergen.
==== sudoers(5) ==== A Cmnd_List is a list of one or more commandnames, directories, and other aliases. A commandname is a fully qualified file name which may include shell-style wildcards (see the Wildcards section below). A simple file name allows the user to run the command with any arguments he/she wishes. However, you may also specify command line arguments (including wildcards). Alternately, you can specify "" to indicate that the command may only be run without command line arguments. [..] Wildcards sudo allows shell-style wildcards (aka meta or glob characters) to be used in host names, path names and command line arguments in the sudoers file. Wildcard matching is done via the POSIX glob(3) and fnmatch(3) routines. Note that these are not regular expressions. [..] Note that a forward slash ('/') will not be matched by wildcards used in the path name. When matching the command line arguments, however, a slash does get matched by wildcards. This is to make a path like:
/usr/bin/*
match /usr/bin/who but not /usr/bin/X11/xterm.
Exceptions to wildcard rules The following exceptions apply to the above rules:
"" If the empty string "" is the only command line argument in the sudoers entry it means that command is not allowed to be run with any arguments. ====
Bzgl. glob -> siehe 'man 7 glob'.
Danke für den Hinweis. Werd trotzdem drauf verzichten.
Egal, der workaround funzt ja.
Teste mal:
sudo sh -c 'chown *.JPG'
Würde mich wundern, wenn das nicht klappt. Die Shell drumrum brauchst du, weil chown den '*' ja nicht selber expandiert.
HTH, -dnh
Du hast - wie immer - den Punkt getroffen: bei "sudo chown" gibt es gar keine Shell, die Wildcards interpretieren könnte. Hätte ich mal drauf kommen können, dass hier ein binary ein binary aufruft ;-( Danke cu jth -- www.teddylinx.de -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
participants (5)
-
David Haller
-
Joerg Thuemmler
-
Kyek, Andreas, Vodafone DE (External)
-
Manfred Kreisl
-
Paul Neuwirth