Sudoers detallados de Linux

uso sudo

Linux es un sistema operativo multiusuario y multitarea , ya menudo hay más de un usuario compartiendo el sistema. Por razones de seguridad, es necesario crear algunos usuarios no root a través de useradd, y solo dejar que tengan permisos incompletos; si es necesario, ejecutar con permisos elevados.

Sudo está aquí para resolver esta necesidad: estos usuarios no root no necesitan saber la contraseña de root, pueden escalar a root y ejecutar algunos comandos que solo root puede ejecutar.

Ejecutar sudo -u <nombre de usuario> <comando> permitirá al usuario actual escalar a la identidad de <nombre de usuario> y luego ejecutar el siguiente <comando>, incluso si <comando> originalmente requiere privilegios de raíz. Cuando la autoridad se eleva a la identidad de <nombre de usuario>, el comando se ejecuta como la identidad de <nombre de usuario>, por lo que el archivo creado pertenece al usuario de <nombre de usuario> de forma predeterminada.

Por lo tanto, cuando userB ejecuta el siguiente comando:

sudo -u usuarioUn toque /tmp/pertenece-a-quién.tmp

El archivo /tmp/belong-to-who.tmp creado pertenece al usuario usuarioA.

Si no hay -u, el usuario raíz se usa de forma predeterminada y la mayoría de las veces sudo es para escalar a la raíz, por lo que -u <nombre de usuario> se puede omitir como: sudo <comando>

Cabe señalar que la contraseña ingresada cuando se ejecuta sudo es la contraseña del usuario actual, no la contraseña de <nombre de usuario>.

sudo -u <nombre de usuario> comparado con su - <nombre de usuario>:

sudo -u <nombre de usuario>: debe ingresar la contraseña del usuario actual, escalar a la identidad de <nombre de usuario> y regresar al usuario actual después de ejecutar el comando;

su - <nombre de usuario>: Ingrese la contraseña del usuario de destino para cambiar al usuario de destino.

Proceso de ejecución del comando Sudo

Cambie el usuario actual al superusuario, o cambie al usuario especificado, y luego ejecute el comando como el superusuario o el usuario especificado para cambiar, y regrese al usuario actual directamente después de que se complete la ejecución.

El proceso de trabajo específico es el siguiente:

Cuando un usuario ejecuta sudo, el sistema buscará activamente el archivo /etc/sudoers para determinar si el usuario tiene autorización para ejecutar sudo.

-> Después de confirmar que el usuario tiene permiso para ejecutar sudo, permita que el usuario ingrese su propia contraseña para confirmar

–> Si la contraseña se ingresa correctamente, comience a ejecutar el comando de seguimiento sudo

Dar al usuario sudo permiso para operar

Los usuarios agregados a través de useradd no tienen permisos de sudo. En sistemas como ubuntu/centos, los usuarios deben agregarse al grupo de administración, al grupo de ruedas o al grupo sudo. Ejecute el siguiente comando como usuario raíz para agregar el usuario al grupo wheel/admin/sudo:

usermod -a -G rueda <nombre de usuario>

Si le indica que el grupo de ruedas no existe, primero debe crear el grupo: groupadd wheel

Explicación detallada del contenido de /etc/sudoers

El control de permisos de sudo se puede ver en el archivo /etc/sudoers. En términos generales, si ve el archivo a través del comando cat /etc/sudoers, verá las siguientes líneas de código:

root TODO=(TODO:TODO) TODO

%rueda TODO=(TODO) TODO

%sudo TODO=(TODO:TODO) TODO

La fórmula del código para editar el archivo /etc/sudoers se puede resumir como:

Host de usuario/grupo autorizado = [(cambiar a qué usuarios o grupos)] [si se requiere verificación de contraseña] comando 1, comando 2,...

Todo el contenido en [ ] se puede omitir; el comando y el comando están separados por un ,, para facilitar la explicación, cada parte de la fórmula se llama campo 1 - campo 5:

Host de usuario/grupo autorizado = [(cambiar a qué usuarios o grupos)] [si se requiere verificación de contraseña] comando 1, comando 2,...

Campo 1 Campo 2 = [(Campo 3)] [Campo 4] Campo 5

El campo 3 y el campo 4 se pueden omitir.

En el ejemplo predeterminado anterior:

El "campo 1" que no comienza con un signo de % significa el "usuario a autorizar", como root en el ejemplo; el que comienza con un signo de % significa el "grupo a autorizar", como la rueda de % group y %sudo group en el ejemplo.

El "Campo 2" indica los hosts que pueden iniciar sesión y TODOS significa todos; si este campo no es TODOS, significa que los usuarios autorizados solo pueden iniciar sesión en este servidor en ciertas máquinas para ejecutar comandos sudo. Por ejemplo: jack mycomputer=/usr/sbin/reboot,/usr/sbin/shutdown significa: el usuario normal jack está en el host (o grupo de hosts) mycomputer y puede ejecutar los comandos de reinicio y apagado a través de sudo. Se omiten "Campo 3" y "Campo 4".

Si se omite el "Campo 3", es equivalente a (raíz:raíz), lo que significa que el privilegio se puede elevar a raíz a través de sudo; si es (TODO) o (TODO:TODO), significa que el privilegio puede ser elevado a (cualquier usuario: cualquier grupo de usuarios). Tenga en cuenta que si no se omite el "Campo 3", debe estar encerrado entre ( ) corchetes dobles. Esto distinguirá si se omite el "Campo 3" o el "Campo 4".

Los valores posibles para el "Campo 4" son NOPASSWD:. Tenga en cuenta los dos puntos: después de NOPASSWD. Indica que no necesita ingresar una contraseña al ejecutar sudo . Por ejemplo: lucy ALL=(ALL) NOPASSWD: /bin/useradd significa: el usuario común lucy puede ejecutar el comando /bin/useradd a través de sudo en cualquier host y no necesita ingresar una contraseña. Otro ejemplo: peter ALL=(ALL) NOPASSWD: ALL significa: el usuario ordinario peter puede ejecutar cualquier comando a través de sudo en cualquier host y no necesita ingresar una contraseña.

El "Campo 5" es una serie de comandos separados por comas, estos comandos son las operaciones autorizadas al usuario, ALL significa que todas las operaciones están permitidas. Todos los comandos usan rutas absolutas, que es para evitar la ejecución de comandos con el mismo nombre en el directorio, lo que puede causar riesgos de seguridad. Si escribe la autorización en el siguiente formato inseguro: lucy ALL=(ALL) chown,chmod,useradd entonces es posible que un usuario cree su propio programa, también llamado userad, y lo coloque en su ruta local. De esta manera, puede usar root para ejecutar este "programa llamado useradd". ¡Esto es bastante peligroso!

La ruta absoluta del comando se puede ver a través del comando which: por ejemplo, which useradd puede ver la ruta absoluta del comando useradd: /usr/sbin/useradd

editar /etc/sudoers

En la práctica, cuando edito el archivo /etc/sudoers, el sistema me indica que no tengo permiso, ¿qué debo hacer? Esto se debe a que el contenido de /etc/sudoers es tan confidencial que el archivo es de solo lectura. Entonces, antes de editar este archivo, asegúrese de saber lo que está haciendo.

Se recomienda encarecidamente modificar el archivo a través del comando vi sudo Si la configuración es incorrecta, aparecerá un aviso.

Sin embargo, el método recomendado por la documentación del sistema no es modificar directamente el archivo /etc/sudoers, sino escribir la modificación en el archivo bajo el directorio /etc/sudoers.d/. Si usa este método para modificar sudoers, debe agregar #includedir /etc/sudoers.d a la última línea del archivo /etc/sudoers (que existe de forma predeterminada):

#includedir /etc/sudoers.d

Tenga en cuenta que el comando #includedir aquí es un todo, el signo # al frente no se puede perder, no es un comentario y no puede haber un espacio después del signo #. Cualquier archivo en el directorio /etc/sudoers.d/ que no termine con el signo ~ o no contenga el signo .se analizará en el contenido de /etc/sudoers.

Esto es lo que dicen los documentos:

# Esto hará que sudo lea y analice cualquier archivo en el
directorio /etc/sudoers.d # que no termine en '~' o que contenga un '.' personaje.

# Tenga en cuenta que debe haber al menos un archivo en el directorio sudoers.d (este
# servirá), y todos los archivos en este directorio deben estar en el modo 0440.

# Tenga en cuenta también que debido a que los contenidos de sudoers pueden variar ampliamente, no se intenta
# agregar esta directiva a los archivos sudoers existentes en la actualización.

# Finalmente, tenga en cuenta que usar el comando visudo es la forma recomendada
# de actualizar el contenido de sudoers, ya que protege contra muchos modos de falla.

ámbito de mando

papi ALL=(root) NOPASSWD: /bin/chown,/usr/sbin/useradd

Significa: el usuario papi puede ejecutar /bin/chown bajo la raíz en todos los hosts posibles sin ingresar una contraseña; pero se requiere una contraseña cuando se ejecuta el comando /usr/sbin/useradd. Esto se debe a que NOPASSWD: solo afecta al primer comando después de este: comando 1. La fórmula dada arriba es solo una versión simplificada, y la fórmula completa es la siguiente:

Usuario/grupo autorizado host=[(a qué usuarios o grupos cambiar)] [Si se requiere verificación de contraseña] comando 1, [(campo 3)] [campo 4] comando 2, ...

Bajo el usuario con la operación sudo, ejecute sudo -l para ver los comandos que el usuario puede y no puede ejecutar.

Comodines y comandos de cancelación

papi ALL=/usr/sbin/ ,/sbin/ ,!/usr/sbin/fdisk

Agregar !delante del comando significa cancelar el comando. El significado de este ejemplo es: el usuario papi puede ejecutar todos los programas bajo el directorio /usr/sbin y /sbin en todos los hosts posibles, excepto fdisk.

Comentarios al ingresar la contraseña

Al ingresar la contraseña después de usar sudo, no se muestra nada, ni siquiera los asteriscos regulares. Hay una forma de evitar este problema. Abra el archivo /etc/sudoers y busque la siguiente línea:

Valores predeterminados env_reset

cambiado a:

Valores predeterminados env_reset, pwfeedback

Modificar el tiempo de sesión de sudo

Si usa con frecuencia el comando sudo, debe haber notado que después de ingresar con éxito la contraseña una vez, puede ejecutar el comando sudo varias veces sin ingresar la contraseña nuevamente. Pero después de un tiempo, el comando sudo le pedirá su contraseña nuevamente. El valor predeterminado es 15 minutos, que se puede ajustar. Simplemente agregue timestamp_timeout=minutos. El tiempo es en minutos, -1 significa que nunca caduca, pero no se recomienda encarecidamente.

Por ejemplo, quiero extender el tiempo a 1 hora, o abrir el archivo /etc/sudoers y encontrar la siguiente línea:

Valores predeterminados env_reset

cambiado a:

Valores predeterminados env_reset,pwfeedback,timestamp_timeout=60

práctica

Para la configuración de la base de datos MySQL, deje que el usuario de prueba en el grupo de prueba tenga la autoridad de /etc/init.d/mysqld:

[root@test ~]# groupadd test
[root@test ~]# useradd -g test -m -d /home/test -s /bin/bash test
[root@test ~]# passwd test

[root@test ~]# visudo
# test ALL=(ALL) NOPASSWD: /etc/init.d/mysqld
test ALL=(ALL) /etc/init.d/mysqld

#start mysql 
[root@test ~]# su test
[test@test ~]$ sudo /etc/init.d/mysqld start

#stop mysql
[root@test ~]# su test
[test@test ~]$ sudo /etc/init.d/mysqld stop

Para la configuración de tomcat, deje que el usuario de prueba en el grupo de prueba tenga la autoridad para operar tomcat:

[root@test ~]# groupadd test
[root@test ~]# useradd -g test -m -d /home/test -s /bin/bash test
[root@test ~]# passwd test

[root@test ~]# visudo
# test ALL=(ALL) /usr/local/tomcat/bin/shutdown.sh,/usr/local/tomcat/bin/startup.sh
test ALL=(ALL) NOPASSWD: /usr/local/tomcat/bin/shutdown.sh,/usr/local/tomcat/bin/startup.sh
[root@test ~]# vim /usr/local/tomcat/bin/catalina.sh

### JDK 
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=$JAVA_HOME/jre

#start tomcat 
[root@test ~]# su test 
[test@test ~]$ sudo /usr/local/tomcat/bin/startup.sh
[test@test ~]$ ss -ntlup | grep Java
[test@test ~]$ curl -I http://localhost:8080

#stop tomcat 
[root@test ~]# su test 
[test@test ~]$ sudo /usr/local/tomcat/bin/shutdown.sh

Archivo sudoers detallado

[root@test ~]# cat /etc/sudoers
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##该文件允许特定用户像root用户一样使用各种各样的命令,而不需要root用户的密码 
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
## 在文件的底部提供了很多相关命令的示例以供选择,这些示例都可以被特定用户或  
## ## 用户组所使用  
## This file must be edited with the ‘visudo‘ command.
## 该文件必须使用"visudo"命令编辑
## Host Aliases
#主机别名
## Groups of machines. You may prefer to use hostnames (perhap using 
## wildcards for entire domains) or IP addresses instead.
## 对于一组服务器,你可能会更喜欢使用主机名(可能是全域名的通配符)
## 或IP地址代替,这时可以配置主机别名

# Host_Alias     FILESERVERS = fs1, fs2
# Host_Alias     MAILSERVERS = smtp, smtp2
## User Aliases
#用户别名
## These aren‘t often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname 
## rather than USERALIAS
## 这并不很常用,因为你可以通过使用组来代替一组用户的别名  
# User_Alias ADMINS = jsmith, mikem

## Command Aliases
## These are groups of related commands...
## 指定一系列相互关联的命令(当然可以是一个)的别名,通过赋予该别名sudo权限,  
## 可以通过sudo调用所有别名包含的命令,下面是一些示例

## Networking
#网络操作相关命令别名  
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient,
 /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, 
 /sbin/mii-tool
## Installation and management of software
#软件安装管理相关命令别名  
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
## Services
#服务相关命令别名 
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
## Updating the locate database
#本地数据库升级命令别名  
Cmnd_Alias LOCATE = /usr/sbin/updatedb
## Storage
#磁盘操作相关命令别名
Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount
## Delegating permissions
#代理权限相关命令别名 
Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
## Processes
#进程相关命令别名
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
## Drivers
#驱动命令别名
Cmnd_Alias DRIVERS = /sbin/modprobe
#环境变量的相关配置
# Defaults specification
#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear. 
#         You have to run "ssh -t hostname sudo <cmd>".
#
Defaults    requiretty
Defaults    env_reset
Defaults    env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR                         LS_COLORS MAIL PS1 PS2 QTDIR USERNAME                         LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION                         LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC                         LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS                         _XKB_CHARSET XAUTHORITY"
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## 下面是规则配置:什么用户在哪台服务器上可以执行哪些命令(sudoers文件可以在多个系统上共享)
## Syntax:
##语法
##      user    MACHINE=COMMANDS
##  用户 登录的主机=(可以变换的身份) 可以执行的命令  
##
## The COMMANDS section may have other options added to it.
## 命令部分可以附带一些其它的选项  
##
## Allow root to run any commands anywhere 
## 允许root用户执行任意路径下的任意命令 
root    ALL=(ALL)       ALL
## Allows members of the ‘sys‘ group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## 允许sys中户组中的用户使用NETWORKING等所有别名中配置的命令

## Allows people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL
## 允许wheel用户组中的用户执行所有命令  
## Same thing without a password
## 允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令
# %wheel        ALL=(ALL)       NOPASSWD: ALL
## Allows members of the users group to mount and unmount the
## cdrom as root
## 允许users用户组中的用户像root用户一样使用mount、unmount、chrom命令 
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
## Allows members of the users group to shutdown this system
# %users  localhost=/sbin/shutdown -h now
## 允许users用户组中的用户像root用户一样使用shutdown命令

Reenviado de: Linux detallado sudoers_勤一@无二的博客-CSDN Blog 

Supongo que te gusta

Origin blog.csdn.net/fuhanghang/article/details/131792740
Recomendado
Clasificación