¿Por qué apt-get requiere sudo?

12

Esta es probablemente una pregunta estúpida, pero recientemente me di cuenta de que no tengo idea de por qué no hay una funcionalidad de usuario único con apt-get.

Respuestas que no estoy buscando:

  • "Es porque apt escribe en directorios de nivel de sistema". Este es el nivel de superficie por qué, pero estoy buscando un nivel más profundo. ¿Hay algo que bloquee fundamentalmente un entorno de usuario único (a la pip + virtualenv)?
  • "Puedes construir desde la fuente". Esta es una solución, pero no aborda mi pregunta. No quiero solucionar un problema a corto plazo, y de todos modos tengo acceso de root en todas mis máquinas.
PattimusPrime
fuente
Espero que sepa que puede compilar cualquier paquete desde la fuente en su directorio de inicio.
jobin
Correcto, pero estoy buscando por qué subyace la limitación apt-get. Construir desde la fuente no responde eso.
PattimusPrime
1
Creo que la pregunta que realmente hace es "¿Por qué no se puede reubicar la mayoría del software de Linux?". Sería perfectamente posible permitir que apt-get instale software en directorios locales del usuario, pero dado que la mayoría del software no es compatible con esto, no tendría mucho sentido hacerlo.

Respuestas:

10

¿Por qué apt-get requiere sudo?

No siempre. Se puede usar perfectamente apt-getsin sudo. Hay instancias en las que no necesita sudonada, como el uso apt-get downloadque descarga un paquete a su directorio actual , apt-get sourceque descarga los archivos de fuentes de Debian a su directorio actual, changelogque descarga e imprime el registro de cambios de un paquete dado y cualquier comando que tenga el --simulate/ --dry-run/ --no-act(en el caso de installque también lo necesite --no-download).

Esto se debe a que estas acciones / comandos no requieren escribir directorios del sistema.

Ahora, ¿por qué apt-getnecesita sudo? En realidad no lo hace. Puede deshacerse de apt-get, descargar un paquete wgety usar dpkg --extracty extraer el paquete en el directorio que desee. También hay --instdircuál debería funcionar para el paquete binario solamente.

Ahora, ¿por qué este no es el predeterminado? Porque es un dolor. Para hacer lo que desea, tendríamos que volver a empaquetar cada paquete dos veces, uno de la manera correcta y otro para hacer lo que desea. En la compilación, los archivos binarios normalmente necesitan saber dónde están los archivos y las bibliotecas que necesitan (en algunos casos, esto está codificado en la compilación).

Ahora, ¿qué puedes hacer en su lugar? Simplemente elimine algún entorno a la virtualenv, donde puede instalar paquetes sin root.

En resumen, esta no es la forma en que se debe usar apt-get, y no conozco otro administrador de paquetes similar a apt-get que le permita hacer eso. Al final del día, apt-getes solo un front-end para dpkg que podría hacer algo de esto.

Braiam
fuente
3

La información en el paquete en sí determina dónde se instalarán los archivos, por lo que necesita sudoescribir /y cambiar la base de datos del paquete.

Cuando está instalando paquetes, está instalando archivos binarios preconstruidos y configuraciones asociadas y meta archivos y scripts que son partes esenciales del paquete. Estos scripts y archivos de configuración están estrechamente vinculados a las dependencias y al resto del sistema. No querrá cambiarlos a la ligera a menos que sepa exactamente lo que está haciendo.

Si está en un sistema, digamos en el trabajo, donde no tiene sudoacceso, puede compilar desde la fuente y establecer el directorio de instalación en su hogar. Entonces, no hay necesidad de hacerlo sudo. Cuando está instalando desde el origen, generalmente no está cambiando la base de datos del paquete.

chaskes
fuente
¡Gracias por responder! Sé y uso las soluciones, pero lo que estoy tratando de entender es por qué las he estado usando. Creo que está diciendo que el problema es que la ruta de instalación está codificada por los mantenedores del paquete. ¿Por qué no se puede cambiar esto?
PattimusPrime
2

No es una pregunta estúpida.

Niveles de privilegio en un sistema operativo

Ubuntu, y de hecho cualquier sistema operativo moderno, tiene el concepto de diferentes niveles de privilegio para diferentes programas. El software iniciado por los usuarios generalmente se ejecuta bajo un nivel de privilegio basado en el usuario, que por razones de seguridad no tiene el acceso requerido para modificar el sistema, solo puede modificar archivos que pertenecen a ese usuario.

Para realizar cualquier modificación en el sistema operativo que pueda tener un impacto en el sistema en su conjunto, en lugar de solo los archivos del usuario, se requiere un nivel de privilegio más alto, que en Linux se conoce como privilegios de "superusuario" (o comúnmente llamado "raíz"). Este nivel de privilegio tiene acceso ilimitado a todo el sistema operativo, lo que le permite modificar, o destruir, todos los archivos para todos los usuarios.

El papel de apt-get

Cuando está instalando software a través de apt-get, está instalando software que estará disponible en todo el sistema . Es decir, el software no solo se colocará en el directorio de inicio de un usuario para que solo lo ejecute ese usuario, sino que se instalará en un directorio de aplicaciones de todo el sistema (como en / usr, / etc, / var, etc.) ) para que lo ejecuten todos los usuarios. Para modificar estos directorios necesita privilegios de superusuario. Ningún usuario sin privilegios puede modificar estos directorios, porque de lo contrario el software sin privilegios podría interferir con el sistema.

Si intenta instalar algo usando apt-get sin otorgar privilegios de superusuario apt-get, el primer obstáculo que no podrá superar es obtener un bloqueo para escribir en su propio catálogo de software. Al ser una utilidad de todo el sistema, apt-get mantiene un catálogo de software instalado, que naturalmente requiere privilegios de superusuario para editar, de modo que el software no privilegiado no pueda meterse con él. Pero incluso si de alguna manera pudiera superar este obstáculo (por ejemplo, al cambiar los permisos de los archivos), fallarán muchos pasos adicionales en el camino de la instalación del software, porque la rutina de instalación dependerá de la escritura en varios directorios del sistema.

Con Linux es posible instalar software sin privilegios de superusuario, pero debe escribirlo usted mismo (por ejemplo, scripts de shell) o compilarlo usted mismo y ejecutar los ejecutables compilados directamente. Es más fácil instalarlo en todo el sistema usando apt-get (y otras utilidades basadas en APT como aptitude, synaptic o el centro de software de Ubuntu) si tiene acceso para hacerlo.

thomasrutter
fuente
Gracias por responder y gracias por la minuciosidad. Entiendo la naturaleza de apt-get en todo el sistema, pero lo que estoy tratando de entender es por qué tiene que ser así.
PattimusPrime
1
No tenía que ser así. Simplemente resulta ser la forma en que Ubuntu (y Debian) fueron diseñados. No habría nada que detuviera a alguien que diseñara un sistema operativo donde la forma normal de instalar el software fuera por usuario.
thomasrutter
1

¿Por qué apt-get se instala en directorios (o similares) de forma predeterminada?

La razón simple de esto es que apt-getno decide dónde instalar el software. Lo deciden los desarrolladores y se codifica dentro de la propia aplicación.

¿Puedo instalar en otros directorios?

Sí, puede instalar en otros directorios. Para el software de código abierto, obtenga el código fuente, cambie el directorio de instalación, compílelo, compílelo e instálelo. Por lo general, hay una opción para el configurescript incluido que le permite especificar dónde instalar. Esto suele ser --prefix.

Pero insisto en usar apt-get. ¿Qué hacer ahora?

OKAY. Todavía hay una manera de hacer esto con apt-get, aunque sería demasiado para un usuario final. Sigue los pasos.

  1. Obtén la fuente.
  2. Cambie el directorio de instalación a algo como $HOME.
  3. Compilar y construir.
  4. empaquételo en un archivo .deb .
  5. Crea una cuenta de launchpad.
  6. Firme el código de conducta de ubuntu (no estoy seguro si este es necesario).
  7. crear un PPA por sí mismo .
  8. Cargue el paquete deb a la ppa.
  9. agregue el ppa a sus fuentes.
  10. Ejecutar sudo apt-get update.
  11. Ejecutar apt-get install package.

Eso fue demasiado fácil / difícil. ¿Es posible seleccionar el directorio durante la instalación?

Si y no.

Sí, porque es posible, algunos softwares usan este método, el único que conozco es Qt5. Tiene un archivo .run que, cuando se ejecuta, solicita el directorio de instalación entre muchas otras entradas.

No porque este método no se usa apt-get.

¿Podría hacer esto fácilmente algún día apt-get?

No creo que los desarrolladores apt-gety / o desarrolladores de software estén interesados ​​en hacer esto, pero se puede desarrollar algún software que hará los pasos de origen, cambio, compilación, compilación e instalación automáticamente solo preguntando por el directorio de instalación.

Mi sexto sentido me dice que el comando sería

apt-dont-get install pkg1 pkg2 ...
usuario registrado
fuente
Gracias por la respuesta, es exhaustiva y responde a mi pregunta. Sin embargo, no entiendo por qué no habría interés en desarrollar la funcionalidad de un solo usuario en apt-get. Parece que esa funcionalidad sería muy útil en ciertos casos de uso.
PattimusPrime
¿Buena información, pero un formato de preguntas y respuestas dentro de las preguntas y respuestas ...? :) Idk, ¿tal vez deberías editar en un formato estándar? Solo un pensamiento.
chaskes
@PattimusPrime Tales casos son en su mayoría raros, porque en la mayoría de los casos los administradores instalan todo el software necesario y otros no necesitan instalar el software. Además, los hechos de que construir desde la fuente es muy fácil y que implementar tal funcionalidad sería inútil siempre que los desarrolladores de software no lo implementen allí, el propio software impedirá que los apt-getdesarrolladores lo hagan. Además, muchos programas existentes dependen de otros programas y los buscan en el directorio / usr. Implementar tal funcionalidad requeriría un cambio en todos los softwares existentes que tienen dependencias (esto no va en miles).
Usuario registrado
Es una violación de la política de Debian instalar archivos en $ HOME. Nunca deberías hacer eso. En todo caso, use /opt/packagey chmod el directorio en su lugar.
Braiam
@Braiam: He visto personas que recomiendan instalar paquetes $HOME/opt/si no tienen el privilegio requerido para instalar paquetes en /opt/...
Aditya
-1

Haga que edite archivos que están modificados para que no pueda usarlos. Es posible que pueda modificarlos, así que no puedo recomendar que haga eso

Raring
fuente
Gracias por responder. Estoy buscando por qué solo edita archivos chmodded. Me parece que una funcionalidad de usuario único sería fácil de implementar e inmensamente útil en algunas áreas (por ejemplo, grupos de supercomputación)
PattimusPrime