CentOS下的sudo相关配置的总结归纳

本文详细介绍CentOS系统中sudo的配置方法,包括sudo的基本使用、配置文件路径、sudoers规则分类及特殊符号用法等。同时介绍了如何通过定义别名简化配置过程,并给出授权规则的格式与实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CentOS下的sudo相关配置的总结归纳

1 基础部分

1.1 常用的命令行




1
2
3
4
5
6
man  sudoers  #参阅帮助
visudo  #编辑sudoers的命令
sudo  -l  #查看可执行或禁止执行的命令
sudo  -u user1  /bin/ls  #指定user1用户的身份执行命令
sudo  -g gp1  /bin/ls  #指以gp1组的身份执行
sudo  -u user1 -g gp1  /bin/ls  #指定用户和组的身份执行



1.2 配置文件路径




1
/etc/sudoers



1.3 sudoers的规则分类

sudoers的规则分为以下两类:

1)别名定义(可选)

2)授权规则(必选)

1.4 特殊符号的用法




1
2
3
4
5
6
7
"#"  用于注释
"\x"  转义字符
"\" 使用到物理行行尾则把下行的物理行连接成一个逻辑行
"*"  匹配零个或多个字符
"?"  匹配单个字符
"[...]"  匹配指定范围的字符
"[!...]"  匹配非指定范围的字符



2 Alias(别名)

2.1 别名的类型

包含以下四种别名:User_Alias,Runas_Alias,Host_Alias,Cmnd_Alias

注:以上别名类型的书写大小写敏感




1
2
3
4
Alias ::=  'User_Alias'  User_Alias ( ':'  User_Alias)* |
          'Runas_Alias'  Runas_Alias ( ':'  Runas_Alias)* |
          'Host_Alias'  Host_Alias ( ':'  Host_Alias)* |
          'Cmnd_Alias'  Cmnd_Alias ( ':'  Cmnd_Alias)*



2.2 别名的定义格式

2.2.1 单个别名的书写方式




1
Alias_Type NAME = item1, item2, ...



注:别名成员以“,”号分隔

2.2.2 多个别名的书写方式




1
Alias_Type NAME = item1, item2, item3 : NAME = item4, item5



注:以“:”号分隔

2.2.3 四种书写简式




1
2
3
4
5
6
7
User_Alias ::= NAME  '='  User_List
  
Runas_Alias ::= NAME  '='  Runas_List
  
Host_Alias ::= NAME  '='  Host_List
  
Cmnd_Alias ::= NAME  '='  Cmnd_List



2.3 别名定义NAME的有效字符




1
NAME ::= [A-Z]([A-Z][0-9]_)*



2.4 常见的定义范例

 

2.4.1 命令行别名的定义范例

作用:定义用户别名和别名中包含能否运行的命令

范例:




1
2
## 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



2.4.2 用户别名的定义范例

作用:定义用户别名和别名中包含的用户




1
2
## User Aliases
User_Alias NETWORKINGADMINS = user1, user2, %gp1



注:

1)组前面加“%”号

2)用户名必须是系统有效的用户

2.4.3 主机别名的定义范例

作用:定义主机别名和别名中包含的主机

范例:




1
2
## Host Aliases
Host_Alias     FILESERVERS = fs1, fs2



注:

1)服务器fs1和fs2属于FILESERVERS组

2)主机可以是主机名称、IP(192.168.0.8)、或网段(192.168.0.0/24)、子网掩码(255.255.255.0)

 

3 授权规则

3.1 授权规则的格式




1
2
3
4
5
6
7
8
9
10
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
##      user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere



其实就这个意思:




1
用户名或%组名 主机名称=能否运行的命令



注:以上都可以使用别名代替

3.2 授权规则的范例

3.2.1 不使用别名的定义方式

基于系统用户名的定义




1
user1 fs1= /sbin/mount  /mnt/cdrom /sbin/umount  /mnt/cdrom



基于系统组的定义

 




1
%gp1 fs1= /sbin/mount  /mnt/cdrom /sbin/umount  /mnt/cdrom



使用ALL关键字的定义

 




1
root    ALL=(ALL)       ALL



3.2.2 使用别名的定义方式




1
NETWORKINGADMINS FILESERVERS=(NETWORKADMINS)



注:

1)NETWORKINGADMINS代表定义过的用户或组:user1, user2, %gp1

2)FILESERVERS代表定义过的服务器:fs1, fs2

3)NETWORKADMINS代表定义过的命令:/sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

 

3.2.3 关闭密码验证提示

在命令列前加入关键字“NOPASSWD: ”,详细如下:




1
%wheel        ALL=(ALL)       NOPASSWD: ALL






1
%wheel        ALL=(ALL)       NOPASSWD:  /sbin/route



4 其他指令

4.1 导入子规则




1
includedir  /etc/sudoers .d



使定义于/etc/sudoers.d目录下的子规则生效

4.2 关闭sudo命令的提示

此选项适用于使用shell中调用sudo执行命令时候屏蔽以下提示:




1
sudo : sorry, you must have a  tty  to run  sudo



4.2.1 方法一

注释掉以下行:




1
#Defaults    requiretty



4.2.2 方法二

添加以下行:




1
Defaults:user1 !requiretty



4.3 指定安全的执行路径




1
Defaults    secure_path =  /sbin : /bin : /usr/sbin : /usr/bin



5 开启监视日志

5.1 创建日志文件




1
touch  /var/log/sudo .log



5.2 开启sudo的日志功能




1
visudo



加入如下行:




1
2
3
Defaults logfile= /var/log/sudo .log
Defaults loglinelen=0
Defaults !syslog



5.3 配置系统日志

5.3.1 修改日志配置文件




1
vim  /etc/rsyslog .conf



“local7.*”行后加入如下行:




1
local2.debug                                            /var/log/sudo .log



5.3.2 重启系统日志服务




1
service rsyslog restart



5.4 测试日志

5.4.1 命令行监视日志




1
tail  -f  /var/log/sudo .log



5.4.2 执行指令测试




1
sudo  /usr/bin/ssh  root@127.0.0.1



6 应用场景

6.1 排除部分使用的情景

6.1.2 配置要求




1
2
禁止某用户使用: su 命令
允许某用户使用: su 除外命令



注:禁止的原因是因为用户可以使用此命令提权




1
sudo  su  - root



6.1.2 解决方案

1) 查询用户的所属组




1
  id  mail



显示如下:




1
uid=8(mail) gid=12(mail)  groups =12(mail)



2) 定义方法




1
2
%mail ALL=(root) NOPASSWD: ALL
mail ALL=(root) NOPASSWD: ! /bin/su



注:定义所属组允许执行所有命令,但拒绝用户执行su命令

3) 相对好的定义方法




1
2
%mail ALL=(root) NOPASSWD:  /sbin/ *, /bin/ *, /usr/sbin/ *, /usr/bin/ *
mail ALL=(root) NOPASSWD: ! /bin/su



可防止用户使用如下方法破解:




1
2
sudo  cp  /bin/su  assu
sudo  . /assu  - root



4) 相对更好的定义方法




1
2
3
%mail ALL=(root) NOPASSWD:  /sbin/ *, /bin/ *, /usr/sbin/ *, /usr/bin/ *
mail ALL=(root) NOPASSWD: !/*/*  /sbin/ *,!/*/*  /bin/ *,!/*/*  /usr/sbin/ *,!/*/*  /usr/bin/ *,\
                              ! /bin/su



注:禁止用户使用允许的命令操作运行命令的目录的文件

可防止用户使用如下方法破解:




1
2
3
4
5
  sudo  mv  /bin/su  /bin/assu
  #或者
  sudo  cp  /bin/su  /bin/assu
  #然后
  sudo  assu - root



5)实际上,我建议做如下配置




1
2
3
%mail ALL=(root) NOPASSWD:  /sbin/ *, /bin/ *, /usr/sbin/ *, /usr/bin/ *
mail ALL=(root) NOPASSWD: !/*/*  /sbin/ *,!/*/*  /bin/ *,!/*/*  /usr/sbin/ *,!/*/*  /usr/bin/ *,\
                              ! /bin/su ,! /usr/bin/passwd  *root*,!/*/* * /root/ *



可防止用户使用passwd命令操作root用户:




1
2
3
  sudo  su  - root
  sudo  passwd  -l root
  sudo  passwd  -u root



或使用其他命令去操作root的家目录




1
2
  sudo  ls  /root/
  sudo  ls  -l  /root/



怎样?脑洞大开吧?sudo是相对安全的对吧?O(∩_∩)O哈哈~

注:以上个人总结,如有错漏欢迎指正,在下感激不尽。

 本文永久更新链接地址http://www.linuxidc.com/Linux/2016-06/132596.htm

linux`
<think>嗯...用户需要CentOS7安装PHP的教程,但给了一堆引用。让我整理下关键信息:用户明确表示引用的[1]-[4]只是参考内容,重点是根据实际需求提供安装方案。注意到引用[1]提到系统默认PHP5.4但用户想升级到PHP7,而引用[3]用了第三方源php72w的写法——这应该指的是Webtatic仓库的命名规则(PHP7.2版本)。用户可能面临两个选择:①用系统默认yum源安装老版本PHP(简单但版本旧)②通过第三方源安装PHP7(需要额外配置)。考虑到现代开发基本要求PHP7以上,决定按方案②来设计步骤。准备分这四个阶段:首先是环境准备部分要强调selinux和firewalld的处理,很多新手卡在这里(引用[4]提到大量编译依赖库的名字如libjpeg-devel等,其实可以归纳成一条yumgroupinstall命令更简洁)。接着需要特别注明第三方源的选择:Remi和Webtatic都是可靠选项,但不同源里的包名格式不同(如引用[3]的php72w开头包),这点用户容易混淆。安装阶段想到三个注意事项:①PHP-FPM配置引用[2]提到的路径迁移问题(从/usr/local/移到标准路径)②缺少的扩展用yumlistavailablephp*查询③redis/memcached扩展在pecl或yum源的名称差异(如引用[3]里居然是php72w-pecl-redis这种神奇命名)。最后关于PHP7的小版本选择,用户没说具体版本号,所以注明5.4→7.x的跨度,并提示主流7.4/8.x的选择。突然意识到还漏了多版本共存的需求——不过用户没提,先保留这个知识点备用。</think> 在 CentOS 7 上安装 PHP(推荐 PHP7)的详细步骤如下,综合整理了最佳实践: ### 一、准备工作 1. **更新系统** ```bash sudo yum update -y ``` 2. **安装 EPEL 仓库** ```bash sudo yum install epel-release -y ``` --- ### 二、添加第三方仓库(PHP7) > *CentOS 7 默认仓库仅提供 PHP5.4,需通过第三方源安装新版PHP:* ```bash # 添加 Webtatic 仓库 (推荐) sudo rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm ``` --- ### 三、安装 PHP 7.x #### 方案1:安装基础版本 ```bash sudo yum install php72w php72w-cli php72w-fpm -y ``` #### 方案2:完整开发环境 ```bash sudo yum install php72w php72w-cli php72w-fpm \ php72w-mysqlnd php72w-pdo php72w-mbstring \ php72w-gd php72w-opcache php72w-xml -y ``` > **注**: > - 将 `72w` 替换为 `74w`/`80w` 可安装 PHP7.4/PHP8.0 > - 常用扩展: > * `php72w-curl`:cURL支持 > * `php72w-redis`:Redis扩展 [^3] > * `php72w-pecl-memcached`:Memcached扩展 [^3] --- ### 四、验证安装 ```bash php -v # 输出示例:PHP 7.2.34 (cli) ``` --- ### 五、配置关键目录 1. **配置文件** ```bash /etc/php.ini # 主配置文件 /etc/php-fpm.conf # PHP-FPM配置 ``` 2. **服务管理** ```bash sudo systemctl start php-fpm # 启动服务 sudo systemctl enable php-fpm # 开机自启 ``` --- ### 编译安装说明(高级需求) > *如需特定版本或自定义参数,需手动编译:* ```bash # 安装编译依赖(示例) sudo yum install libxml2-devel openssl-devel libjpeg-devel \ freetype-devel libpng-devel gmp-devel -y [^4] # 下载源码并编译(如PHP7.4.30) wget https://www.php.net/distributions/php-7.4.30.tar.gz tar zxvf php-7.4.30.tar.gz cd php-7.4.30 ./configure --prefix=/usr/local/php7.4 [^2] make && sudo make install ``` --- ### 常见问题解决 1. **扩展未生效** 重启服务:`sudo systemctl restart php-fpm` 2. **Nginx/Apache集成** 需在Web服务器配置中添加PHP解析: ```nginx # Nginx 示例配置 location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; include fastcgi_params; } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值