Ubuntu操作-04 SUDO设置

本文详细介绍了如何在Linux系统中授权普通用户执行root权限的命令,包括在/etc/sudoers文件中配置用户权限,实现免密操作的方法,以及授权给用户组的步骤。同时,分享了一些实用的sudo操作技巧,如通过sudo!!执行上一条命令,创建sudo日志,以及解决sudo权限问题。此外,文章还提到了错误修改/etc/sudoers文件后的恢复方法。
摘要由CSDN通过智能技术生成

在linux系统下,普通用户无法直接执行root用户权限下的命令,如果想让普通用户执行只有root用户才能执行的操作命令,就需要用到sudo。

sudo于1980年前后被写出之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须要先告知超级用户的密码,而sudo使一般用户不需要知道超级用户的密码即可获得权限。

1 授权普通用户执行root指令

授权普通用户执行root指令,就需要在/etc/sudoers文件中进行配置(或者直接使用visudo命令,不过只能在root用户下执行):

[root@test-huanqiu ~]# visudo
.....
# User privilege specification
pang ALL=(ALL) ALL

1.1 参数解释

  1. 第一个字段zhangj指定的是用户:可以是用户名,也可以是别名。每个用户设置一行,多个用户设置多行,也可以将多个用户设置成一个别名后再进行设置。
  2. 第二个字段ALL指定的是用户所在的主机:可以是ip,也可以是主机名,表示这个sudo设置后的文件即/etc/sudoers只在这个主机上生效,ALL表示在所有主机上都生效!限制的一般都是本机,也就是限制使用这个文件的主机;如果指定为"192.168.1.88"表示这个文件只有在这台主机上生效,如果拷贝到别的机子上是不起作用的!一般都指定为"ALL"表示所有的主机,不管文件拷到那里都可以用。
  3. 第三个字段(ALL)括号里指定的也是用户:指定以什么用户身份执行sudo,即使用sudo后可以享有所有账号下的权限。如果要排除个别用户,可以在括号内设置,比如ALL=(ALL,!root,!ops)。也可以设置别名
  4. 第四个字段ALL指定的是执行的命令:即使用sudo后可以执行所有的命令。也可以设置别名。NOPASSWD: ALL表示使用sudo的不需要输入密码。这里指令要用绝对路径

1.2 示例

如果我们想让用户pang只能在本主机(主机名为localhost)以root账户执行/bin/chown、/bin/chmod 两条命令,那么就应该这样配置:

[root@test-huanqiu ~]# visudo
.......
# User privilege specification
pang localhost=(root) /bin/chown,/bin/chmod

如果用户pang登录之后运行sudo命令,不满足上面三个条件之一的操作都将失败。

2 免密操作

安全是安全了,但很麻烦,每次执行指令都要输入密码,若要消除密码输入操作,修改配置文件:

2.1 使用root用户 visudo

#这里的NOPASSWD就是配置支持免密执行的字段
pang       ALL=(root)      NOPASSWD:/usr/bin/vim            

这里设置的是vim指令能够无密码执行!

2.2 手工修改/etc/sudoers文件

# 切换至root用户
sudo su - root
# 修改/etc/sudoers文件权限
chmod 744 /etc/sudoers
# 修改/etc/sudoers文件,添加如下内容,ubuntu为当前用户
ubuntu    ALL=(ALL:ALL) NOPASSWD:ALL
# 保存,并恢复权限
chmod 440 /etc/sudoers
# 重启系统
reboot

新启动一个terminal, 测试没有生效。
原因: 设了nopasswd,但是不起作用,原因是被后面的group的设置覆盖了。改为添加在文件最后一行即可。

# User privilege specification
root	ALL=(ALL:ALL) ALL
pang	ALL=(ALL:ALL) NOPASSWD:ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo	ALL=(ALL:ALL) ALL
pang    ALL=(ALL:ALL) NOPASSWD:ALL

3 授权给用户组

[root@test-huanqiu ~]# visudo
.....
# Allow members of group sudo to execute any command
# (Note that later entries override this, so you might need to move it further down)
%sudo ALL=(ALL) ALL

和授权给单个用户类似,只不过将用户名在这里换成%组名,所有在该组中的用户都按照此规则进行授权。

对于该例,所有在sudo组内的用户都有在任何终端(第一个ALL)、以任何用户(第二个ALL)、执行任何命令(第三个ALL)的权限,查看/etc/group文件可以知道哪些用户属于 sudo组。

4 操作技巧

4.1 执行root命令忘记加sudo:

输入一个长长的命令,按Enter之后出现无权限操作,因为在命令前面忘记加sudo了。
大多人的做法是按 ↑ 回到上一条命令,在该命令之前加上sudo,再执行该命令。
其实,也大可不必这样,巧妙的做法是:
只要输入 sudo !! 即可,这里的 !! 代表上一条命令。如:

[pang@localhost ~]$ cat test
cat: test: Permission denied
[pang@localhost ~]$ sudo !!
sudo cat test
lala
xiixixi'
nihao

即拿到了test文件的内容!

4.2 shell内置命令无法使用sudo

shell是一个交互式的应用程序,在执行外部命令时通过fork来创建一个子进程,再通过exec来加载外部命令的程序来执行。
但是如果一个命令是shell内置命令,那么只能直接由shell 来运行。
sudo 的意思是,以别的用户(如root)的权限来fork一个进程,加载程序并运行,因此sudo后面不能跟shell 的内置命令。\

[pang@localhost ~]$ sudo cd /sys/kernel/debug/
sudo: cd: command not found

此时应使用:

[pang@localhost ~]$ sudo bash   //或者sudo su - 或者 sudo -s,其实就使用sudo命令从当前用户切换到root用户
[root@localhost debug]# cd /sys/kernel/debug/
[root@localhost debug]#

4.3 sudo操作记入日志

作为一个Linux系统的管理员,不仅可以让指定的用户或用户组作为root用户或其它用户来运行某些命令,还能将指定的用户所输入的命令和参数作详细的记录。
而sudo的日志功能就可以用户跟踪用户输入的命令,这不仅能增进系统的安全性,还能用来进行故障检修。

  • 创建sudo日志文件
[pang@localhost ~]$ sudo touch /var/log/sudo.log
  • 修改/etc/rsyslog.conf配置文件(有些版本系统的这个文件名为/etc/syslog.conf),在该文件加入下面一行
[pang@localhost ~]$ sudo vim /etc/rsyslog.conf
.........
local2.debug /var/log/sudo.log //空白不能用空格,必须用tab
  • 修改/etc/sudoers 配置文件
[pang@localhost ~]$ sudo vim /etc/sudoers
........
Defaults logfile=/var/log/sudo.log
  • 重启 syslog 服务
[pang@localhost ~]$ sudo service rsyslog restart
  • 验证
    经过上面的配置,sudo的所有成功和不成功的sudo命令都记录到文件/var/log/sudo.log 中。

4.4 为多个用户分配不同的组:

在root用户的情况下,编辑/etc/group文件,这个文件就是控制系统的组和用户所属组情况的。

groupadd sudo                 #因为没有指定gid,所以就按着文件中的gid往后推的
sudo:x:504:                    #添加完之后在该文件中就出现了这条字段。

修改为:

sudo:x:504:batman,test            #此时,用户batman和test的附属组就是sudo了

此时再visudo

%sudo   ALL=(root)      NOPASSWD:/usr/bin/vim
%sudo   ALL=(root)      NOPASSWD:/bin/cat

保存退出,可以用:visudo -c来检查语法,返回OK,没问题。
检测:

-rw-------. 1 root root 1595 Jul 24 05:00 rsyncd.conf
-rw-------. 1 root root    8 Jul 24 05:00 rsyncd.pass
-rw-------. 1 root root   14 Jul 24 05:00 rsyncd.pwd

这三个文件,只有root有操作权限,现在

[pang@localhost]$ sudo vim rsyncd.conf

发现也是ok的。

5 sudo问题记录

手工修改/etc/sudoers时,如果不注意操作会导致一些问题产生,特此记录。

5.1 错误修改/etc/sudoers所属用户后恢复

在修改设置sudo免密码时,无意将chmod 440 /etc/sudoers改为了chown 440 /etc/sudoers后,导致系统重启后无法使用sudo命令。

解决方法:

(1) 重启电脑,进入ubuntu 恢复模式Grub(一直按esc或shift)
(2) 在Grub的菜单中选择root
(3) 重新输入命令 chown root /etc/sudoers
(4) reboot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值