linux禁用root

news2024/11/15 4:01:05

linux禁用root

    • 1. 禁止普通用户切换到root
      • 1.1 sudo -i和sudo -s的区别
      • 1.2 sudo -i和直接登录root账号的区别
      • 1.3 禁止sudo -i切换root
      • 1.4 禁止su - root切换root
    • 2. 禁止root远程登录
      • 2.1 ssh禁止root登录
      • 2.2 禁止远程桌面登录

在这里插入图片描述

本文主要介绍:

  1. 如何禁止普通用户切换到root
  2. 如何禁止使用root远程登录

1. 禁止普通用户切换到root

普通用户可以通过两个命令切换到root,包括:

sudo -i
su - xxx

以及一个伪切换sudo -s

1.1 sudo -i和sudo -s的区别

  • sudo -i:这个命令会加载用户的.profile, .bash_profile .login文件,并切换到目标用户的home目录,通常是root用户的目录。这允许用户以root用户的完整环境运行命令,包括所有的环境变量和配置。因此,当使用sudo -i时,用户会获得一个类似于登录root用户的环境,包括root的环境变量。
yurq@yurq:~$ sudo -i
root@yurq:~# env
SHELL=/bin/bash
SUDO_GID=1000
LANGUAGE=zh_CN:zh
JAVA_HOME=/home/hadoop/workspace/jdk-8u202-linux-x64/jdk1.8.0_202
JRE_HOME=/home/hadoop/workspace/jdk-8u202-linux-x64/jdk1.8.0_202/lib
SUDO_COMMAND=/bin/bash
SUDO_USER=yurq
PDSH_RCMD_TYPE=ssh
PWD=/root
LOGNAME=root
HOME=/root
LANG=zh_CN.UTF-8
HADOOP_USER_NAME=hadoop
LESSCLOSE=/usr/bin/lesspipe %s %s
TERM=xterm
HADOOP_HOME=/home/hadoop/workspace/hadoop-2.7.7
LESSOPEN=| /usr/bin/lesspipe %s
USER=root
ZOOKEEPER_HOME=/home/hadoop/workspace/apache-zookeeper-3.7.1-bin
DISPLAY=localhost:10.0
SHLVL=1
SPARK_HOME=/home/hadoop/workspace/spark-2.4.8-bin-hadoop2.7
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/home/hadoop/workspace/jdk-8u202-linux-x64/jdk1.8.0_202/bin:/home/hadoop/workspace/hadoop-2.7.7/bin:/home/hadoop/workspace/hadoop-2.7.7/sbin:/home/hadoop/workspace/apache-zookeeper-3.7.1-bin/bin:/home/hadoop/workspace/spark-2.4.8-bin-hadoop2.7/bin:/home/hadoop/workspace/spark-2.4.8-bin-hadoop2.7/sbin
SUDO_UID=1000
MAIL=/var/mail/root
_=/usr/bin/env
root@yurq:/home/yurq# id
用户id=0(root) 组id=0(root)=0(root)
  • sudo -s:这个命令不会加载用户的配置文件,也不会切换到目标用户的home目录。它只是提供一个没有加载用户特定配置的root shell。这意味着,虽然用户可以在这个shell中执行命令,但不会享受到完整的root环境,例如不会加载root的环境变量。这通常会带来一些问题,比如xjjdog用户下设置了自己的一套环境变量,当使用 su -s 切换到超级管理员权限,依然使用的是xjjdog的环境变量。这样,就会发生找不到命令,语言错误,甚至配置错误的结果。
yurq@yurq:~$ sudo -s
root@yurq:/home/yurq# env
SHELL=/bin/bash
SUDO_GID=1000
LANGUAGE=zh_CN:zh
SUDO_COMMAND=/bin/bash
SUDO_USER=yurq
PWD=/home/yurq
LOGNAME=root
HOME=/root
LANG=zh_CN.UTF-8
...
LESSCLOSE=/usr/bin/lesspipe %s %s
TERM=xterm
LESSOPEN=| /usr/bin/lesspipe %s
USER=root
DISPLAY=localhost:10.0
SHLVL=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
SUDO_UID=1000
MAIL=/var/mail/root
_=/usr/bin/env
root@yurq:/home/yurq# id
用户id=0(root) 组id=0(root)=0(root)

1.2 sudo -i和直接登录root账号的区别

  • 直接登录root:‌意味着用户完全切换到了root的身份和环境,‌拥有对系统的完全控制权。‌这种做法通常只在必要时才应该进行,‌因为它可能会带来安全风险,‌因为任何在root用户环境下进行的操作都可能对系统造成不可逆的影响。‌

使用sudo -i相比直接登录为root,‌提供了更高的安全性。‌因为即使是以root权限运行命令,‌用户也仍然在自己的用户环境中,‌这减少了误操作或恶意软件对系统的潜在损害。‌此外,‌sudo命令的使用记录会被详细记录在日志中,‌这对于追踪潜在的安全威胁或系统故障非常有用

root@yurq:~# env
SHELL=/bin/bash
LANGUAGE=zh_CN:zh
JAVA_HOME=/home/hadoop/workspace/jdk-8u202-linux-x64/jdk1.8.0_202
JRE_HOME=/home/hadoop/workspace/jdk-8u202-linux-x64/jdk1.8.0_202/lib
PDSH_RCMD_TYPE=ssh
PWD=/root
LOGNAME=root
XDG_SESSION_TYPE=tty
MOTD_SHOWN=pam
HOME=/root
LANG=zh_CN.UTF-8
HADOOP_USER_NAME=hadoop
LESSCLOSE=/usr/bin/lesspipe %s %s
XDG_SESSION_CLASS=user
TERM=xterm
HADOOP_HOME=/home/hadoop/workspace/hadoop-2.7.7
LESSOPEN=| /usr/bin/lesspipe %s
USER=root
ZOOKEEPER_HOME=/home/hadoop/workspace/apache-zookeeper-3.7.1-bin
DISPLAY=localhost:10.0
SHLVL=1
SPARK_HOME=/home/hadoop/workspace/spark-2.4.8-bin-hadoop2.7
XDG_SESSION_ID=15
XDG_RUNTIME_DIR=/run/user/0
SSH_CLIENT=192.168.79.1 61751 22
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/hadoop/workspace/jdk-8u202-linux-x64/jdk1.8.0_202/bin:/home/hadoop/workspace/hadoop-2.7.7/bin:/home/hadoop/workspace/hadoop-2.7.7/sbin:/home/hadoop/workspace/apache-zookeeper-3.7.1-bin/bin:/home/hadoop/workspace/spark-2.4.8-bin-hadoop2.7/bin:/home/hadoop/workspace/spark-2.4.8-bin-hadoop2.7/sbin
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus
SSH_TTY=/dev/pts/0
_=/usr/bin/env

1.3 禁止sudo -i切换root

sudo命令的配置文件是/etc/sudoers/etc/sudoers.d/,可以在/etc/sudoers.d目录中单独配置用户的sudo命令限制,类似vsftp单独配置每个账号

ubuntu默认普通用户是无法切换root

lvdd@yurq:~$ sudo -i
[sudo] lvdd 的密码:
lvdd 不在 sudoers 文件中。此事将被报告。

我们可以通过修改/etc/sudoers/etc/sudoers.d/进行配置,但是一般来说不能通过vim直接修改,因为默认无权限,即使是root

root@yurq:~# ll /etc/sudoers
-r--r----- 1 root root 917 724 11:39 /etc/sudoers

这里linux给我们提供了visudo命令,专门用于修改这个文件,不过虽然看起来像是vi命令,实际上是nano编辑器进行修改的。新增内容如下

root@yurq:~# grep lvdd /etc/sudoers
lvdd    ALL=(ALL:ALL) ALL

关于/etc/sudoers的编写格式,网上有很多讲解,这里不展开了

lvdd@yurq:~$ sudo -i
[sudo] lvdd 的密码:
root@yurq:~# 

sudo -i切换root需要输入当前用户的密码。改完了直接就生效了。

ubuntu如果禁止sudo -i可以切换用户,那么就要看看这个配置文件是否对普通用户进行了特殊配置。

这里我们改回去,在/etc/sudoers.d目录中配置用户信息

root@yurq:~# grep lvdd /etc/sudoers
#lvdd    ALL=(ALL:ALL) ALL

#切换终端
lvdd@yurq:~$ sudo -i
lvdd 不在 sudoers 文件中。此事将被报告。

新增配置文件lvdd

root@yurq:/etc/sudoers.d# cat lvdd
lvdd    ALL=(ALL:ALL) ALL

#切换终端
lvdd@yurq:~$ sudo -i
root@yurq:~#

又可以切换了。

1.4 禁止su - root切换root

lvdd@yurq:~$ su - root
密码:
root@yurq:~# 

前面提到sudo -切换root需要输入当前用户的密码,使用su - 切换root需要输入root密码。这个看起来像一个伪命题,因为我们都知道root密码了,还切换干嘛,不如直接登录了。实际上后面将提到,通过ssh登录,即使知道root密码,也可以禁止登录。毕竟大多数时候,我们都接触不到物理机。这里我们只研究可行性,暂时不讨论合理性。

这里简单介绍以下su命令带不带参的区别

  • su:‌这个命令允许用户切换到其他用户,‌但它不会加载目标用户的环境变量。‌这意味着,‌当你使用su命令切换到另一个用户时,‌你实际上是在当前用户的环境中运行目标用户的shell,‌而不是在目标用户的环境中运行。‌
  • su -:‌这个命令允许用户切换到另一个用户,‌并且会加载目标用户的环境变量。‌当你使用su -命令切换到另一个用户时,‌你会在目标用户的环境中运行,‌这意味着你会获得该用户所有的环境变量和配置。‌
  • su -c:‌这个命令允许你在切换到另一个用户的同时执行一个命令,‌然后立即返回到原始用户。‌这意味着你可以以其他用户的身份运行一个命令,‌而不需要实际切换到那个用户。‌例如,‌如果你想要以root用户的身份运行一个命令,‌但不想切换到root用户,‌你可以使用su -c 'command'的形式来执行。‌
lvdd@yurq:~$ su -c "tail -1 /etc/passwd" root
密码:
lvdd:x:1001:1007::/home/lvdd:/bin/bash

这里有多种方法禁止su切换到root,基本上大同小异,笔者列举两种方法:

方法一 修改su的权限

root@yurq:/etc/sudoers.d# ll /bin/su
-rwsr-xr-x 1 root root 67816 49 23:34 /bin/su*
root@yurq:/etc/sudoers.d# chmod 750 /bin/su
root@yurq:/etc/sudoers.d# ll /bin/su
-rwxr-x--- 1 root root 67816 49 23:34 /bin/su*
lvdd@yurq:~$ su - root
-bash: /usr/bin/su: 权限不够
lvdd@yurq:~$ su - yurq
-bash: /usr/bin/su: 权限不够

这样可以仅允许root用户和所属组的用户使用su命令,其他用户将无法使用。改回原来的权限

root@yurq:/etc/sudoers.d# chmod 4755 /bin/su
root@yurq:/etc/sudoers.d# ll /bin/su
-rwsr-xr-x 1 root root 67816 49 23:34 /bin/su*

方法二 修改认证条件

root@yurq:/etc/sudoers.d# grep auth /etc/pam.d/su
auth       sufficient pam_rootok.so debug
auth       required   pam_wheel.so group=wheel

这样设置后,‌只有wheel组的成员才能使用su -命令切换到root用户。‌

lvdd@yurq:~$ su - root
密码:
su: 认证失败

添加组及修改用户附加组

root@yurq:/etc/sudoers.d# groupadd wheel
root@yurq:/etc/sudoers.d# usermod -G wheel lvdd
lvdd@yurq:~$ su - root
密码:
root@yurq:~#

lvdd又可以愉快的切换root了。

到这里ubuntu系统就可以禁止或允许普通用户通过su进行切换root了,不过有的系统可能还需要作如下修改

修改/etc/login.defs文件,‌在文件末添加一行SU_WHEEL_ONLY yes,‌这样配置后,‌非wheel组的用户即使输入了正确的密码,‌也无法通过su -命令切换到root用户。‌

这里关于认证模块,可以参考linux PAM模块简介

2. 禁止root远程登录

前面说到了知道root密码,还使用普通用户切换root干什么?直接登录不好么。其实有些情况下,即使知道root密码也不可以通过远程登录。这里包括通过ssh进行命令行登录和远程桌面登录,下面我们分别进行说明

2.1 ssh禁止root登录

我们通过修改ssh的配置文件/etc/ssh/sshd_config,禁止root登录

root@yurq:/etc/sudoers.d# grep PermitRootLogin /etc/ssh/sshd_config
PermitRootLogin prohibit-password

可以看到ubuntu默认是禁止root使用密码登录的。

 PermitRootLogin
             Specifies whether root can log in using ssh(1).  The argument must be yes, prohibit-password, forced-commands-only, or no.  The default is
             prohibit-password.

查看帮助,可以知道PermitRootLogin 选项的值包括:

参数类别是否允许ssh登陆登录方式交互shell
yes允许没有限制没有限制
prohibit-password (without-password)允许除密码以外没有限制
forced-commands-only允许仅允许使用密钥仅允许已授权的命令
no不允许N/AN/A

改成yes就可以登录了

root@yurq:/etc/sudoers.d# grep PermitRootLogin /etc/ssh/sshd_config
PermitRootLogin yes

ssh配置文件简介,这篇文章很详细的介绍了sshd_config

2.2 禁止远程桌面登录

ubuntu系统root默认是无法远程桌面的,所以要禁止,先开启

  1. 修改文件/usr/share/lightdm/lightdm.conf.d/50-unity-greeter.conf文件,增加两行:
sudo vi /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf 

greeter-show-manual-login=true 
all-guest=false 
  1. 进入/etc/pam.d目录,修改gdm-autologin和gdm-password文件
vi gdm-autologin 
#注释掉auth required pam_succeed_if.so user != root quiet_success这一行,保存 
vi gdm-password 
#注释掉 auth required pam_succeed_if.so user != root quiet_success这一行,保存
  1. 修改/root/.profile文件
sudo vi /root/.profile 
#将文件末尾的mesg n || true这一行修改成tty -s&&mesg n || true, 保存
  1. 重启系统,输入root用户名和密码,登录系统。
  2. root自动登录
vim /etc/gdm3/custom.conf
#将[daemon]
AutomaticLoginEnable=True
AutomaticLogin=root
#设置为root用户自动登录

可以根据以上配置,对已开启允许root的远程桌面的系统进行限制。当然不同的系统,不同的桌面系统配置可能不同,此处仅以ubuntu的gnome桌面为例进行说明。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1947725.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

划重点!PMP报考条件、报考步骤、考试内容、适合人群

参加PMP认证的好处,可以从几个方面来认识: 一、参加PMP认证与考试的过程,同时是一个系统学习和巩固项目管理知识的过程 二、参加PMP认证,您可以获得由PMI颁发的PMP证书 而拥有PMP认证表示你已经成为一个项目管理方面的专业人员…

基于微信小程序的健康饮食系统/健康饮食管理系统

摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的小程序应运而生,各行各业相继进入信息管理时代&…

ST Stellar-E SR5E1 22KW OBC combo 3KW DC-DC汽车充电器解决方案

对于全球的环境保护意识抬头,全球的汽车产业慢慢步入电动化的时代,以减少碳排放。整车系统主要是由电池、电驱、电控的三电所构成,其中电池系统是整车的动力来源,而对电池充电的OBC系统更甚重要。一具高度安全性且高效的OBC系统&a…

a bean of type ‘org.redisson.api.RedissonClient Springboot 集成Redisson 配置

Springboot 集成 在导入redisson坐标之后 <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.17.5</version></dependency> 使用注解注入示例 Resource private RedissonClient re…

QML鼠标右键菜单

原理非常简单&#xff0c;先写个Menu&#xff0c;通过MouseArea来填充需要右键菜单的区域。然后在onClicked信号中&#xff0c;让Menu的x、y等于当前鼠标的x、y&#xff0c;最后用调用Menu的open()方法将菜单在该位置显示出来。 import QtQuick import QtQuick.Controls.Mater…

【JDY-10M】蓝牙MESH

目录 一、实物图 二、原理图 引脚定义 三、简介 基本原理 产品特点 产品应用范围 出厂默认配置 应用 1&#xff0c;可直接与手机进行连接&#xff0c;进行数据的传输和控制 2&#xff0c;可蓝牙与蓝牙之间进行连接&#xff0c;可进行MESH组网 四、尺寸 五、注意 源文件下载 可访…

基于Jeecgboot3.6.3的vue3版本的流程ProcessViewer的修改

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、因为之前ProcessViewer是vue2的组件版本&#xff0c;平时显示也还正常&#xff0c;但在历史记录的时候老是出现下面的问题。 就是第一次进去在panel点击流程图的时候不会出现&#xff0…

React开发者并不存在

根本就没有所谓的React开发者 — 永远不要这样称呼自己。 这是许多软件开发者犯的一个巨大错误&#xff0c;浪费了你大量时间。 专注于工具而非概念。忽视了大局。 React只是一个JavaScript工具。JavaScript只是一个计算工具。计算只是一个解决问题的工具。 当我刚开始编码时&a…

VulnHub:cengbox1

靶机下载地址&#xff0c;下载完成后&#xff0c;用VirtualBox打开靶机并修改网络为桥接即可搭建成功。 信息收集 主机发现和端口扫描 扫描攻击机&#xff08;192.168.31.218&#xff09;同网段存活主机确认目标机ip&#xff0c;并对目标机进行全面扫描。 nmap 192.168.31.…

【QT】事件分发器 事件过滤器

qt 系统 - 事件分发器 and 事件过滤器 一、事件分发器1. 事件分发器概念2. 事件分发器工作原理 二、事件过滤器 一、事件分发器 1. 事件分发器概念 在 Qt 中&#xff0c;事件分发器(Event Dispatcher) 是一个核心概念&#xff0c;用于处理 GUI 应用程序中的事件。事件分发器负…

Java黑色界面陪玩高端小程序源码陪练APP源码H5公众号源码电竞系统

&#x1f680;【电竞新纪元】解锁高端陪玩小程序源码 & 陪练APP秘籍&#xff0c;H5公众号全攻略&#xff01; &#x1f3ae; 开篇&#xff1a;电竞热潮下的新机遇 Hey游戏迷们&#xff01;随着电竞行业的蓬勃发展&#xff0c;你是否也想在这股浪潮中分得一杯羹&#xff1…

opencascade AIS_Manipulator源码学习

前言 AIS_Manipulator 是 OpenCASCADE 库中的一个类&#xff0c;用于在3D空间中对其他交互对象或一组对象进行局部变换。该类提供了直观的操控方式&#xff0c;使用户可以通过鼠标进行平移、缩放和旋转等操作。 详细功能 交互对象类&#xff0c;通过鼠标操控另一个交互对象…

新手网站利用好网站地图,提高网站的pr和权重

新手网站利用好网站地图&#xff0c;提高网站的pr和权重 它能引导蜘蛛更好的抓取收录我们网站的资源&#xff0c;从而提高网站的pr和权重。但网站地图的更新是个费神费力的工作&#xff0c;对于站长&#xff0c;尤其是精力有限的草根站长&#xff0c;怎样才能将有限的时间发挥出…

DDoS 究竟在攻击什么?

分布式拒绝服务&#xff08;DDoS&#xff09;攻击是一种常见的网络攻击形式&#xff0c;攻击者通过向目标服务端发送大量的请求&#xff0c;使目标服务端无法进行网络连接&#xff0c;无法正常提供服务。 DDoS 攻击通常是由大量的分布在全球各地的 “僵尸” 计算机&#xff08…

c++ 求解质因数(细节详解)

定义 这里先来了解几个定义&#xff08;如已了解&#xff0c;可直接看下一个板块&#xff09; 因数&#xff1a;又称为约数&#xff0c;如果整数a除以整数b&#xff08;b0&#xff09;的商正好是是整数而没有余数&#xff0c;我们就说b是a的因数 质数&#xff1a;又称为素数…

免费HTTPS代理的风险与网站推荐

在当今的网络环境中&#xff0c;免费HTTPS代理服务因其“零成本”的特点吸引了不少用户。然而&#xff0c;免费往往意味着某些隐性的代价。作为专业的测评团队&#xff0c;我们深入探索了市场上的免费HTTPS代理服务&#xff0c;并在此提醒大家注意其中的风险&#xff0c;同时推…

【企业级开发模型】Git分支设计模型 | 企业级项目挂历实战_准备工作开发场景实操

目录 3.Git分支设计模型 3.1master分支 3.2release分支 3.3develop分支 3.4feature分支 3.5hotfix分支 4.企业级项目挂历实战_准备工作&开发场景实操学习文档 3.Git分支设计模型 对于我们开发人员来说&#xff0c;对于不同的场景/环境&#xff0c;来设计分支模型。…

Redis与MySQL数据一致性问题的策略模式及解决方案

目录 一、策略模式 1、旁路缓存模式&#xff08;Cache Aside Pattern&#xff09; 2、读写穿透&#xff08;Read-Through/Write-Through&#xff09; 3、异步缓存写入&#xff08;Write Behind&#xff09; 二、一致性解决方案 1、缓存延迟双删 2、删除重试机制 3、读取…

30.【C语言】函数系列下

1.嵌套调用 *定义&#xff1a;函数之间的互相调用 *例&#xff1a; int function1(int a, int b) {function2(b);//嵌套函数的调用return a; } //注意&#xff1a;不能将function2定义在function1的里面&#xff0c;这不叫嵌套函数的调用 void function2(int c) {} #include…

聊一聊 Node.js(Express)的 req.body、req.params 和 req.query 区别和应用场景

在Node.js的Express框架中&#xff0c;处理客户端发送到服务器的数据时&#xff0c;我们主要使用req.body、req.params和req.query三个属性。这些属性虽然都是请求对象(req)的一部分&#xff0c;但它们的数据来源和用途却各不相同。本文将为大家详细解读它们的区别和使用方法。…