linux添加只读用户读取log

root用户下执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#1.创建用户和登录shell


useradd -s /bin/bash readlog

#2.修改用户密码 logread123
passwd readlog

#3.创建用户shell执行命令目录(允许用户使用的命令保存在该目录下)

mkdir /home/readlog/.bin


#4.root修改用户的shell配置文件(只能root用户修改该文件)

chown root. /home/readlog/.bash_profile

chmod 755 /home/readlog/.bash_profile

#5.修改.bash_profile配置文件,主要是指定PATH的读取
vi /home/readlog/.bash_profile

PATH=$HOME/.bin

#6.将允许执行的命令链接到$HOME/.bin目录(添加用户可执行的命令)


ln -s /usr/bin/wc /home/readlog/.bin/wc
ln -s /usr/bin/tail /home/readlog/.bin/tail
ln -s /bin/more /home/readlog/.bin/more
ln -s /bin/cat /home/readlog/.bin/cat
ln -s /bin/grep /home/readlog/.bin/grep
ln -s /bin/find /home/readlog/.bin/find
ln -s /bin/pwd /home/readlog/.bin/pwd
ln -s /bin/ls /home/readlog/.bin/ls
ln -s /bin/less /home/readlog/.bin/less
ln -s /bin/tar /home/readlog/.bin/tar
ln -s /bin/clear /home/readlog/.bin/clear
ln -s /bin/cd /home/readlog/.bin/cd



切换到只读账号使环境变量生效

1
2
3
4
5
su - readlog

source /home/readlog/.bash_profile


设置readlog用户可读的目录

1
2
3
4
5
6
7
8
9
10
11
12
#  单独依次设置每个目录的权限
setfacl -m u:readlog:rx /home/iprobe
setfacl -m u:readlog:rx /home/iprobe/test
setfacl -m u:readlog:rx /home/iprobe/test/prod-project
setfacl -m u:readlog:rx /home/iprobe/test/prod-project/logs
setfacl -m u:readlog:r /home/iprobe/test/prod-project/logs/stdout.log

# 查看权限
getfacl /home/iprobe/test/prod-project/logs/stdout.log

## 不要使用 -R, 下述命令,会导致目录权限被修改,特别是 .ssh目录,会导致ssh登录失败
setfacl -R -m u:readlog:rx /home/iprobe

如果通过 setfacl 设置的 ACL 权限不生效,有几个可能的原因需要检查:

  1. 确保文件系统挂载时启用了 ACL 功能。您可以通过执行 mount 命令来查看文件系统的挂载选项,确认是否包含了 acl 选项。

  2. 检查文件所在目录的权限设置。即使文件本身具有 ACL 权限,如果其所在的目录没有相应的访问权限,也会导致访问被拒绝。

  3. 确保 readlog 用户对文件路径中的每个目录都具有执行权限。在 Linux 中,要对一个文件进行读取操作,用户需要对该文件所在的每个目录都具有执行权限。

  4. 如果您的系统使用了 SELinux(安全增强型 Linux),还需要确保 SELinux 的安全策略不会阻止 readlog 用户对该文件的访问。

请检查上述可能的原因,特别是目录权限和文件系统挂载选项,确保 ACL 权限能够生效。