常用命令-提权降权-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
posted @ 2024-03-18 22:44  三思博客  阅读(78)  评论(0编辑  收藏  举报