Linux如何创建只读用户账户

发布时间 - 2025-09-03 00:00:00    点击率:
创建只读用户需先添加用户并设密码,2. 可创建readonlyusers组统一管理,3. 通过修改/etc/fstab添加ro选项实现文件系统只读,4. 用usermod -s /usr/sbin/nologin限制Shell登录,5. 使用setfacl设置细粒度ACL权限,6. 撤销权限时需移除组、恢复fstab、重挂载、恢复Shell及删除ACL,7. 临时只读可用mount -o remount,ro,持久化推荐fstab,8. OverlayFS适用于合并只读与可写层,9. 监控可通过.bash_history、系统日志、auditd及SELinux/AppArmor实现。

Linux创建只读用户账户的核心在于限制用户权限,使其只能查看文件和目录,而不能进行修改、删除或创建操作。这通常通过创建新用户,并设置其权限来实现。

解决方案:

  1. 创建新用户: 使用

    sudo adduser 
    命令创建新用户。系统会提示你输入密码和其他用户信息。

  2. 创建用户组(可选但推荐): 如果你想管理多个只读用户,可以创建一个专门的组。使用

    sudo groupadd readonlyusers
    命令创建名为
    readonlyusers
    的组。

  3. 将用户添加到组: 使用

    sudo usermod -aG readonlyusers 
    命令将用户添加到
    readonlyusers
    组。

  4. 设置文件系统权限: 这是最关键的一步。你需要限制用户对文件系统的写权限。一种常见的方法是修改

    /etc/fstab
    文件,为特定的分区或目录设置
    ro
    (readonly) 选项。

    • 首先,使用

      df -h
      命令找到你想限制的目录或分区。例如,你想限制用户访问
      /var/log
      目录。

    • 然后,使用

      sudo nano /etc/fstab
      命令编辑
      /etc/fstab
      文件。

    • 找到包含

      /var/log
      的行,并在选项中添加
      ro
      。例如:

      UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  /var/log  ext4  defaults,ro  0  2
    • 保存并关闭文件。然后,使用

      sudo mount -o remount /var/log
      命令重新挂载
      /var/log
      目录,使更改生效。

    • 重要提示: 直接修改

      /etc/fstab
      具有风险。如果配置错误,可能导致系统无法启动。请务必谨慎操作,并在修改前备份
      /etc/fstab
      文件。

  5. 限制Shell访问: 为了进一步限制用户行为,可以限制用户登录到 Shell。可以使用

    sudo usermod -s /usr/sbin/nologin 
    命令禁止用户登录。这样,用户虽然可以存在于系统中,但无法通过 SSH 或其他方式登录到 Shell 环境。

  6. 使用Access Control Lists (ACLs): ACLs 提供了更细粒度的权限控制。你可以使用

    setfacl
    命令来设置用户或组对特定文件或目录的权限。例如,要允许用户
    readonlyuser
    读取
    /var/log/messages
    文件,可以使用以下命令:

     sudo setfacl -m u:readonlyuser:r-- /var/log/messages

    使用

    getfacl /var/log/messages
    命令可以查看 ACL 权限。

如何撤销只读用户的权限?

要撤销只读用户的权限,需要执行与创建过程相反的操作。

  1. 移除用户组: 如果之前将用户添加到了特定的只读用户组,可以使用

    sudo gpasswd -d  
    命令将其从组中移除。例如,
    sudo gpasswd -d readonlyuser readonlyusers

  2. 恢复文件系统权限: 编辑

    /etc/fstab
    文件,移除之前添加的
    ro
    选项,然后使用
    sudo mount -o remount /var/log
    命令重新挂载文件系统。 记住,修改前备份
    /etc/fstab

  3. 恢复Shell访问: 如果之前禁用了用户的 Shell 访问,可以使用

    sudo usermod -s /bin/bash 
    sudo usermod -s /bin/sh 
    命令恢复用户的 Shell 访问。具体使用哪个 Shell 取决于你的系统配置。

  4. 移除ACL权限: 如果使用了 ACLs,可以使用

    sudo setfacl -x u: 
    命令移除用户的 ACL 权限。例如,
    sudo setfacl -x u:readonlyuser /var/log/messages

除了/etc/fstab,还有其他方法设置文件系统为只读吗?

是的,除了直接修改

/etc/fstab
,还有其他方法可以将文件系统设置为只读,但它们通常适用于特定的场景。

  • 使用

    mount
    命令: 可以使用
    mount -o remount,ro  
    命令将已挂载的文件系统重新挂载为只读。例如,
    sudo mount -o remount,ro /home
    。 这种方式的修改是临时的,系统重启后会失效。

  • 使用 OverlayFS: OverlayFS 允许你将一个只读的文件系统和一个可写的文件系统合并成一个单一的挂载点。所有写入操作都会写入到可写的文件系统中,而原始的只读文件系统保持不变。这对于创建只读的容器镜像非常有用。

  • 使用 Live CD/USB: Live CD 或 USB 通常将整个根文件系统设置为只读,以防止用户修改系统。

选择哪种方法取决于你的具体需求。 如果你需要永久性地将某个分区设置为只读,修改

/etc/fstab
可能是最直接的方式。 如果你只需要临时地将某个文件系统设置为只读,使用
mount
命令可能更方便。

如何监控只读用户的行为?

即使只读用户无法修改文件,监控他们的行为仍然很重要,以确保安全和合规性。

  • Shell历史记录: 即使用户被限制登录,他们仍然可能执行一些命令。查看用户的 Shell 历史记录可以帮助你了解他们的行为。Shell 历史记录通常保存在用户主目录下的

    .bash_history
    文件中。

  • 系统日志: 系统日志(例如

    /var/log/auth.log
    /var/log/syslog
    )记录了用户登录、注销和执行的各种操作。你可以使用
    grep
    命令或专业的日志分析工具来搜索与只读用户相关的事件。

  • Auditd: Auditd 是 Linux 的一个强大的审计工具,可以记录系统上发生的几乎所有事件,包括文件访问、进程创建和系统调用。你可以配置 Auditd 规则来监控只读用户的特定行为。例如,你可以创建一个规则来记录用户尝试写入特定文件或目录的行为。

  • SELinux/AppArmor: SELinux 和 AppArmor 是 Linux 的安全模块,可以提供强制访问控制。你可以使用 SELinux 或 AppArmor 来限制只读用户的权限,并监控他们的行为。


# linux  # access  # 工具  # bash  # var  # 事件  # ssh 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: zabbix利用python脚本发送报警邮件的方法  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  如何在Windows服务器上快速搭建网站?  Laravel如何使用Eloquent进行子查询  详解Huffman编码算法之Java实现  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  青岛网站建设如何选择本地服务器?  Laravel如何使用Livewire构建动态组件?(入门代码)  Laravel定时任务怎么设置_Laravel Crontab调度器配置  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  重庆市网站制作公司,重庆招聘网站哪个好?  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  如何快速完成中国万网建站详细流程?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  如何确保西部建站助手FTP传输的安全性?  Laravel模型事件有哪些_Laravel Model Event生命周期详解  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  Laravel如何使用withoutEvents方法临时禁用模型事件  网站制作企业,网站的banner和导航栏是指什么?  Laravel如何使用Blade组件和插槽?(Component代码示例)  如何在阿里云高效完成企业建站全流程?  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  Laravel如何实现多对多模型关联?(Eloquent教程)  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  Laravel如何实现文件上传和存储?(本地与S3配置)  如何快速建站并高效导出源代码?  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  如何用AI帮你把自己的生活经历写成一个有趣的故事?  Windows Hello人脸识别突然无法使用  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  如何在腾讯云免费申请建站?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  SQL查询语句优化的实用方法总结  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  如何在IIS7中新建站点?详细步骤解析  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  Laravel如何创建自定义中间件?(Middleware代码示例)  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  Bootstrap整体框架之CSS12栅格系统  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  bing浏览器学术搜索入口_bing学术文献检索地址  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  如何快速搭建高效简练网站?