Permiso de archivo ejecutar solo

12

¿Cómo puedo configurar el archivo para que sea ejecutable solo para otros usuarios pero no legible / editable? La razón de esto es que estoy ejecutando algo con mi nombre de usuario pero no quiero dar la contraseña. Lo intenté :

chmod 777 testfile
chmod a=x
chmod ugo+x

Todavía obtengo permiso denegado cuando ejecuto como otro usuario.

c0mrade
fuente
¿Qué pasa al ejecutarlo NO como otro usuario? ¿Y es esto un script o un programa binario? Los guiones deben ser leídos por el intérprete.
psusi
¿Tienes un shebang en la parte superior del archivo? #! / bin / sh
J Baron

Respuestas:

10

Necesita permisos de lectura y ejecución en un script para poder ejecutarlo. Si no puede leer el contenido del script, tampoco podrá ejecutarlo.

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
OchoBitTony
fuente
De hecho, actualizado para reflejar que es cierto para los guiones que, teniendo en cuenta la pregunta original, es lo que sospecho es el caso.
EightBitTony
12

Hay una verdad a medias en las declaraciones anteriores. Puede configurar una secuencia de comandos para que el usuario no pueda leerla, pero aún sea ejecutable. El proceso es un poco prolongado, pero se puede hacer haciendo una excepción en / etc / sudoer para que el usuario pueda ejecutar el script como usted temporalmente sin que se le solicite una contraseña. Ejemplo a continuación:

Algunas secuencias de comandos que quiero compartir con un usuario:

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

Cree un script de shell que llame a 'somescript.pl' y guárdelo en / bin /:

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

PASO OPCIONAL Haga un enlace simbólico a somescript.sh en / bin /:

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

Asegúrese de que el script de shell sea legible / ejecutable para el usuario (sin acceso de escritura):

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

Haga una excepción en / etc / sudoer agregando estas líneas:

# 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

PRUEBA EN EL PUDIN:

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

Este método debe ser mejor que intentar confundir con Filter::Cryptoo PAR::Filter::Cryptoo Acme::Bleachque puede ser revertida por ingeniería por un usuario determinado. Lo mismo vale para compilar su script en binario. Avísame si encuentras algo mal con este método. Para usuarios más avanzados, es posible que desee eliminar la sección User_Alias ​​por completo y reemplazar SCRIPTUSER con '% groupname'. De esta manera puede administrar sus usuarios de script con usermodcomando.

santana
fuente
6

Si deja que otros usuarios ejecuten un programa, pueden saber todo lo que el programa está haciendo, ya sea que el archivo del programa sea legible o no. Todo lo que necesitan hacer es señalar un depurador (o un programa similar a un depurador strace). Un ejecutable binario puede ejecutarse si es ejecutable y no es legible (un script no puede, porque el intérprete necesita poder leer el script), pero esto no le brinda ninguna seguridad.

Si desea que otros puedan ejecutar su programa como una caja negra, sin dejar que vean exactamente lo que está haciendo el programa, debe otorgarle privilegios elevados a su script: configúrelo para su usuario. Solo root puede usar herramientas de depuración en programas setuid. Tenga en cuenta que escribir programas setuid seguros no es fácil y la mayoría de los idiomas no son adecuados; vea Permitir setuid en scripts de shell para más explicaciones. Si va a escribir un programa setuid, le recomiendo encarecidamente Perl, que tiene un modo (modo taint) que tiene la intención explícita de hacer posibles los scripts setuid seguros.

Gilles 'SO- deja de ser malvado'
fuente
-1

Puede establecer permisos de archivo con el comando chmod. Tanto el usuario root como el propietario del archivo pueden establecer permisos de archivo. chmod tiene dos modos, simbólico y numérico.

Primero, usted decide si establece permisos para el usuario (u), el grupo (g), otros (o) o los tres (a). Luego, agregue un permiso (+), elimínelo (-) o elimine los permisos anteriores y agregue uno nuevo (=). Luego, usted decide si establece el permiso de lectura (r), el permiso de escritura (w) o el permiso de ejecución (x). Por último, le dirá a chmod qué permisos de archivo desea cambiar.

Aquí están algunos ejemplos.

Elimine todos los permisos pero agregue permisos de lectura para todos:

$ chmod a=r filename

Después del comando, los permisos del archivo serían -r - r - r--

Agregue permisos de ejecución para el grupo:

$ chmod g+x filename

Ahora, los permisos del archivo serían -r - r-xr--

Agregue permisos de escritura y ejecución para el propietario del archivo. Observe cómo puede establecer más de un permiso al mismo tiempo:

$ chmod u + wx nombre de archivo

Después de esto, los permisos del archivo serán -rwxr-xr--

Elimine el permiso de ejecución tanto del propietario como del grupo del archivo. Tenga en cuenta, nuevamente, cómo puede configurarlos a la vez:

$ chmod ug-x nombre de archivo

Ahora, los permisos son -rw-r - r--

Esta es una referencia rápida para configurar permisos de archivos en modo simbólico:

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
fuente
De la pregunta se desprende que el OP entiende cómo usar chmod. Esto no responde la pregunta.
Scott