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里设置普通用户