常用命令-提权降权-sudo
常用命令-提权-sudo
sudo命令用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
语法
sudo(选项)(参数)
选项
-b:在后台执行指令;
-h:显示帮助;
-H:将HOME环境变量设为新身份的HOME环境变量;
-k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;。
-l:列出目前用户可执行与无法执行的指令;
-p:改变询问密码的提示符号;
-s<shell>:执行指定的shell;
-u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;
-v:延长密码有效期限5分钟;
-V :显示版本信息。
参数
指令:需要运行的指令和对应的参数。
实例
配置sudo必须通过编辑/etc/sudoers文件,而且只有超级用户才可以修改它,还必须使用visudo编辑。之所以使用visudo有两个原因,一是它能够防止两个用户同时修改它;二是它也能进行有限的语法检查。所以,即使只有你一个超级用户,你也最好用visudo来检查一下语法。
visudo默认的是在vi里打开配置文件,用vi来修改文件。我们可以在编译时修改这个默认项。visudo不会擅自保存带有语法错误的配置文件,它会提示你出现的问题,并询问该如何处理,就像:
>>> sudoers file: syntax error, line 22 <<
此时我们有三种选择:键入“e”是重新编辑,键入“x”是不保存退出,键入“Q”是退出并保存。如果真选择Q,那么sudo将不会再运行,直到错误被纠正。
现在,我们一起来看一下神秘的配置文件,学一下如何编写它。让我们从一个简单的例子开始:让用户Foobar可以通过sudo执行所有root可执行的命令。以root身份用visudo打开配置文件,可以看到类似下面几行:
# Runas alias specification
# User privilege specificationroot ALL=(ALL)ALL
我们一看就明白个差不多了,root有所有权限,只要仿照现有root的例子就行,我们在下面加一行(最好用tab作为空白):
foobar ALL=(ALL) ALL
保存退出后,切换到foobar用户,我们用它的身份执行命令:
[foobar@localhost ~]$ ls /root
ls: /root: 权限不够
[foobar@localhost ~]$ sudo ls /root
PassWord:
anaconda-ks.cfg Desktop install.log install.log.syslog
好了,我们限制一下foobar的权利,不让他为所欲为。比如我们只想让他像root那样使用ls和ifconfig,把那一行改为:
foobar localhost= /sbin/ifconfig, /bin/ls
再来执行命令:
[foobar@localhost ~]$ sudo head -5 /etc/shadow
Password:
Sorry, user foobar is not allowed to execute '/usr/bin/head -5 /etc/shadow' as root on localhost.localdomain.
[foobar@localhost ~]$ sudo /sbin/ifconfigeth0 Linkencap:Ethernet HWaddr 00:14:85:EC:E9:9B...
现在让我们来看一下那三个ALL到底是什么意思。第一个ALL是指网络中的主机,我们后面把它改成了主机名,它指明foobar可以在此主机上执行后面的命令。第二个括号里的ALL是指目标用户,也就是以谁的身份去执行命令。最后一个ALL当然就是指命令名了。例如,我们想让foobar用户在linux主机上以jimmy或rene的身份执行kill命令,这样编写配置文件:
foobar linux=(jimmy,rene) /bin/kill
但这还有个问题,foobar到底以jimmy还是rene的身份执行?这时我们应该想到了sudo -u了,它正是用在这种时候。 foobar可以使用sudo -u jimmy kill PID或者sudo -u rene kill PID,但这样挺麻烦,其实我们可以不必每次加-u,把rene或jimmy设为默认的目标用户即可。再在上面加一行:
Defaults:foobar runas_default=rene
Defaults后面如果有冒号,是对后面用户的默认,如果没有,则是对所有用户的默认。就像配置文件中自带的一行:
Defaults env_reset
另一个问题是,很多时候,我们本来就登录了,每次使用sudo还要输入密码就显得烦琐了。我们可不可以不再输入密码呢?当然可以,我们这样修改配置文件:
foobar localhost=NOPASSWD: /bin/cat, /bin/ls
再来sudo一下:
[foobar@localhost ~]$ sudo ls /rootanaconda-ks.cfg Desktop install.log
install.log.syslog
当然,你也可以说“某些命令用户foobar不可以运行”,通过使用!操作符,但这不是一个好主意。因为,用!操作符来从ALL中“剔出”一些命令一般是没什么效果的,一个用户完全可以把那个命令拷贝到别的地方,换一个名字后再来运行。
日志与安全
sudo为安全考虑得很周到,不仅可以记录日志,还能在有必要时向系统管理员报告。但是,sudo的日志功能不是自动的,必须由管理员开启。这样来做:
touch /var/log/sudo
vi /etc/syslog.conf
在syslog.conf最后面加一行(必须用tab分割开)并保存:
local2.debug /var/log/sudo
重启日志守候进程,
ps aux grep syslogd
把得到的syslogd进程的PID(输出的第二列是PID)填入下面:
kill –HUP PID
这样,sudo就可以写日志了:
[foobar@localhost ~]$ sudo ls /rootanaconda-ks.cfg
Desktop install.log
install.log.syslog
$cat /var/log/sudoJul 28 22:52:54 localhost sudo: foobar :
TTY=pts/1 ; pwd=/home/foobar ; USER=root ; command=/bin/ls /root
不过,有一个小小的“缺陷”,sudo记录日志并不是很忠实:
[foobar@localhost ~]$ sudo cat /etc/shadow > /dev/null
cat /var/log/sudo...Jul 28 23:10:24 localhost sudo: foobar : TTY=pts/1 ;
PWD=/home/foobar ; USER=root ; COMMAND=/bin/cat /etc/shadow
重定向没有被记录在案!为什么?因为在命令运行之前,shell把重定向的工作做完了,sudo根本就没看到重定向。这也有个好处,下面的手段不会得逞:
[foobar@localhost ~]$ sudo ls /root > /etc/shadowbash: /etc/shadow: 权限不够
sudo 有自己的方式来保护安全。以root的身份执行sudo-V,查看一下sudo的设置。因为考虑到安全问题,一部分环境变量并没有传递给sudo后面的命令,或者被检查后再传递的,比如:PATH,HOME,SHELL等。当然,你也可以通过sudoers来配置这些环境变量。
补充
visudo提权-降权
用户权限讲解
需求1: 比如你是wangyu用户账号,你现在想要修改系统名称,但是你没有权限,只能去找你的上司去了,他是如何配置的呢?
[lijun@master root]$ echo master1 > /etc/hostname
bash: /etc/hostname: Permission denied
修改拒绝了
[lijun@master usr]$ hostname
master
[lijun@master usr]$ hostnamectl set-hostname master1
==== AUTHENTICATING FOR org.freedesktop.hostname1.set-static-hostname ===
Authentication is required to set the statically configured local host name, as well as the pretty host name.
Authenticating as: root
可以看到这里是需要root密码的,如果你不知道的话,就无法修改
上司或者你给他人配置
方式1:
chown wangwu.root /etc/hosts
缺点:虽然可以,但是需要一次一次配置设置,不效率
方式2:
sudo 用户授权
visudo
需求2:给wangwu用户只能创建用户权限,其他无权限
[root@node-2 ~]# useradd it02
[root@node-2 ~]# passwd it02
Changing password for user it02.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@node-2 ~]# visudo
[root@node-2 ~]# visudo
1 ## Sudoers allows particular users to run various commands as
2 ## the root user, without needing the root password.
3 ##
4 ## Examples are provided at the bottom of the file for collections
7 ##
8 ## This file must be edited with the 'visudo' command.
9
10 ## Host Aliases
11 ## Groups of machines. You may prefer to use hostnames (perhaps using
12 ## wildcards for entire domains) or IP addresses instead.
13 # Host_Alias FILESERVERS = fs1, fs2
14 # Host_Alias MAILSERVERS = smtp, smtp2
15
16 ## User Aliases
17 ## These aren't often necessary, as you can use regular groups
18 ## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
19 ## rather than USERALIAS
20 # User_Alias ADMINS = jsmith, mikem
21
22
23 ## Command Aliases
24 ## These are groups of related commands...
25
26 ## Networking
28
29 ## Installation and management of software
30 # Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
31
32 ## Services
33 # Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
34
35 ## Updating the locate database
36 # Cmnd_Alias LOCATE = /usr/bin/updatedb
37
38 ## Storage
40
41 ## Delegating permissions
42 # Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
43
44 ## Processes
45 # Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
46
47 ## Drivers
48 # Cmnd_Alias DRIVERS = /sbin/modprobe
49
50 # Defaults specification
51
52 #
53 # Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
54 # You have to run "ssh -t hostname sudo <cmd>".
55 #
56 Defaults requiretty
57
58 #
59 # Refuse to run if unable to disable echo on the tty. This setting should also be
60 # changed in order to be able to use sudo without a tty. See requiretty above.
61 #
62 Defaults !visiblepw
63
64 #
65 # Preserving HOME has security implications since many programs
66 # use it when searching for configuration files. Note that HOME
67 # is already set when the the env_reset option is enabled, so
68 # this option is only effective for configurations where either
69 # env_reset is disabled or HOME is present in the env_keep list.
70 #
71 Defaults always_set_home
72
73 Defaults env_reset
74 Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
75 Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
76 Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
77 Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
78 Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
79
80 #
81 # Adding HOME to env_keep may enable a user to run unrestricted
82 # commands via sudo.
83 #
84 # Defaults env_keep += "HOME"
85
86 Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
87
88 ## Next comes the main part: which users can run what software on
89 ## which machines (the sudoers file can be shared between multiple
90 ## systems).
91 ## Syntax:
92 ##
93 ## user MACHINE=COMMANDS
94 ##
95 ## The COMMANDS section may have other options added to it.
96 ##
97 ## Allow root to run any commands anywhere
98 root ALL=(ALL) ALL
99 it02 ALL=(ALL) /usr/sbin/useradd
100 ## Allows members of the 'sys' group to run networking, software,
101 ## service management apps and more.
102 # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
103
104 ## Allows people in group wheel to run all commands
105 %wheel ALL=(ALL) ALL
106
107 ## Same thing without a password
108 # %wheel ALL=(ALL) NOPASSWD: ALL
109
110 ## Allows members of the users group to mount and unmount the
111 ## cdrom as root
112 # %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
113
114 ## Allows members of the users group to shutdown this system
115 # %users localhost=/sbin/shutdown -h now
116
117 ## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
118 #includedir /etc/sudoers.d
119 it01 ALL=(ALL) NOPASSWD: ALL
在98行这里更改加上用户和他的权限
97 ## Allow root to run any commands anywhere
98 root ALL=(ALL) ALL
99 it02 ALL=(ALL) /usr/sbin/useradd
不知道权限怎么找的,可以看下面 用which
[root@node-2 ~]# which useradd
/usr/sbin/useradd
[root@node-2 ~]# which userdel
/usr/sbin/userdel
如果想要给他一个命令以上权限,比如我这里再加上userdel权限,你可以看一下
97 ## Allow root to run any commands anywhere
98 root ALL=(ALL) ALL
99 it02 ALL=(ALL) /usr/sbin/useradd,/usr/sbin/useradd
一个以上命令就需要用逗号隔开了,注意是英文的逗号
保存到普通账户机器上查看就可以了
普通用户机器测试
[root@node-2 ~]# su it02
[it02@node-2 root]$ useradd it03
bash: /usr/sbin/useradd: Permission denied
[it02@node-2 root]$ useradd it03
bash: /usr/sbin/useradd: Permission denied
[it02@node-2 root]$ sudo -l
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for it02:
Sorry, try again.
[sudo] password for it02:
Matching Defaults entries for it02 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
User it02 may run the following commands on this host:
(ALL) /usr/sbin/useradd
[it02@node-2 root]$ useradd it03
bash: /usr/sbin/useradd: Permission denied
[it02@node-2 root]$ sudo useradd it03
[it02@node-2 root]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
wang:x:1000:1000:wang:/home/wang:/bin/bash
ntp:x:38:38::/etc/ntp:/sbin/nologin
it01:x:1001:1001::/home/it01:/bin/bash
it02:x:1002:1002::/home/it02:/bin/bash
it03:x:1003:1003::/home/it03:/bin/bash
[it02@node-2 root]$ sudo -l
[sudo] password for it02:
Matching Defaults entries for it02 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
User it02 may run the following commands on this host:
(ALL) /usr/sbin/useradd, (ALL) /usr/sbin/userdel
[it02@node-2 root]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
wang:x:1000:1000:wang:/home/wang:/bin/bash
ntp:x:38:38::/etc/ntp:/sbin/nologin
it01:x:1001:1001::/home/it01:/bin/bash
it02:x:1002:1002::/home/it02:/bin/bash
it03:x:1003:1003::/home/it03:/bin/bash
[it02@node-2 root]$ sudo userdel it03
[it02@node-2 root]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
wang:x:1000:1000:wang:/home/wang:/bin/bash
ntp:x:38:38::/etc/ntp:/sbin/nologin
it01:x:1001:1001::/home/it01:/bin/bash
it02:x:1002:1002::/home/it02:/bin/bash
[it02@node-2 root]$ userdel it03
bash: /usr/sbin/userdel: Permission denied
注意:这里我们普通用户需要执行命令,前面都要加上sudo才可以
sudo功能配置方法路径文件
方式1
visudo
方式2
vi /etc/sudoers
总结:本质都是打开一个文件
如何检查visudo配置文件是否出错?
[root@node-2 ~]# visudo -c
/etc/sudoers: parsed OK
需求1:授权单个命令或者多个命令
99 it02 ALL=(ALL) /usr/sbin/useradd,/usr/sbin/userdel
需求2:授权多个目录全部命令
99 it02 ALL=(ALL) /usr/sbin/*,/usr/bin/*
也可以测试看下
[it02@node-2 root]$ sudo -l
Matching Defaults entries for it02 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
User it02 may run the following commands on this host:
(ALL) /usr/sbin/useradd, (ALL) /usr/sbin/userdel, (ALL) /usr/bin/cp
[it02@node-2 root]$ visudo
visudo: /etc/sudoers: Permission denied
visudo: /etc/sudoers: Permission denied
[it02@node-2 root]$ sudo -l
[sudo] password for it02:
Matching Defaults entries for it02 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
User it02 may run the following commands on this host:
(ALL) /usr/sbin/*, (ALL) /usr/bin/*
[it02@node-2 data]$ sudo touch {1..20}.txt
[it02@node-2 data]$ ls
10.txt 12.txt 14.txt 16.txt 18.txt 1.txt 2.txt 4.txt 6.txt 8.txt
11.txt 13.txt 15.txt 17.txt 19.txt 20.txt 3.txt 5.txt 7.txt 9.txt
[it02@node-2 data]$ sudo rm -rf *
[it02@node-2 data]$ ls
[it02@node-2 data]$
基本上的命令都可以用了
如果此时有一些敏感的配置文件,不能让普通用户有执行权限,怎么办?
比如这个visudo这个配置文件,如果不想让普通用户有这个文件权限,就这样做
他的路径在这
[root@node-2 ~]# which visudo
/usr/sbin/visudo
加个这个,前面加个!代表锁定文件以防止并发修改,也就是不让他修改,无权限修改这个文件
!/usr/sbin/visudo
98 root ALL=(ALL) ALL
99 it02 ALL=(ALL) /usr/sbin/*,/usr/bin/*,!/usr/sbin/visudo
测试
这下普通用户编辑不了这个文件了
[it02@node-2 data]$ sudo -l
Matching Defaults entries for it02 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
User it02 may run the following commands on this host:
(ALL) /usr/sbin/*, (ALL) /usr/bin/*, (ALL) !/usr/sbin/visudo
[it02@node-2 data]$ sudo visudo
Sorry, user it02 is not allowed to execute '/sbin/visudo' as root on node-2.
注意:
/usr/sbin/*,/usr/bin/*
这两个文件包含了大量的命令,所以这个文件授权出去,基本上就等于把root差不多也给授权出去了的。不过与root还是有差别的,毕竟还是需要超级管理员root来给你权限的
`/usr/sbin` 和 `/usr/bin` 是Linux系统中存放二进制可执行文件的两个目录。
- `/usr/sbin`:这个目录通常用于存放系统级的守护程序(daemons)和管理工具,这些程序和工具一般由系统管理员(root用户)执行,或者是需要较高权限才能运行的服务程序。例如,很多服务器相关的服务脚本和管理工具都存放在这个目录下。
- `/usr/bin`:这个目录包含了大量的通用二进制可执行文件,这些程序可供所有用户使用,包括日常的命令行工具和图形界面程序。例如,大部分常用的命令行工具如 `ls`、`mkdir`、`vi` 等都在此目录下。
`/usr/sbin/*,/usr/bin/*` 这样的表达式通常在Shell脚本或命令行中用来表示这两个目录下的所有可执行文件。例如,在搜索特定文件、批量更改权限或执行其他涉及多个二进制文件的操作时,可能会用到这种通配符表达式。
需求3:如何去除普通用户登录执行命令需要密码----不需要输入密码,直接sudo管理
[root@node-2 ~]# su it02
[it02@node-2 root]$ sudo useradd 1101
[sudo] password for it02:
root端设置
visudo
加上这个就可以NOPASSWD: 含义就是不要输入密码登录了
98 root ALL=(ALL) ALL
99 it02 ALL=(ALL) NOPASSWD: /usr/sbin/*,/usr/bin/*,!/usr/sbin/visudo
测试
[root@node-2 ~]# su it02
[it02@node-2 root]$ sudo useradd 1101
useradd: user '1101' already exists
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南