Linux有用户和用户组的概念,为了区分不同用户和用户组对资源的利用管理''范围'',还需要配合Linux权限管理,下面简单记录下,以下操作全部基于centos6.5。
权限及其操作
权限一般有逻辑权限、物理权限,以及用户root权限的说法。
逻辑权限
随便打开一个文件或文件夹,使用ll命令后可以查看逻辑权限的内容。
# 这个文件的权限为:root用户可读可写,root用户组可读,其他用户可读
-rw-r--r--. 1 root root 0 Oct 16 13:12 messi
那具体前面那一串-rw-r--r--是什么意思,参考如下表格。
字符 | 含义 |
---|---|
- | 占1位,-代表普通文件类型,d代表目录,l代表符号链接文件,b代表块文件等 |
用户权限 | 占2-4位,r代表读权限,w代表写权限,x代表执行权限 |
用户组权限 | 占5-7位,权限同上 |
其他权限 | 占8-10位,权限同上 |
这就是逻辑权限的概念,对应的命令就是chmod,下面演练一下,具体命令解释在注释中。
给hadoop目录设置用户可读可写可执行,给用户组设置可读可执行,给其他用户设置可读可执行权限。
# 直接用数字
[root@node02 /home]# chmod 755 hadoop
# 指定用户使用u,指定用户组使用g,指定其他使用o,如果是所有都执行则指定a
[root@node02 /home]# chmod u+rwx,g+rx,o+rx hadoop
[root@node02 /home]# ll
total 20
# 修改hadoop目录权限成功
drwxr-xr-x. 2 root root 4096 Oct 16 16:47 hadoop
给hadoop设置不可读写操作权限,再修改为用户,用户组和其他都具有可执行权限。
[root@node02 /home]# chmod 000 hadoop
[root@node02 /home]# ll
total 20
# 修改成功
d---------. 2 root root 4096 Oct 16 16:47 hadoop
[root@node02 /home]# chmod +x hadoop
[root@node02 /home]# ll
total 20
# 修改成功
d--x--x--x. 2 root root 4096 Oct 16 16:47 hadoop
物理权限
物理权限可以修改某个文件或文件夹不可以修改、增加和删除等权限,一般不给根目录/、临时文件夹/tmp、日志文件夹/var,挂载文件夹/dev设置。
添加物理权限语法为 chattr [选项] 文件名或目录名
[root@node02 /home]# chattr --help
Usage: chattr [-RVf] [-+=AacDdeijsSu] [-v version] files..
其中常用选项如下:
选项 | 解释 |
---|---|
i | 表示不能对文件或文件夹进行修改、增加和删除 |
a | 表示文件或文件夹只能追加操作,不能修改和删除 |
R | 递归处理 |
S | 即时更新文件或目录 |
s | 保密删除文件或目录 |
+ <属性> | 开始某个物理权限 |
- <属性> | 关闭某个物理权限 |
查看物理权限语法为 lsattr [选项] 文件或文件夹
-R Recursively list attributes of directories and their contents.
-a List all files in directories, including files that start with ‘.’.
-d List directories like other files, rather than listing their contents.
将hadoop文件夹设置为不可修改、增加和删除操作,然后尝试在文件夹里新建文件。
# 修改物理权限
[root@node02 /home]# chattr +i hadoop
# 查看物理权限,包括隐藏文件
[root@node02 /home]# lsattr -a hadoop
-------------e- hadoop/..
----i--------e- hadoop/.
[root@node02 /home]# cd hadoop
# 在hadoop文件夹下新建文件,提示不允许
[root@node02 /home/hadoop]# touch log.txt
touch: cannot touch `log.txt': Permission denied
修改hadoop文件夹为可追加,再次尝试在文件夹里新建文件。
# 关闭i物理权限
[root@node02 /home]# chattr -i hadoop
# 增加a物理权限,代表可追加
[root@node02 /home]# chattr +a hadoop
# 查看已添加可追加权限
[root@node02 /home]# lsattr -a
-----a-------e- ./hadoop
[root@node02 /home]# cd hadoop
[root@node02 /home/hadoop]# touch log.txt
[root@node02 /home/hadoop]# ll
total 0
# 添加文件成功
-rw-r--r--. 1 root root 0 Oct 16 17:21 log.txt
[root@node02 /home/hadoop]#
普通用户root权限
sudo命令让普通用户也可以拥有root的权限,这样在普通用户下可以执行root用户部分操作,它有如下优点。
(1)可以使用root用户配置的环境
(2)不需要切换root用户也可以执行操作
(3)限制用户执行有限的root权限
(4)可以记录sudo命令,方便后续查看操作日志,排查危险操作
下面是参考博文完成的sudo操作日志记录。
a 修改/etc/rsyslog.conf文件,添加如下内容到文件最后
[root@node02 /var/log]# vim /etc/rsyslog.conf
# 打印sudo操作记录
local2.debug /var/log/sudo.log
b 使用visudo命令编辑/etc/sudoers,添加如下内容到最后
[root@node02 /var/log]# visudo
## 记录sudo日志配置
Defaults logfile=/var/log/sudo.log
Defaults loglinelen=0
Defaults !syslog
c 在/etc/log目录下新建一个sudo.log文件,然后重启rsyslog服务
[root@node02 /var/log]# touch sudo.log
[root@node02 /var/log]# cat sudo.log
[root@node02 /var/log]# service rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
d 切换到hadoop用户,执行一个cd操作
[root@node02 /home]# su hadoop
[hadoop@node02 /home]$ sudo cd /root
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for hadoop:
# 提示没有在sudoers添加hadoop sudo权限,需要修改/etc/sudoers文件
hadoop is not in the sudoers file. This incident will be reported.
e 添加hadoop sudo权限
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
# 代表hadoop用户可以执行sudo命令,需要密码
hadoop ALL=(ALL) ALL
# 代表hadoop用户组可以执行sudo命令,需要密码
# %hadoop ALL=(ALL) ALL
# 代表hadoop用户可以执行sudo命令,不需要密码
# hadoop ALL=(ALL) NOPASSWD:ALL
# 代表hadoop用户组可以执行sudo命令,不需要密码
# %hadoop ALL=(ALL) NOPASSWD:ALL
f 重新执行发现成功执行sudo命令
[root@node02 /home]# su hadoop
[hadoop@node02 /home]$ sudo ls /home
[sudo] password for hadoop:
book hadoop messi passwd test
[hadoop@node02 /home]$ cat /var/log/sudo.log
# 第一条就是上面提示的没有添加hadoop到sudoers文件的日志
Oct 16 20:03:42 : hadoop : user NOT in sudoers ; TTY=pts/1 ; PWD=/home ; USER=root ; COMMAND=cd /root
# 正常执行 ls /home命令后的日志
Oct 16 20:19:00 : hadoop : TTY=pts/1 ; PWD=/home ; USER=root ; COMMAND=/bin/ls /home
权限应用实操
实操1:创建两个文件夹hadoop和hive,让文件夹对不同用户组的用户进行开放,用户组名bigdata01,bigdata02。
以下是实现的一种方式,利用权限,用户和组的知识来完成。
a 创建用户组bigdata01和bigdata02
[root@node02 /home]# groupdel bigdata01
[root@node02 /home]# groupdel bigdata02
[root@node02 /]# cat /etc/group
...
# 查看发现创建group成功
bigdata01:x:1000:
bigdata02:x:1001:
b 在/根目录下创建用户根目录bigclub,创建4个用户,让用户家目录在/bigclub目录下。
[root@node02 /]# mkdir bigclub
# 创建四个用户,指定家目录和用户组
[root@node02 /]# useradd -d /bigclub/stu1 -m -g bigdata01 stu1
[root@node02 /]# useradd -d /bigclub/stu2 -m -g bigdata01 stu2
[root@node02 /]# useradd -d /bigclub/stu3 -m -g bigdata02 stu3
[root@node02 /]# useradd -d /bigclub/stu4 -m -g bigdata02 stu4
[root@node02 /]# id stu1
uid=501(stu1) gid=1000(bigdata01) groups=1000(bigdata01)
[root@node02 /]# id stu2
uid=502(stu2) gid=1000(bigdata01) groups=1000(bigdata01)
[root@node02 /]# id stu3
uid=503(stu3) gid=1001(bigdata02) groups=1001(bigdata02)
[root@node02 /]# id stu4
uid=504(stu4) gid=1001(bigdata02) groups=1001(bigdata02)
[root@node02 /]# cd /bigclub
# 查看家目录
[root@node02 /bigclub]# ll
total 16
drwx------. 2 stu1 bigdata01 4096 Oct 16 21:37 stu1
drwx------. 2 stu2 bigdata01 4096 Oct 16 21:37 stu2
drwx------. 2 stu3 bigdata02 4096 Oct 16 21:37 stu3
drwx------. 2 stu4 bigdata02 4096 Oct 16 21:37 stu4
c 创建两个文件夹hadoop和hive,修改用户组,一个为bigdata01,一个为bigdata02,并将文件夹赋予770权限
# 创建文件夹
[root@node02 /tmp]# mkdir hadoop
[root@node02 /tmp]# mkdir hive
[root@node02 /tmp]# ll
total 8
drwxr-xr-x. 2 root root 4096 Oct 16 21:42 hadoop
drwxr-xr-x. 2 root root 4096 Oct 16 21:42 hive
-rw-------. 1 root root 0 Oct 11 17:39 yum.log
# 修改用户组
[root@node02 /tmp]# chown root:bigdata01 hadoop
[root@node02 /tmp]# chown root:bigdata02 hive
[root@node02 /tmp]# ll
total 8
drwxr-xr-x. 2 root bigdata01 4096 Oct 16 21:42 hadoop
drwxr-xr-x. 2 root bigdata02 4096 Oct 16 21:42 hive
-rw-------. 1 root root 0 Oct 11 17:39 yum.log
# 修改文件夹权限为770,这样其他组的成员将无法访问
[root@node02 /tmp]# chmod 770 hadoop
[root@node02 /tmp]# chmod 770 hive
[root@node02 /tmp]# ll
total 8
drwxrwx---. 2 root bigdata01 4096 Oct 16 21:42 hadoop
drwxrwx---. 2 root bigdata02 4096 Oct 16 21:42 hive
-rw-------. 1 root root 0 Oct 11 17:39 yum.log
d 测试,使用stu1进入hadoop是ok的,但是stu1进入hive会被限制,同理stu3进入hive是ok的,但是stu3进入hadoop会被限制。
# 切换stu1
[root@node02 /tmp]# su - stu1
# 可进入hadoop
[stu1@node02 ~]$ cd /tmp/hadoop
[stu1@node02 /tmp/hadoop]$ cd ..
# 无法进入hive
[stu1@node02 /tmp]$ cd hive
-bash: cd: hive: Permission denied
[stu1@node02 /tmp]$ su root
Password:
# 切换stu3
[root@node02 /tmp]# su stu3
# 可进入hive
[stu3@node02 /tmp]$ cd hive
[stu3@node02 /tmp/hive]$ cd ..
# 不可进入hadoop
[stu3@node02 /tmp]$ cd hadoop
bash: cd: hadoop: Permission denied
这样就完成了实操1的功能。
实操2:在上面案例基础上,在hadoop文件夹下使用stu1创建两个文件,一个可以被stu2读取和修改,另外一个可以被读取但是不能修改。
[root@node02 /tmp]# su stu1
[stu1@node02 /tmp]$ ll
total 8
drwxrwx---. 2 root bigdata01 4096 Oct 16 21:42 hadoop
drwxrwx---. 2 root bigdata02 4096 Oct 16 21:42 hive
-rw-------. 1 root root 0 Oct 11 17:39 yum.log
[stu1@node02 /tmp]$ cd hadoop/
[stu1@node02 /tmp/hadoop]$ ll
total 0
# stu1用户下创建两个文件
[stu1@node02 /tmp/hadoop]$ touch file1.txt
[stu1@node02 /tmp/hadoop]$ touch file2.txt
# 分别给两个文件留下stu1签名
[stu1@node02 /tmp/hadoop]$ echo "stu1 come here and sign" >> file1.txt
[stu1@node02 /tmp/hadoop]$ echo "stu1 come here and sign" >> file2.txt
[stu1@node02 /tmp/hadoop]$ cat file1.txt
stu1 come here and sign
[stu1@node02 /tmp/hadoop]$ cat file2.txt
stu1 come here and sign
[stu1@node02 /tmp/hadoop]$ ll
total 8
-rw-r--r--. 1 stu1 bigdata01 24 Oct 16 21:53 file1.txt
-rw-r--r--. 1 stu1 bigdata01 24 Oct 16 21:53 file2.txt
# 修改file1.txt权限为组内可读可写
[stu1@node02 /tmp/hadoop]$ chmod 760 file1.txt
# 修改file2.txt权限为组内只读
[stu1@node02 /tmp/hadoop]$ chmod 740 file2.txt
[stu1@node02 /tmp/hadoop]$ ll
total 8
-rwxrw----. 1 stu1 bigdata01 24 Oct 16 21:53 file1.txt
-rwxr-----. 1 stu1 bigdata01 24 Oct 16 21:53 file2.txt
[stu1@node02 /tmp/hadoop]$ su root
Password:
[root@node02 /tmp/hadoop]# su stu2
[stu2@node02 /tmp/hadoop]$ ll
total 8
-rwxrw----. 1 stu1 bigdata01 24 Oct 16 21:53 file1.txt
-rwxr-----. 1 stu1 bigdata01 24 Oct 16 21:53 file2.txt
# stu2用户尝试对file1.txt进行修改成功
[stu2@node02 /tmp/hadoop]$ echo "stu2 come here and sign" >> file1.txt
# stu2用户尝试对file2.txt进行修改失败
[stu2@node02 /tmp/hadoop]$ echo "stu2 come here and sign" >> file2.txt
# 不允许
bash: file2.txt: Permission denied
# file1留下了stu2的签名
[stu2@node02 /tmp/hadoop]$ cat file1.txt
stu1 come here and sign
stu2 come here and sign
# file2依然只有stu1的签名
[stu2@node02 /tmp/hadoop]$ cat file2.txt
stu1 come here and sign
以上为linux下权限的相关知识,供参考。
参考博文:
(1)https://www.cnblogs.com/garfieldcgf/p/8323489.html
(2) https://www.cnblogs.com/okokabcd/p/8724263.html
(3) https://www.cnblogs.com/52py/p/9598237.html 记录sudo日志配置
(4) https://blog.csdn.net/sinat_36118270/article/details/62899093 在sudoers里设置普通用户