[linux]十一、sudo命令的详细使用方法和ACL的基本命令讲解

目录

1、sudo的授权

1.1、使用sudo给一个普通用户授予root用户的权限

1.2、 给组授予root用户权限

1.2.1、ip addr add + ip地址

1.3、sudo日志文件

1.4、练习

1.5、sudo切换需要密码验证

2、ACL(Access Control List)

2.1、设置ACL:setfacl指令 

2.2、实现图中的要求

2.2.1、mask::(perms)

2.2.2、setfacl -x 

2.2.3、setfacl -b + 文件

2.3、ACL类型

2.3.1、预设型

2.4、总结

2.5、练习


1、sudo的授权

sudo, sudoedit ----- execute a command as another user

本质上就是让其他普通用户代替root用户去执行命令

[linux]十一、sudo命令的详细使用方法和ACL的基本命令讲解_第1张图片

哪些普通用户?在哪里执行命令?执行什么命令?
格式:user    MACHINE=COMMANDS

root    ALL=(ALL)   ALL
root用户可以在任何机器上执行任何命令
root,代表用户名
ALL=(ALL),第一个ALL代表当前所在机器,第二个ALL代表所有命令
ALL,代表前面命令的所有的选项

wangchen ALL=/usr/sbin/useradd,/usr/sbin/userdel
只允许wangchen这个用户执行/usr/sbin/useradd,/usr/sbin/userdel
命令需要写绝对路径,多个命令使用逗号隔开

为什么要使用sudo命令,让其他用户也有root用户的部分或者全部权限

1、其实就是普通用户可以享有root用户的权限去执行命令
2、不需要使用root用户登录了,因为root权力比较大,尽量不要使用root操作,容易出现误操作
3、为了避免暴露root用户的密码        
4、使用过的命令都可以记录到日志(/var/log/secure)里,可以进行查询

1.1、使用sudo给一个普通用户授予root用户的权限

本例是给普通用户授予"useradd"和"userdel"命令权限

第一步:首先我们需要给这个普通用户设置密码,因为到时候普通用户使用sudo命令,会需要我们输入普通用户的密码

[root@fttsaxf ~]# echo 1234|passwd wangchen --stdin
更改用户 wangchen 的密码 。
passwd:所有的身份验证令牌已经成功更新。

第二步:修改"/etc/sudoers"文件

在文件里搜索root,找到"## Allow root to run any commands anywhere"这一行,然后在下边添加一行代码

## Allow root to run any commands anywhere 
root    ALL=(ALL)   ALL
wangchen ALL=/usr/sbin/useradd  # 添加这一行代码,授予"wangchen"这个用户有"useradd"权限

# 然后使用"wq!"强制保存并且退出

第三步:执行useradd和userdel命令

[root@fttsaxf ~]# cat /etc/passwd|tail -1
wangchen:x:5566:5566::/home/wangchen:/bin/bash
[root@fttsaxf ~]# su - wangchen
上一次登录:四 3月 17 23:17:37 CST 2022pts/0 上
[wangchen@fttsaxf ~]$ sudo useradd test  # 执行"useradd"命令

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] wangchen 的密码:  # 这里输入之前我们设定的用户密码,若下次短时间内又代替root执行命令的话,就不会又要求我们输入密码,但是时间过长之后,我们还是得输入密码。可以理解为临时缓存
[wangchen@fttsaxf ~]$ cat /etc/passwd|tail -2
wangchen:x:5566:5566::/home/wangchen:/bin/bash
test:x:7791:7791::/home/test:/bin/bash
[wangchen@fttsaxf ~]$ id test
uid=7791(test) gid=7791(test) 组=7791(test)
[wangchen@fttsaxf ~]$ sudo userdel -r test  # 一定要有sudo这个选项
对不起,用户 wangchen 无权以 root 的身份在 fttsaxf 上执行 /sbin/userdel -r test。

# 我们不能够删除这个用户,因为我们之前只授予了"wangchen"这个用户"useradd"命令的权限
# 若是想要添加userdel这个命令的权限,wangchen ALL=/usr/sbin/useradd,/usr/sbin/userdel
# 添加之后:
[wangchen@fttsaxf ~]$ sudo userdel -r test
[wangchen@fttsaxf ~]$ cat /etc/passwd |tail -1
wangchen:x:5566:5566::/home/wangchen:/bin/bash

若是我们需要赋予多个用户多个命令怎么办呢?我们肯定不能够一个一个用户的去赋予多个命令的。 sudo里边有内置别名,我们也可以设置我们自己的别名。除了命令别名,还有用户和机器别名。

sudo命令别名设置

# 命令别名
## Installation and management of software

# 定义别名"SOFTWARE"里边包含"/bin/rpm"、"/usr/bin/up2date"和"/usr/bin/yum".
# Cmnd_Alias,是固定的语法,我们使用的时候,要将这段代码的注释取消
# 另外,我们要是定义自己的别名的时候,这个别名一定要大写才能够成功定义
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

 然后我们在"/etc/sudoers"文件里修改

# 第一段代码,前边有我们只需要将注释取消就行,这里我把那段代码挪到了此处方便看
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
root    ALL=(ALL)   ALL
wangchen ALL=/usr/sbin/useradd,/usr/sbin/userdel
linghuchong ALL=SOFTWARE  # 别名的使用格式可以参照这里.定义linghuchong这个用户可以使用SOFTWARE这个命令别名里的所有命令

让普通用户执行yum命令

[linghuchong@fttsaxf ~]$ yum install bc -y  # 这里可以看到普通用户不能够直接使用安装命令
已加载插件:fastestmirror
您需要 root 权限执行此命令。
[linghuchong@fttsaxf ~]$ sudo yum install bc -y  # 这里可以看到我们定义命令别名成功

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。
[sudo] linghuchong 的密码:  # 我们要提前给这个用户设置好密码
已加载插件:fastestmirror
Determining fastest mirrors
epel/x86_64/metalink                                                                | 7.0 kB  00:00:00     
 * base: mirrors.aliyun.com
 * epel: ftp.iij.ad.jp
 * extras: mirrors.huaweicloud.com
 * updates: mirrors.ustc.edu.cn
...
软件包 bc-1.06.95-13.el7.x86_64 已安装并且是最新版本
无须任何处理

1.2、 给组授予root用户权限

组里的所有的用户都会继承这个权限。例子,新建wudong组,新建2个用户都加入wudang,然后再给这个组授予"KING"别名的命令。

格式

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)   ALL  # 组名字前边加一个"%"就行

第一步:新建组和用户,并给用户设置密码

[root@fttsaxf ~]# groupadd wudang
[root@fttsaxf ~]# useradd -g wudang wuji
[root@fttsaxf ~]# useradd -g wudang songqingshu
[root@fttsaxf ~]# echo 123|passwd wuji --stdin
更改用户 wuji 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@fttsaxf ~]# echo 123|passwd songqingshu --stdin
更改用户 songqingshu 的密码 。
passwd:所有的身份验证令牌已经成功更新。
# 这里可以看到wuji和songqingshu都属于wudang了
[root@fttsaxf ~]# id wuji
uid=7791(wuji) gid=7790(wudang) 组=7790(wudang)  
[root@fttsaxf ~]# id songqingshu
uid=7792(songqingshu) gid=7790(wudang) 组=7790(wudang)

 第二步:授权,即修改"/etc/sudoers"

## Allows people in group wheel to run all commands
Cmnd_Alias KING = /usr/sbin/useradd,/usr/sbin/userdel
%wheel  ALL=(ALL)   ALL
%wudang ALL=KING

第三步:执行验证wuji和songqingshu这俩用户是否能够执行root的命令

# 验证wuji
[wuji@fttsaxf ~]$ sudo useradd wujin_son

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] wuji 的密码:
对不起,请重试。
[sudo] wuji 的密码:
[wuji@fttsaxf ~]$ cat /etc/passwd|tail -1
wujin_son:x:7793:7793::/home/wujin_son:/bin/bash

# 验证songqingshu
[songqingshu@fttsaxf ~]$ sudo useradd songqingshu_son

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] songqingshu 的密码:
[songqingshu@fttsaxf ~]$ cat /etc/passwd|tail -1
songqingshu_son:x:7794:7794::/home/songqingshu_son:/bin/bash

另外,若是普通用户代替 root用户使用useradd建立一个新用户且属于wudong这个组,也能够使用这个组拥有的命令别名。而且这个组,不管是主要组还是次要组,都会继承组里的权限。

1.2.1、ip addr add + ip地址

表示给设备ens33网卡配置一个ip地址,子网掩码(255.255.255.0)的长度是24;长度为24,是因为255的二进制是"1111 1111",所以3个255就是24,即有24个1

1.3、sudo日志文件

sudo授权给普通用户去执行命令,linux系统会记录普通用户使用sudo执行过的所有命令。而记录的地方就是,/var/log/secure。日志文件是系统里的机密,普通用户一般看不了的。

[wangchen@fttsaxf ~]$ cat /var/log/secure
cat: /var/log/secure: 权限不够
[root@fttsaxf ~]#  ll /var/log/secure
-rw-------. 1 root root 15769 3月  18 11:40 /var/log/secure
[root@fttsaxf ~]# cat /var/log/secure|grep sudo
Mar 18 11:13:16 fttsaxf sudo: wangchen : TTY=pts/1 ; PWD=/home/wangchen ; USER=root ; COMMAND=/sbin/useradd test
Mar 18 11:13:16 fttsaxf sudo: pam_unix(sudo:session): session opened for user root by root(uid=0)
Mar 18 11:13:16 fttsaxf sudo: pam_unix(sudo:session): session closed for user root
Mar 18 11:15:43 fttsaxf sudo: wangchen : command not allowed ; TTY=pts/1 ; PWD=/home/wangchen ; USER=root ; COMMAND=/sbin/userdel -r test
Mar 18 11:24:36 fttsaxf sudo: wangchen : command not allowed ; TTY=pts/1 ; PWD=/home/wangchen ; USER=root ; COMMAND=/sbin/userdel -r test
Mar 18 11:25:41 fttsaxf sudo: wangchen : TTY=pts/1 ; PWD=/home/wangchen ; USER=root ; COMMAND=/sbin/userdel -r test
Mar 18 11:25:41 fttsaxf sudo: pam_unix(sudo:session): session opened for user root by root(uid=0)
Mar 18 11:25:41 fttsaxf sudo: pam_unix(sudo:session): session closed for user root

1.4、练习

练习1

[linux]十一、sudo命令的详细使用方法和ACL的基本命令讲解_第2张图片

提示,做这个练习我们需要安装"net-tools",因为ifconfig是属于比较老的命令了。若是自己有就可以不安装,输入"ifconfig"若是有内容出现就表示有这个命令;若想让一个用户能够使用多个命令别名可以使用逗号连接。

练习2

新建xiyouji,将bailongma、baigujing、yutujing的次要加入xiyouji组
gpasswd -M baigujing,bailongma,yutujing   这个命令可以批量加

gpasswd -a,可以将用户的次要组加入xiyouji组
[root@fttsaxf ~]# gpasswd -a  wuji  shanxi
正在将用户“wuji”加入到“shanxi”组中
[root@fttsaxf ~]# id wuji
uid=7791(wuji) gid=7790(wudang) 组=7790(wudang),5566(shanxi)

授予xiyouji,可以使用这些命令别名SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES

最后去验证

1.5、sudo切换需要密码验证

sudo切换过去第一次执行命令的时候,需要输入密码,而且第二次使用sudo命令,如果时间间隔比较短,可以不需要输入密码,如果时间间隔比较长,还是需要输入密码。

怎么才能让sudo命令不需要输入密码呢?

# 修改"/etc/sudoers"文件
wangchen ALL=(ALL)  NOPASSWD:ALL
# 只需要在wangchen这个用户代码后边添加"NOPASSWD:ALL"
# 好像第二部分必须要是要ALL=(ALL)才能够在使用sudo的时候不输入密码,其他的情况就会报错
[root@fttsaxf ~]# su  - wangchen
上一次登录:五 3月 18 23:39:45 CST 2022pts/2 上
[wangchen@fttsaxf ~]$ sudo useradd wangchen_son
[wangchen@fttsaxf ~]$ cat /etc/passwd|tail -1
wangchen_son:x:7795:7795::/home/wangchen_son:/bin/bash

# 可以看到sudo执行命令的时候没有让我们输入密码

2、ACL(Access Control List)

一个文件/目录的访问控制列表,可以针对任意指定的用户/组使用权限字符分配rwx权限

2.1、设置ACL:setfacl指令 

setfacl - set file access control lists

格式:setfacl 选项 规则 文件

[linux]十一、sudo命令的详细使用方法和ACL的基本命令讲解_第3张图片

[linux]十一、sudo命令的详细使用方法和ACL的基本命令讲解_第4张图片

2.2、实现图中的要求

[linux]十一、sudo命令的详细使用方法和ACL的基本命令讲解_第5张图片

 cali在这个组,却不能享受这个组的权力,叫做拒绝权限高于一切。扩展的访问控制

# 让wudang这个组可以对miji.txt有rwx的权限
[root@fttsaxf rough_book]# setfacl -m g:wudang:rwx miji.txt 
[root@fttsaxf rough_book]# setfacl -m g:shaolin:rwx miji.txt 
[root@fttsaxf rough_book]# setfacl -m g:sanchuang:--- miji.txt # 使sanchuang这个组没有对miji.txt有任何的权限
[root@fttsaxf rough_book]# id cali
uid=7796(cali) gid=7796(shaolin) 组=7796(shaolin)
[root@fttsaxf rough_book]# setfacl -m u:cali:--- miji.txt   # 设置Cali这个用户没有miji.txt文件的任何权限
[root@fttsaxf rough_book]# getfacl miji.txt 
# file: miji.txt
# owner: root
# group: root
user::rw-
user:cali:---
group::r--
group:wudang:rwx
group:shaolin:rwx
group:sanchuang:---
mask::rwx
other::r--

检验

[root@fttsaxf rough_book]# su dengjz  # wudang组的dengjz有对这个文件的rwx权限
[dengjz@fttsaxf rough_book]$ cat miji.txt 
tianxiawushuang
# sanchuang组的xiaohui不能对这个文件有rwx的权限
[root@fttsaxf rough_book]# su  xiaohui
[xiaohui@fttsaxf rough_book]$ cat miji.txt 
cat: miji.txt: 权限不够
# shaolin组的wangchen有对这个文件的rwx的权限
[root@fttsaxf rough_book]# su wangchen
[wangchen@fttsaxf rough_book]$ cat miji.txt 
tianxiawushuang
# cali这个用户虽然在shaolin组里,但是不能够对这个文件有rwx的权限
[root@fttsaxf rough_book]# su cali
[cali@fttsaxf rough_book]$ cat miji.txt 
cat: miji.txt: 权限不够

既然wudang这个组对这个文件有权限,那么若是将Cali这个用户又加入wudang组是否能够有权限呢?

[root@fttsaxf rough_book]# gpasswd -a cali wudang
正在将用户“cali”加入到“wudang”组中
[root@fttsaxf rough_book]# id cali
uid=7796(cali) gid=7796(shaolin) 组=7796(shaolin),7790(wudang)
[root@fttsaxf rough_book]# su cali
[cali@fttsaxf rough_book]$ cat miji.txt 
cat: miji.txt: 权限不够

# 显然答案是不可以的

由前提我们可知,snachuang对miji.txt文件是没有rwx的权限的。但是若我们将xiaohui这个用户对miji.txt这个文件有rwx的权限,那xiaohui这个yonghu到底是根据她所属的组还是自身对这个文件的权限来决定是否对miji.txt这个文件有rwx的权限呢?

[root@fttsaxf rough_book]# setfacl -m u:xiaohui:rwx miji.txt 
[root@fttsaxf rough_book]# su xiaohui
[xiaohui@fttsaxf rough_book]$ cat miji.txt 
tianxiawushuang
[xiaohui@fttsaxf rough_book]$ id xiaohui
uid=7798(xiaohui) gid=7797(sanchuang) 组=7797(sanchuang)

# ,由此可知,xiaohui用户根据自身对文件的权限来决定对文件的权限

2.2.1、mask::(perms)

设置有效的最大权限

[linux]十一、sudo命令的详细使用方法和ACL的基本命令讲解_第6张图片

图片解释:给过hello,rw的权限和给过cali,rw的权限。但是使用mask之后,权限受到了限制实际上都仅有r的权限

2.2.2、setfacl -x 

[root@fttsaxf rough_book]# getfacl miji.txt|grep sanchuang
group:sanchuang:---
[root@fttsaxf rough_book]# setfacl -x g:sanchuang miji.txt  # 删除指定的ACL规则
[root@fttsaxf rough_book]# getfacl miji.txt|grep sanchuang

2.2.3、setfacl -b + 文件


[root@fttsaxf rough_book]# getfacl miji.txt 
# file: miji.txt
# owner: root
# group: root
user::rw-
user:cali:---
user:xiaohui:rwx
group::r--
group:wudang:rwx
group:shaolin:rwx
mask::rwx
other::r--
[root@fttsaxf rough_book]# setfacl -b miji.txt   # 删除所有的ACL规则
[root@fttsaxf rough_book]# getfacl miji.txt 
# file: miji.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--

2.3、ACL类型

存取型ACL(Access ACL):文件或者目录
预设型ACL(Default ACL):只能对目录

默认情况下是存取型的

2.3.1、预设型

[linux]十一、sudo命令的详细使用方法和ACL的基本命令讲解_第7张图片

 可以这么理解,有一个文件夹a/b/c。当a这个文件夹对wudang组开放rwx的权限,那么b、c都会都对wudang开放rwx权限

[root@fttsaxf rough_book]# mkdir -p a/b1/c1  # 先直接创建这些文件夹
[root@fttsaxf rough_book]# setfacl -m d:wangchen:rwx a
[root@fttsaxf rough_book]# ll -d a
drwxr-xr-x+ 3 root root 15 3月  19 11:52 a  # 这里有一个"+"
[root@fttsaxf rough_book]# getfacl a
# file: a
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:wangchen:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

[root@fttsaxf a]# ll -d b1
drwxr-xr-x. 3 root root 15 3月  19 11:52 b1
[root@fttsaxf a]# mkdir b
[root@fttsaxf a]# ll -d b
drwxrwxr-x+ 2 root root 6 3月  19 11:54 b
[root@fttsaxf a]# su wangchen 
[wangchen@fttsaxf a]$ cd b1
[wangchen@fttsaxf b1]$ mkdir hh
mkdir: 无法创建目录"hh": 权限不够
[wangchen@fttsaxf b1]$ cd ..
[wangchen@fttsaxf a]$ cd b
[wangchen@fttsaxf b]$ mkdir hh

# 由此可以看出我们要先给这个文件夹授予预设型,然后新建的文件才能继承父文件夹的权限。授予预设型之前建立的文件夹都不能够享有这个继承权限

2.4、总结

[linux]十一、sudo命令的详细使用方法和ACL的基本命令讲解_第8张图片

[linux]十一、sudo命令的详细使用方法和ACL的基本命令讲解_第9张图片

 图片解释,一个组允许,一个组拒绝,就是允许。

2.5、练习

[linux]十一、sudo命令的详细使用方法和ACL的基本命令讲解_第10张图片

# 第一题:
[root@fttsaxf ~]# groupadd shuiguo
...

# 第二题:
useradd -g shuiguo pingguo
...

# 第三题:
[root@fttsaxf ~]# mkdir /food
[root@fttsaxf ~]# cd food
[root@fttsaxf food]# cp /etc/passwd .
[root@fttsaxf food]# ls
passwd

# 第四题:
[root@fttsaxf food]# setfacl -m g:shuiguo:rw-,u:jingshi:rwx,u:yueyanng:--- passwd

# 最后验证就由各位博友自己验证吧

你可能感兴趣的:(linux自学笔记,linux,运维,服务器)