sudo授权控制

sudo命令是用来以另外一个用户的身份来执行某些命令,并且不需要知道对方的密码;sudo的默认安全策略记录在/etc/sudoers配置文件中。而运行安全策略文件中的命令时,需要用户输入自己的密码来进行身份验证。也就是说用户在执行sudo命令时需要输入自己的密码。如果验证失败,则命令不会被执行,如果用户没有权限执行命令,则会把此操作发送邮件给管理员。

sudo命令的语法
sudo [-bhHpV][-s ][-u <用户>][指令]
-u user:默认为root;
-l:列出用户可以使用的命令;
-k:再次检票,执行命令需要再次输入用户密码;
-v:因为sudo在第一次执行时或是在N分钟内没有执行(N预设为五分钟)会问密码,这个参数是重新做一次确认,如果超过N分钟,也会询问密码;
-V:显示版本编号;
-b:将要执行的指令放在后台执行;

sudo命令的安全策略文件
/etc/sudoers
修改文件命令
visudo(有报错检查)

sudo还支持别名机制,可以通过别名来指明用户或者是命令
查看:man sudoers
常用别名格式:

Alias ::= 'User_Alias'  User_Alias (':' User_Alias)* |
               'Runas_Alias' Runas_Alias (':' Runas_Alias)* |
               'Host_Alias'  Host_Alias (':' Host_Alias)* |
               'Cmnd_Alias'  Cmnd_Alias (':' Cmnd_Alias)*

			     User_Alias ::= NAME '=' User_List
			
			     Runas_Alias ::= NAME '=' Runas_List
			
			     Host_Alias ::= NAME '=' Host_List
			
			     Cmnd_Alias ::= NAME '=' Cmnd_List
			
			     NAME ::= [A-Z]([A-Z][0-9]_)*

对用户做配置授权:
1)只允许user1用户和user2用户可以使用fdisk命令

User_Alias   USERADMINFD = user1,user2         //定义用户别名
Cmnd_Alias   COMMANDFD   = /usr/sbin/fdisk     //定义命令别名


root    ALL=(ALL)       ALL
USERADMINFD  ALL=(root) COMMANDFD
//这一行的意思是:允许哪些用户在哪个主机上以哪个用户的身份运行哪些命令
这里我指明的是:在USERADMIN这个别名当中的用户(user1,user2)
可以在所有主机上以root用户的身份运行COMMANDFD别名当中的命令

2)切换用户身份测试:

[root@www ~]# su - user1
Last login: Sat Mar  9 05:40:38 EST 2019 on pts/1
[user1@www ~]$ sudo -l            //查看当前用户可用的sudo命令
[sudo] password for user1: 
Matching Defaults entries for user1 on www:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
    env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE 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

User user1 may run the following commands on www:
    (root) /usr/sbin/fdisk
[user1@www ~]$ 
[user1@www ~]$ sudo fdisk -l 

Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0005f749                     //运行成功

3)切换到user3这个不在安全策略文件中的用户试试

[root@www ~]# su - user3
Last login: Sat Mar  9 05:42:22 EST 2019 on pts/1
[user3@www ~]$ sudo -l
[sudo] password for user3: 
Sorry, user user3 may not run sudo on www.
[user3@www ~]$ 
[user3@www ~]$ sudo  fdisk -l
[sudo] password for user3: 
user3 is not in the sudoers file.  This incident will be reported.       //会提示user3在策略文件中没有定义
[user3@www ~]$ 

4)允许user3运行useradd,usermod,passwd命令

User_Alias  USERADMINUS  = user3
Cmnd_Alias   COMMADNUS   = /usrs/sbin/useradd,/usr/sbin/usermod,/usr/bin/passwd [a-z]*,!/usr/sin/passwd root   (指明passwd后面必须要接用户名,但不能是root)

USERADMINUS ALL=(root) NOPASSWD:COMMADNUS       //前面加NOPASSWD表明用户执行sudo操作时不用输入密码

5)切换到user3尝试创建用户

[root@www ~]# su - user3
Last login: Sat Mar  9 06:57:42 EST 2019 on pts/1
[user3@www ~]$ sudo -l 
Matching Defaults entries for user3 on www:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY
    HOSTNAME HISTSIZE 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

User user3 may run the following commands on www:
    (root) NOPASSWD: /usr/sbin/useradd, /usr/sbin/usermod, /usr/bin/passwd
[user3@www ~]$ 
[user3@www ~]$ sudo useradd jyy
[user3@www ~]$ sudo passwd jyy
Changing password for user jyy.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
[user3@www ~]$ 
[user3@www ~]$ sudo passwd
[sudo] password for user3: 
Sorry, user user3 is not allowed to execute '/bin/passwd' as root on www.     //并不能修改root用户的密码
[user3@www ~]$ 
[user3@www ~]$ 
[user3@www ~]$ 
[user3@www ~]$ sudo passwd user1           //可以修改其他普通用户的密码
Changing password for user user1.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
[user3@www ~]$ 


### 授予用户 Sudo 权限的方法 在 Linux 中,为了提高系统的安全性并允许特定用户执行管理员级别的命令而不必完全切换至 root 用户身份,可以授予这些用户 sudo 权限。这可以通过编辑 `/etc/sudoers` 文件或将用户添加到具有预定义权限的组来实现。 #### 方法一:通过修改 `sudoers` 文件授予权限 要直接向某个用户分配 sudo 访问权,可以在拥有适当权限的情况下手动编辑 `/etc/sudoers` 文件[^1]: ```bash visudo ``` 此命令将以安全的方式打开该配置文件用于编辑,并防止因语法错误而导致系统失去管理能力的风险。接着,在文件中找到默认为 root 定义的那一行之后新增一行,格式如下所示[^4]: ```plaintext username ALL=(ALL:ALL) ALL ``` 这里的 `username` 应替换为目标用户的实际用户名;第一个 `ALL` 表示可以从任何主机发出请求;第二个 `(ALL:ALL)` 意味着能够作为任意用户/群组的身份运行指令;最后一个 `ALL` 则指定了可被执行的所有命令集。 完成上述更改后保存退出即可生效。值得注意的是,直接编辑这个文件存在风险,因此建议谨慎操作或考虑更简便的办法——即利用现有的用户组机制来进行授权处理。 #### 方法二:将用户加入具备 sudo 特权的组 对于大多数现代 Linux 发行版本而言,最简单有效的方式来赋予某位成员 sudo 能力就是将其纳入一个已经设置好相应权限的特殊群体之中。通常情况下,“wheel” 或者 “sudo” 是两个常见的选择之一[^2]。 以 Ubuntu 为例,默认情况下新创建的标准账户会被自动放置于名为 'sudo' 的组内从而获得必要的控制权。而对于其他类型的环境,则可能需要显式地把目标账号追加进去: ```bash usermod -aG wheel username # 对应 CentOS/RHEL/Fedora/OpenSUSE 等平台 # 或者 usermod -aG sudo username # 针对 Debian/Ubuntu 类型系统适用 ``` 这里 `-aG` 参数的作用在于确保不会覆盖原有隶属关系的同时增加新的分组关联。同样地,请记得用具体的登录名代替模板中的 `username` 占位符部分。 一旦完成了以上任一种方式的操作,被指定的对象便拥有了临时提升自身权限的能力,能够在必要时刻借助 `sudo` 命令前缀来获取更高的访问级别而无需反复切换身份角色了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值