Linux服务器权限管理之sudo高级应用

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> Linux服务器权限管理之sudo高级应用

Linux服务器权限管理之sudo高级应用

前面提到Linux系统修改权限与默认权限,它都是征对用户对于目录或文件的一些权限控制,那么其实真正从安全性角度上来考虑的话,是要控制用户一定执行命令的权限,也就是哪些用户可以执行哪些命令,不可以执行哪些命令,因此也就有了sudo这个应用

对于sudo提权,也就是修改/etc/sudoers的配置文件

[root@Centos ~]# ls -ll /etc/sudoers

-r–r—–. 1 root root 5870 Aug 19 16:53 /etc/sudoers

可以看出/etc/sudoers默认的权限是440(也是系统比较安全的权限设置),当然了超级管理员肯定是有权限修改其文件内容的,不然还不哦哦了………..。

一:直接修改/etc/sudoers文件的注意事项

1、操作时最好用echo 追加,不过cat sed同样也可以实现(不常用)

2、修改完成后一定记得检查语法visudo -c

3、确保/etc/sudoers默认的权限是440(防止权限误用)

4、及时验证修改的配置是否正确

5、确保知道root密码,以便普通用户可以通过sudo su -命令切换

二:sudo的配置文件/etc/sudoers

[root@Centos ~]# cat /etc/sudoers

Sudoers allows particular users to run various commands as

the root user, without needing the root password.

Examples are provided at the bottom of the file for collections

users or groups.

This file must be edited with the ‘visudo’ command.

Host Aliases

Groups of machines. You may prefer to use hostnames (perhaps using

wildcards for entire domains) or IP addresses instead.

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

修改时尽量复制系统的格式进行相关修改,防止配置错误,难以改正

修改授权某用户权限成功后,切换到用户下面,用sudo -l 来查看自己拥有哪些权限

[yuw001@Centos ~]$ sudo -l

[sudo] password for yuw001: 

Matching Defaults entries for yuw001 on this host:

    requiretty, !visiblepw, always_set_home, env_reset, env_keep=”COLORS

    DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS”, env_keep+=”MAIL

    PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE”,

    env_keep+=”LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES”,

    env_keep+=”LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE”,

    env_keep+=”LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY”,

    secure_path=/sbin:/bin:/usr/sbin:/usr/bin, logfile=/var/log/sudo.log

User yuw001 may run the following commands on this host:

    (root) /bin/ping, /bin/hostname, /usr/bin/free, /sbin/route,

**   ** /bin/netstat

**使用命令时记得加上sudo **

[yuw001@Centos ~]$ hostname  linux

hostname: you must be root to change the host name

[yuw001@Centos ~]$ /bin/hostname linux

hostname: you must be root to change the host name

[yuw001@Centos ~]$ sudo hostname linux 

[root@linux ~]#           退出重新登陆后发现主机名修改成功

配置文件一行是一个规则,前面都会用#进行注释,用‘’续行(换行)

三:配置文件中规则的分类

1、别名类型

别名类型分为以下几类

a、Host_Alias(主机别名)

生产环境中一般不会设置主机别名,一般主机别名不太常用

root    ALL=(ALL)       ALL         第一个ALL就是主机别名的应用位置 

   

b、User_Alias(用户别名)

如果是表示用户组那么前面要加%

root    ALL=(ALL)       ALL        root就是用户别名的应用位置

User_Alias ADMINS = jsmith, mikem

c、Runas_Alias别名

此别名是指定“用户身份”,即 sudo允许切换到的用户

root    ALL=(ALL) **      ALL        第二个(ALL)**就是用户别名的应用位置

Runas_Alias  OP = root  

d、Cmnd_Alias(命令别名)

就是定义一个别名,它可以包含一堆命令的内容(一组相关命令的集合)

root    ALL=(ALL)      ALL **        第三个ALL**就是用户别名的应用位置

Cmnd_Alias DRIVERS = /sbin/modprobe

说明

  • 用户别名中的用户必须是系统真实存在的,书写时注意空格,用户别名具有特殊意义,用户别名必须使用大写
  • 命令别下的成员必须使用绝对路径,可以用‘’换行
  • 命令别下的成员必须使用绝对路径,可以用‘’换行

    2、授权规则

    授权规则就是执行的规则,授权中的所有ALL必须大写

    Allow root to run any commands anywhere

    root       ALL=(ALL)       ALL

    yumw    ALL=(ALL)       /usr/sbin/useradd,/usr/sbin/userdel 

    ###user group sa allow to run commands anywhere

    yuw  ALL=/usr/sbin*,/sbin*

    sa    ALL= /usr/sbin*,/sbin*,!/sbin/fdisk  

    !表示禁止执行这个命令

     [sa@linux ~]$ sudo -l

    User sa may run the following commands on this host:

        (root) /usr/bin*, (root) /sbin*, (root) !/sbin/fdisk

    [sa@linux ~]$ sudo fdisk

    Sorry, user sa is not allowed to execute ‘/sbin/fdisk’ as root on linux.

    如果将配置做下修改

    ###user group sa allow to run commands anywhere

    yuw  ALL=/usr/sbin*,/sbin*

    sa    ALL= !/sbin/fdisk ,/usr/sbin*,/sbin*

     [sa@linux ~]$ sudo -l

    User sa may run the following commands on this host:

        (root) /usr/bin*, (root) /sbin*, (root) !/sbin/fdisk

    [root@linux ~]# su - sa

    [sa@linux ~]$ sudo fdisk

    [sudo] password for sa: 

    Usage:

     fdisk [options] disk    change partition table

     fdisk [options] -l disk list partition table(s)

     fdisk -s partition      give partition size(s) in blocks

    Options:

     -b size               sector size (512, 1024, 2048 or 4096)

     -c                           switch off DOS-compatible mode

     -h                           print help

     -u size               give sizes in sectors instead of cylinders

     -v                           print version

     -C number         specify the number of cylinders

     -H number         specify the number of heads

     -S number          specify the number of sectors per track

    所以经测试结果表明,sa    ALL= !/sbin/fdisk ,/usr/sbin*,/sbin*命令执行的匹配规则是从后到前的,所以后面执行sudo fdisk不会提示权限不足的现像

    Linux服务器权限管理之sudo高级应用
    本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

    转载声明:转载请注明出处,本技术博客是本人原创文章

    本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

    原文链接:blog.ouyangsihai.cn >> Linux服务器权限管理之sudo高级应用


     上一篇
    Linux系统定时任务(crond) Linux系统定时任务(crond)
    Linux系统定时任务(crond) 一:定义 crond是Linux系统中用来定期执行命令或指定程序任务的一种服务或软件 1、linux系统自身定期执行的任务(轮询系统日志、备份数据等) 2、用户执行的任务(定时更新同步时间、网站数据备份
    2021-04-05
    下一篇 
    Linux系统NFS网络文件系统 Linux系统NFS网络文件系统
    Linux系统NFS网络文件系统 NFS(network file system)网络文件系统,就是通过网络让不同的主机系统之间可以共享文件或目录,此种方法NFS客户端使用挂载的方式让共享文件或目录到本地系统可挂载的目录下 NFS实现是
    2021-04-05