自己做博客网站,互联网公司市值排名城市,海口建站模板系统,广东东莞天气一、Sudo基本介绍
sudo是Linux 中用于允许特定用户以超级用户或其他特权用户的身份执行特定的命令或任务。sudo 提供了一种安全的方法#xff0c;使用户能够临时获取额外的权限#xff0c;而不需要以完全超级用户的身份登录系统。sudo也可以用了设置黑名单命令清单#xff…一、Sudo基本介绍
sudo是Linux 中用于允许特定用户以超级用户或其他特权用户的身份执行特定的命令或任务。sudo 提供了一种安全的方法使用户能够临时获取额外的权限而不需要以完全超级用户的身份登录系统。sudo也可以用了设置黑名单命令清单控制用户不允许执行一些命令。 默认情况下/etc/sudoers 是不能被任何人直接编辑的因为它的权限是 440虽然也可以对其赋予写权限后再编辑但推荐使用 visudo 命令编辑该文件。
sudo的执行过程 1、sudo 会读取和解析 /etc/sudoers 文件查找调用命令的用户及其权限 2、然后提示调用该命令的用户输入密码(通常是用户密码但也可能是目标用户的密码或者也可以通过 NOPASSWD 标志来跳过密码验证) 3、 之后sudo 创建一个子进程调用 setuid() 来切换到目标用户 4、接着它会在上述子进程中执行参数给定的shell 或命令 二、sudo基本用法
1、授权配置格式
USER/GROUP HOST(USER[:GROUP]) [NOPASSWD:] COMMANDS
• USER/GROUP 表示需要被授权的用户或者组如果是组则需要以 % 开头
• HOST 表示允许从哪些主机登录的用户运行 sudo 命令ALL 表示允许从任何终端、机器访问
• (USER[:GROUP]) 表示使用 sudo 可切换的用户或者组组可以不指定ALL 表示可以切换到系统的所有用户
• NOPASSWD 如果指定则该用户或组使用 sudo 时不必输入密码
• COMMANDS 表示运行指定的命令ALL 表示允许执行所有命令
配置示例
# 允许 sudo 组执行所有命令
%sudo ALL(ALL:ALL) ALL
# 允许用户执行所有命令且无需输入密码
huoty ALL (ALL) NOPASSWD: ALL
# 仅允许用户执行 echo, ls 命令
huoty ALL (ALL) NOPASSWD: /bin/echo /bin/ls
# 运行本机的用户执行关机命令
huoty localhost/sbin/shutdown -h now
# 允许 users 用户组中的用户像 root 用户一样使用 mount、unmount、chrom 命令
%users ALL/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom 2、使用Defaults 配置可以改变 sudo 命令的行为
# 指定用户尝试输入密码的次数默认值为3
Defaults passwd_tries5
# 设置密码超时时间默认为 5 分钟
Defaults passwd_timeout2
默认sudo 询问用户自己的密码添加 targetpw 或 rootpw 配置可以让 sudo 询问 root 密码
Defaults targetpw
# 指定自定义日志文件
Defaults logfile/var/log/sudo.log
# 要在自定义日志文件中记录主机名和四位数年份可以加上 log_host 和 log_year 参数
Defaults log_host, log_year, logfile/var/log/sudo.log
# 保持当前用户的环境变量
Defaults env_keep LANG LC_ADDRESS LC_CTYPE COLORS DISPLAY HOSTNAME EDITOR
Defaults env_keep ftp_proxy http_proxy https_proxy no_proxy
# 安置一个安全的 PATH 环境变量
Defaults secure_path/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 3、别名设置
• Host_Alias 主机别名
• Cmnd_Alias 命令别名
• User_Alias 用户别名可以是用户用户组
• Runas_Alias 目的用户别名
配置示例
# 主机别名
Host_Alias FILESERVERS fs1, fs2
Host_Alias MAILSERVERS smtp, smtp2
# 用户别名
User_Alias ADMINS huoty, kong
# 命令别名
Cmnd_Alias SHUTDOWN /sbin/reboot, /sbin/poweroff
Cmnd_Alias PKGMGMT /usr/bin/dpkg, /usr/bin/apt-get, /usr/bin/aptitude
Cmnd_Alias SERVICES /sbin/service, /sbin/chkconfig
Cmnd_Alias NETWORKING /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/iptables
Cmnd_Alias STORAGE /sbin/fdisk, /sbin/sfdisk, /bin/mount, /bin/umount
Cmnd_Alias DELEGATING /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
Cmnd_Alias PROCESSES /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
# 允许 ADMINS 用户执行包管理和关机命令
ADMINS ALL PKGMGMT, SHUTDOWN
# 允许 sys 用户组中的用户使用 NETWORKING 等所有别名中配置的命令
%sys ALL NETWORKING, PKGMGMT, SERVICES, STORAGE, DELEGATING, PROCESSES 4、sudo 常用参数
• -l 列出当前用户所拥有的权限
• -E 保持当前用户的环境变量
• -H 设置 HOME 环境变量为目标用户的主目录
• -u 以指定用户运行命令
• -k 结束密码有效期限即下次再执行时需要重新输入密码
• -- 停止解析命令行参数即之后命令不再作为其控制餐宿 查看sudo 命令文件的信息如下
$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 155008 Mar 13 2015 /usr/bin/sudo
可以发现sudo 上启用了 setuid 位即当任何用户运行这个二进制文件时其将以 root 用户的权限运行。
sudo 存在一个曲线是其无法使用 Shell 的内置命令。如 history 等
$ sudo history
sudo: history: command not found
解决这个问题的办法是临时切换到root shell并在那里执行任何命令包括 Shell 的内置命令
$ sudo bash
当前用户的命令别名不会被应用到sudo。如果需要这样可以在 ~/.bashrc 或者 /etc/bash.bashrc 中加入
alias sudosudo
如果希望使用sudo 一次执行多个命令可以使用 bash -c如
$ sudo -- bash -c pwd; hostname; whoami 三、Sudo黑名单配置
1、sudo的用户权限配置
a) /etc/sudoers文件
默认的配置用户操作sudo命令权限的文件、也就是说可以在这个文件中通过配置来制定用户是否具有sudo权限、和哪些命令可以使用sudo权限。如果要通过编辑这个文件来实现用户的sudo赋权操作必须使用命令visudo 来修改sudoers文件。
b) /etc/sudoers.d文件夹
通过cat /etc/sudoers查看sudoers文件内容你会发现有一行说明最好不要修改此文件、通过操作sudoers.d文件夹来实现普通用户的sudo命令赋权过程。 2、黑名单配置步骤
1) 在/etc/sudoers.d 文件夹下新建一个文件名称无所谓如user1
visudo -f /etc/sudoers.d/user1
2) 编辑user1文件添加 可以先将/sbin、/usr/sbin/ 中的命令先全部做策略限制。 3)修改策略文件权限为400
chmod 400 /etc/sudoers.d/user1
4)策略文件配置完成后测试是否有语法错误。 5) 用user1账户登录执行sudo命令来验证是否生效