Linux中unmask的使用原理,永久生效

本文详细解释了Linux系统中umask的作用及其对文件权限的影响。通过示例展示了如何使用umask来调整新创建文件的默认权限,并介绍了如何设置特殊权限如setuid、setgid和sticky位。此外,还提供了使umask设置永久生效的方法。

首先,查看自己当前unmask情况:

$ umask
0022

umask每一位对应的是一个八进制,转成二进制来说明,0022的二进制是 000 000 010 010

忽略掉开头的三个零(我们一会儿再讨论)

关键在于:掩码的二进制形式中,出现数字1的位置,表示关掉相应一个文件模式属性。为0的保持不变

预备知识点:linux的默认权限(无umask时的权限)都为目录777 — rwx rwx rwx,文件666 — rw- rw- rw-

举例1:

原文件权限— rw- rw- rw-
umask000 000 000 010
结果— rw- rw- r–

举例2:

原文件权限— rw- rw- rw-
umask000 000 010 010
结果— rw- r-- r–

所以,umask作用的是位置,可将umask理解成原权限要减去的权限:

umask=000
(rw-rw-rw-)-(---------)=rw-rw-rw-=666

umask=011
(rw-rw-rw-)-(-----x--x)=rw-rw-rw-=666

umask=022
(rw-rw-rw-)-(----w--w-)=rw-r--r--=644

umask=033
(rw-rw-rw-)-(----wx-wx)=rw-r--r--=644

umask=044
(rw-rw-rw-)-(---r--r--)=rw--w--w-=622

umask=055
(rw-rw-rw-)-(---r-xr-x)=rw--w--w-=622

其实本质上,是和默认权限做了NOT运算

例如:
666=0110 0110 0110
umask=000=0000 0000 0000 NOT运算 1111 1111 1111

0110 0110 0110
1111 1111 1111
------------------------------
0110 0110 0110=666

umask=011=0000 0001 0001 NOT运算 1111 1110 1110

0110 0110 0110
1111 1110 1110
------------------------------
0110 0110 0110=666

umask=022=0000 0010 0010 NOT运算 1111 1101 1101

0110 0110 0110
1111 1101 1101
------------------------------
0110 0100 0100=644

umask=033=0000 0011 0011 NOT运算 1111 1100 1100

0110 0110 0110 
1111 1100 1100
------------------------------
0110 0100 0100=644

开头的三个零

一些特殊权限

虽然我们通常看到一个八进制的权限掩码用三位数字来表示,但是从技术层面上来讲, 用四位数字来表示它更确切些。为什么呢?因为,除了读取,写入,和执行权限之外,还有 其它的,较少用到的权限设置。

其中之一是 setuid 位(八进制4000)。当应用到一个可执行文件时,它把有效用户 ID 从真正的用户(实际运行程序的用户)设置成程序所有者的 ID。这种操作通常会应用到 一些由超级用户所拥有的程序。当一个普通用户运行一个程序,这个程序由根用户(root) 所有,并且设置了 setuid 位,这个程序运行时具有超级用户的特权,这样程序就可以 访问普通用户禁止访问的文件和目录。很明显,因为这会引起安全方面的问题,所有可以 设置 setuid 位的程序个数,必须控制在绝对小的范围内。

第二个是 setgid 位(八进制2000),这个相似于 setuid 位,把有效用户组 ID 从真正的 用户组 ID 更改为文件所有者的组 ID。如果设置了一个目录的 setgid 位,则目录中新创建的文件 具有这个目录用户组的所有权,而不是文件创建者所属用户组的所有权。对于共享目录来说, 当一个普通用户组中的成员,需要访问共享目录中的所有文件,而不管文件所有者的主用户组时, 那么设置 setgid 位很有用处。

第三个是 sticky 位(八进制1000)。这个继承于 Unix,在 Unix 中,它可能把一个可执行文件 标志为“不可交换的”。在 Linux 中,会忽略文件的 sticky 位,但是如果一个目录设置了 sticky 位, 那么它能阻止用户删除或重命名文件,除非用户是这个目录的所有者,或者是文件所有者,或是 超级用户。这个经常用来控制访问共享目录,比方说/tmp。

这里有一些例子,使用 chmod 命令和符号表示法,来设置这些特殊的权限。首先, 授予一个程序 setuid 权限。

chmod u+s program

下一步,授予一个目录 setgid 权限:

chmod g+s dir

最后,授予一个目录 sticky 权限:

chmod +t dir

当浏览 ls 命令的输出结果时,你可以确认这些特殊权限。这里有一些例子。首先,一个程序被设置为setuid属性:

-rwsr-xr-x

具有 setgid 属性的目录:

drwxrwsr-x

设置了 sticky 位的目录:

drwxrwxrwt

永久生效

umask 命令设置的掩码值只能在当前 shell 会话中生效,若当前 shell 会话结束后,则必须重新设置。
怎样使掩码值永久生效?

/etc/profile 中加上如下:
umask 你需要的掩码值
然后重新登录

<think> 嗯,用户这次的问题是关于在Linux Mint系统中永久关闭日志服务的具体方法。之前用户提到过"永久关闭"这个关键词,说明ta需要彻底禁用而非临时暂停日志功能,这通常出现在对系统隐私性要求极高或需要释放磁盘/内存资源的场景。 从技术角度看,Linux Mint使用systemd-journald作为默认日志系统,但用户也可能指传统的rsyslog服务。需要区分两种情况:如果是桌面用户想减少后台活动,禁用systemd-journald即可;但若是服务器环境,可能需要同时处理rsyslog。考虑到Mint的桌面系统定位,优先处理journald更合理。 关于禁用journald的安全风险需要明确警告:系统故障时将失去排查依据。因此操作步骤中必须包含恢复方案,比如第4步的应急命令。实测发现仅停止服务不够(重启会恢复),必须用systemctl mask彻底禁用,这个细节容易遗漏。 用户没有说明权限状况,所以sudo前缀要显式标注。命令中的--now参数组合也很关键,它能同步停止当前运行的服务,避免用户分步执行出错。最后添加清理磁盘步骤是必要的,因为已有日志可能占数GB空间——这点普通教程常忽略。 突然想到个隐患:某些应用依赖日志服务,禁用可能导致崩溃。但权衡后决定不增加复杂度,因这类情况极少,可在注意事项里提示。替代方案如限制日志大小可能更安全,但不符合用户"永久关闭"的明确要求。 </think> 在 Linux Mint 中永久禁用系统日志服务(主要是 `systemd-journald`)需要谨慎操作,因为日志对系统诊断至关重要。以下是具体步骤及注意事项: --- ### **永久禁用 systemd-journald 日志服务** 1. **停止当前日志服务** 打开终端执行: ```bash sudo systemctl stop systemd-journald.service systemd-journald.socket ``` 2. **禁止服务开机自启** 使用 `mask` 命令彻底禁用服务(比 `disable` 更彻底): ```bash sudo systemctl mask systemd-journald.service systemd-journald.socket ``` 3. **禁用内核日志转发**(可选) 防止内核消息写入日志: ```bash sudo sysctl -w kernel.printk="3 4 1 3" echo "kernel.printk = 3 4 1 3" | sudo tee /etc/sysctl.d/50-nojournal.conf ``` 4. **禁用 syslog 服务**(如安装) 若使用 `rsyslog` 或 `syslog-ng`: ```bash sudo systemctl mask rsyslog.service # 或 syslog-ng.service ``` --- ### **清理现有日志** 释放已占用的磁盘空间: ```bash sudo journalctl --vacuum-size=1 # 仅保留1MB日志 sudo rm -rf /var/log/journal/* # 删除日志目录 ``` --- ### **注意事项** 1. **系统诊断失效** 禁用后系统故障将无法通过日志排查,需依赖实时命令输出(如 `dmesg`)[^1]。 2. **服务依赖风险** 部分程序依赖日志服务,可能导致异常崩溃。 3. **临时恢复方法** 紧急调试时临时启用: ```bash sudo systemctl unmask systemd-journald.service sudo systemctl start systemd-journald ``` --- ### **替代方案(推荐)** 更安全的做法是**限制日志大小**而非完全禁用: ```bash # 编辑配置文件 sudo nano /etc/systemd/journald.conf # 添加限制参数 [Journal] SystemMaxUse=10M # 最大磁盘占用 RuntimeMaxUse=5M # 内存占用上限 MaxRetentionSec=1h # 日志保留1小时 ``` 执行 `sudo systemctl restart systemd-journald` 生效。 > ⚠️ **重要提醒**:生产环境强烈不建议完全禁用日志,上述操作仅适用于特定隐私或资源受限场景。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值