hand
_1_14_80
4
返回栏目
1k
2k
0.4k
0.6k
0.9k
0.7k
3k
2k
0.1k
1k
0k
1k
0k
0.4k
0.3k
0.1k
0.6k
0k
1k
3k
2k
0k
0k
0.4k
2k
1k
0k
6k
0.8k
1k
0.5k
2k
0k
0k
0k
2k
0k
4k
2k
1k
1k
2k
0k
0.5k
0k
1k
0.2k
0.3k
0.1k
0k
0k
0.8k
1k
0.6k
0k
0k
2k
0.6k
1k
2k
2k
0.6k
0.6k
0.5k
1k
2k
0.5k
0.1k
0.2k
4k
0k
0.1k
0.8k
1k
0.3k
0k
0.3k
0.1k
1k
8k
0.1k
0.7k
0.1k
0.3k
0.9k
0.2k
4k
0.2k
6k
3k
3k
1k
3k
0.1k
1k
0.2k
0k
0.7k
0.4k
2k
2k
0.5k
0.8k
5k
0.1k
0.3k
0.3k
0.5k
0.1k
1k
0k
0.7k
0.2k
2k
2k
1k
6k
3k
1k
2k
1k
2k
2k
1k
0k
0k
1k
0k
0k
0.3k
0.3k
0.2k
0k
0.3k
0k
1k
0.1k
0.6k
0k
0k
0k
0k
0k
0.1k
0k
0k
0k
0.2k
0k
0.2k
0k
0k
0k
0k
0k
0k
0k
0.9k
1k
2k
0.8k
0.4k
0k
0k
0k
0.5k
0k
0k
0k
0k
0.4k
0k
0k
0.1k
返回服务器栏目
作者:
贺及楼
成为作者
更新日期:2022-08-14 00:00:49
只可以root查看
其他用户看都不能看
Linux是多用户多任务的操作系统, 共享该系统的用户往往不只一个。
出于安全性考虑, 有必要通过useradd创建一些非root用户, 只让它们拥有不完全的权限;
如有必要,再来提升权限执行。
sudo就是来解决这个需求的:
这些非root用户不需要知道root的密码,就可以提权到root,
执行一些root才能执行的命令
cat /etc/sudoers # 查看
# vim修改
chmod 777 /etc/sudoers # 修改sudoers文件权限
vim /etc/sudoers # vim修改
chmod 440 /etc/sudoers # 修改sudoers文件权限,不要忘了!
例子:
user1 ALL=() !ALL # sudo提到root,要密码,什么都动不了
user1 ALL=() /xxx/xxx,/xxx/xxx # sudo提到root,要密码,可以/xxx/xxx
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##该文件允许特定用户像root用户一样使用各种各样的命令
##而不需要root用户的密码
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
## 在文件的底部提供了很多相关命令的示例以供选择
## 这些示例都可以被特定用户或
## ## 用户组所使用
## This file must be edited with the "visudo" command.
## 该文件必须使用"visudo"命令编辑
## Host Aliases
#主机别名
## Groups of machines. You may prefer to use hostnames (perhap using
## wildcards for entire domains) or IP addresses instead.
## 对于一组服务器,你可能会更喜欢使用主机名(可能是全域名的通配符)
## 或IP地址代替,这时可以配置主机别名
# Host_Alias FILESERVERS = fs1, fs2
# Host_Alias MAILSERVERS = smtp, smtp2
## User Aliases
#用户别名
## These aren t often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
## 这并不很常用,因为你可以通过使用组来代替一组用户的别名
# User_Alias ADMINS = jsmith, mikem
## Command Aliases
## These are groups of related commands...
## 指定一系列相互关联的命令(当然可以是一个)的别名,通过赋予该别名sudo权限,
## 可以通过sudo调用所有别名包含的命令,下面是一些示例
## Networking
#网络操作相关命令别名
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient,
/usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig,
/sbin/mii-tool
## Installation and management of software
#软件安装管理相关命令别名
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
## Services
#服务相关命令别名
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
## Updating the locate database
#本地数据库升级命令别名
Cmnd_Alias LOCATE = /usr/sbin/updatedb
## Storage
#磁盘操作相关命令别名
Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount
## Delegating permissions
#代理权限相关命令别名
Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
## Processes
#进程相关命令别名
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
## Drivers
#驱动命令别名
Cmnd_Alias DRIVERS = /sbin/modprobe
#环境变量的相关配置
# Defaults specification
#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
# You have to run "ssh -t hostname sudo <cmd>".
#
Defaults requiretty
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR
LS_COLORS MAIL PS1 PS2 QTDIR USERNAME
LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION
LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC
LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS
_XKB_CHARSET XAUTHORITY"
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## 下面是规则配置:什么用户在哪台服务器上可以执行哪些命令(sudoers文件可以在多个系统上共享)
## Syntax:
##语法
user MACHINE=COMMANDS
## 用户 登录的主机=(可以变换的身份) 可以执行的命令
## The COMMANDS section may have other options added to it.
## 命令部分可以附带一些其它的选项
## Allow root to run any commands anywhere
## 允许root用户执行任意路径下的任意命令
用户 - 无%:
root ALL=(ALL) ALL # 系统默认
user1 ALL=(ALL) ALL # user1 可以使用最高权限 需要输入用户密码
user2 ALL=(ALL) NOPASSWD : ALL # user2 可以使用最高权限 不需要输入用户密码
用户组 - 有%:
## Allows members of the "sys" group to run networking, software,
## service management apps and more.
## 允许sys中户组中的用户使用NETWORKING等所有别名中配置的命令
%sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## Allows people in group wheel to run all commands
## 允许wheel用户组中的用户执行所有命令
%wheel ALL=(ALL) ALL
## Same thing without a password
## 允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令
%wheel ALL=(ALL) NOPASSWD: ALL
## Allows members of the users group to mount and unmount the
## cdrom as root
## 允许users用户组中的用户像root用户一样使用mount、unmount、chrom命令
%users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
## Allows members of the users group to shutdown this system
## 允许users用户组中的用户像root用户一样使用shutdown命令
%users localhost=/sbin/shutdown -h now
由于/etc/sudoers文件是只读文件,所以保存时使用 !
shift zz 保存退出
user1:
su user1 # 切换到user1
sudo -s # 使用最高权限
passwd: # 需要输入当前user1的用户密码
user2:
su user2 # 切换到user2
sudo -s # 使用最高权限
# 不需要输入当前user2的用户密码
sudo的权限控制可以在/etc/sudoers文件中查看到。
一般来说,通过cat /etc/sudoers指令来查看该文件, 会看到如下几行代码:
root ALL=(ALL:ALL) ALL
%wheel ALL=(ALL) ALL
%sudo ALL=(ALL:ALL) ALL
对/etc/sudoers文件进行编辑的代码公式可以概括为:
授权用户/组 主机=[(切换到哪些用户或组)] [是否需要输入密码验证] 命令1,命令2,...
凡是[ ]中的内容, 都能省略; 命令和命令之间用,号分隔,为了方便说明, 将公式的各个部分称呼为字段1 - 字段5:
授权用户/组 主机 =[(切换到哪些用户或组)] [是否需要输入密码验证] 命令1,命令2,...
字段1 字段2 =[(字段3)] [字段4] 字段5
字段3、字段4,是可以省略的。
在上面的默认例子中:
# "字段1"不以%号开头的表示"将要授权的用户"
比如例子中的root;以%号开头的表示"将要授权的组"
比如例子中的%wheel组 和 %sudo组。
# "字段2"表示允许登录的主机, ALL表示所有;
如果该字段不为ALL,表示授权用户只能在某些机器上登录本服务器来执行sudo命令. 比如:
jack mycomputer=/usr/sbin/reboot,/usr/sbin/shutdown
表示: 普通用户jack在主机(或主机组)mycomputer上, 可以通过sudo执行reboot和shutdown两个命令。"字段3"和"字段4"省略。
# "字段3"如果省略, 相当于(root:root),表示可以通过sudo提权到root;
如果为(ALL)或者(ALL:ALL), 表示能够提权到(任意用户:任意用户组)。
请注意,"字段3"如果没省略,必须使用( )双括号包含起来。这样才能区分是省略了"字段3"还是省略了"字段4"。
# "字段4"的可能取值是NOPASSWD:
请注意NOPASSWD后面带有冒号:
表示执行sudo时可以不需要输入密码。比如:
lucy ALL=(ALL) NOPASSWD: /bin/useradd
表示: 普通用户lucy可以在任何主机上, 通过sudo执行/bin/useradd命令, 并且不需要输入密码.
又比如:
peter ALL=(ALL) NOPASSWD: ALL
表示: 普通用户peter可以在任何主机上, 通过sudo执行任何命令, 并且不需要输入密码。
# "字段5"是使用逗号分开一系列命令,这些命令就是授权给用户的操作;
ALL表示允许所有操作。
命令都是使用绝对路径, 这是为了避免目录下有同名命令被执行,从而造成安全隐患。
如果你将授权写成如下安全性欠妥的格式:lucy ALL=(ALL) chown,chmod,useradd那么用户就有可能创建一个他自己的程序, 也命名为userad, 然后放在它的本地路径中, 如此一来他就能够使用root来执行这个"名为useradd的程序"。这是相当危险的!
命令的绝对路径可通过which指令查看到: 比如
which useradd
可以查看到命令useradd的绝对路径: /usr/sbin/useradd
服务器
整章节共174节
快分享给你的小伙伴吧 ~