权限
前言
类Unix操作系统与MS-DOS操作系统的不同之处在于它们不仅是多任务系统(multitasking
),还是多用户系统(multi-user
)。该计算机将同时支持许多用户登陆使用。因此必须设计一种方法来保护用户免受其他用户所影响,不允许一个用户的操作使计算机崩溃,也不允许一个干扰属于另一个用户的文件。
用户,组,其他
在Unix安全模型中,用户可以拥有文件和目录,以及控制其访问权限。用户可以属于一个组,组由一个或多个用户组成。这些用户可以通过其权限访问文件和目录。除了授予访问权限外,所有者还可以授予一组用户的访问权,称为属组。
[root@iZerb5rob3dcf6Z ~]# id
uid=0(root) gid=0(root) 组=0(root)
创建用户帐户后,将为用户分配一个号码称为用户ID
或uid
,然后将其映射到用户名。并且为用户分配了主组ID
或属组gid
。
用户标识
用户标识(UID
)以16
为二进制表示,其范围是:0-65535
。
管理员:0
普通用户:1-65535
系统用户:1-499(CentOS 6),1-999(CentOS 7)
登陆用户:500-60000, 1000-60000
管理员组:0
普通用户组:1-65535
系统用户组:1-499(CentOS 6),1-999(CentOS 7)
登陆用户组:500-60000, 1000-60000
用户帐户在/etc/passwd
文件中定义,组在定义中在/etc/group
文件中。创建用户帐户和组时,这些文件与/etc/shadow
一起被修改,其中包含有关用户密码的信息。对于每个用户帐户,/etc/passwd
文件定义用户(登录)名称,uid
,gid
,帐户的真实姓名,主目录和登录Shell
。
[root@iZerb5rob3dcf6Z ~]# cat /etc/passwd | tail -n 1
xiongze:x:1000:1000::/home/xiongze:/bin/bash
[root@iZerb5rob3dcf6Z ~]# cat /etc/group | tail -n 1
xiongze:x:1000:
[root@iZerb5rob3dcf6Z ~]# cat /etc/shadow | tail -n 1
xiongze:!!:18425:0:99999:7:::
读,写,执行
文件和目录的访问权限分为读访问
,写访问
和执行访问
。
[root@iZerb5rob3dcf6Z ~]# ll package-lock.json
-rw-r--r-- 1 root root 43129 6月 9 20:37 package-lock.json
列出的前十行是文件的属性,其中第一个是文件的类型
:
属性 | 文件类型 |
---|---|
- | 常规文件 |
d | 目录 |
l | 符号链接 |
C | 特殊字符文件。如终端或调制解调器 |
b | 特殊块文件。如硬盘驱动器,光盘驱动器等 |
注意:符号链接的属性为“lrwxrwxrwx
”,是一个伪值,其真正的文件属性是符号链接所指向的文件的属性。
[root@iZerb5rob3dcf6Z ~]# ll file-sym
lrwxrwxrwx 1 root root 4 6月 11 15:21 file-sym -> file
[root@iZerb5rob3dcf6Z ~]# ll /dev/pts/0
crw--w---- 1 root tty 136, 0 6月 12 14:02 /dev/pts/0
[root@iZerb5rob3dcf6Z ~]# ll /dev/vda
brw-rw---- 1 root disk 253, 0 6月 9 20:17 /dev/vda
文件属性的其余九个字符(称为文件模式),代表文件所有者,文件组所属组以及其他人的读取,写入和执行权限:
权限属性
chmod - 更改文件模式
要更改文件或目录的模式(权限),使用chmod
命令。只有文件的所有者或超级用户才能更改文件或目录的权限。chmod
支持两种不同的方式来指定模式更改:八进制数表示
和符号表示
。首先介绍八进制数字表示形式:
Octal | Binary | File Mode |
---|---|---|
0 | 000 | - - - |
1 | 001 | - -x |
2 | 010 | - w - |
3 | 011 | - wx |
4 | 100 | r - - |
5 | 101 | r - x |
6 | 110 | r - x |
7 | 111 | rwx |
通过使用三个八进制数字,我们可以为所有者,组属组和other更改权限:
root@iZerb5rob3dcf6Z ~]# ll permit.txt
-rw-r--r-- 1 root root 0 6月 12 15:06 permit.txt
[root@iZerb5rob3dcf6Z ~]# chmod 600 permit.txt
[root@iZerb5rob3dcf6Z ~]# ll permit.txt
-rw------- 1 root root 0 6月 12 15:06 permit.txt
chmod
还支持用于指定文件模式的符号表示法。符号表示为分为三个部分:更改谁,执行哪些操作,以及设置什么权限
。
chmod
符号表示法:
如果未指定对象
,则假定为“ all”。操作
可能是“ +”,表示要添加权限
,“-
”表示要取消权限,“ =”表示应用指定权限,而所有其他权限将被删除。权限
用“ r
”,“ w
”和“ x
”字符指定。Examples:
[root@iZerb5rob3dcf6Z ~]# ll permit.txt
-rw------- 1 root root 0 6月 12 15:06 permit.txt
[root@iZerb5rob3dcf6Z ~]# chmod +x permit.txt
[root@iZerb5rob3dcf6Z ~]# ll permit.txt
-rwx--x--x 1 root root 0 6月 12 15:06 permit.txt
[root@iZerb5rob3dcf6Z ~]# chmod o-rw permit.txt
[root@iZerb5rob3dcf6Z ~]# ll permit.txt
-rwx--x--x 1 root root 0 6月 12 15:06 permit.txt
[root@iZerb5rob3dcf6Z ~]# chmod go=rw permit.txt
[root@iZerb5rob3dcf6Z ~]# ll permit.txt
-rwxrw-rw- 1 root root 0 6月 12 15:06 permit.txt
[root@iZerb5rob3dcf6Z ~]# chmod u+x,go+rx permit.txt
[root@iZerb5rob3dcf6Z ~]# ll permit.txt
-rwxrwxrwx 1 root root 0 6月 12 15:06 permit.txt
umask - 设置默认权限
umask
命令控制文件创建时赋予其的默认权限。它使用八进制表示法来表示要从文件模式中删除的位的掩码。
[root@iZerb5rob3dcf6Z ~]# umask
0022
[root@iZerb5rob3dcf6Z ~]# > testmk.txt
[root@iZerb5rob3dcf6Z ~]# ll testmk.txt
-rw-r--r-- 1 root root 0 6月 12 15:27 testmk.txt
其工作原理如下:
如果1
出现在umask
中,则删除了其所对应的属性,否则设置相应属性。这就是umask
的作用。Examples:
[root@iZerb5rob3dcf6Z ~]# umask 777
[root@iZerb5rob3dcf6Z ~]# > mask777.txt ; ll mask777.txt
---------- 1 root root 0 6月 12 15:39 mask777.txt
[root@iZerb5rob3dcf6Z ~]# umask 000
[root@iZerb5rob3dcf6Z ~]# > umask000.txt ; ll umask000.txt
-rw-rw-rw- 1 root root 0 6月 12 15:40 umask000.txt
切换用户
在有些场景,我们有必要采用另一个用户的身份,获得用户特权来执行一些管理任务。有二种切换身份的方式:
- 使用
su
命令 - 使用
sudo
命令
在我们自己的shell
会话中,可以普通用户的身份,使用该用户的用户名发起新的Shell
会话,或以该用户身份发出单个命令。/etc/sudoers
的配置文件定义了允许特定用户以假定的身份执行。
su
su
使用替代用户和组ID运行Shell
,如果包括“-l
”选项,则所得的shell
会话是指定shell
的登录shell
用户。这意味着已加载指定用户的环境,并且工作目录更改为指定用户的主目录。这通常是我们想要的。如果未指定,则工作目录不变。“-l
”可以缩写“-
”,这是最常用的方式:
[root@iZerb5rob3dcf6Z ~]# su - xiongze
最后一次失败的登录:二 6月 9 20:58:30 CST 2020从 220.172.212.163ssh:notty 上
最有一次成功登录后有 2 次失败的登录尝试。
[xiongze@iZerb5rob3dcf6Z ~]$ pwd
/home/xiongze
[xiongze@iZerb5rob3dcf6Z ~]$
切换超级用户启动shell
:
[xiongze@iZerb5rob3dcf6Z ~]$ su - root
Password:
Last login: Fri Jun 12 09:52:14 CST 2020 from 1.49.55.242 on pts/1
[root@iZerb5rob3dcf6Z ~]# pwd
/root
[root@iZerb5rob3dcf6Z ~]# exit
logout
[xiongze@iZerb5rob3dcf6Z root]$
#不加选项-l,切换后工作目录不变
[root@iZerb5rob3dcf6Z ~]# su xiongze
[xiongze@iZerb5rob3dcf6Z root]$ pwd
/root
sudo
sudo
以其他用户身份执行命令。sudo
命令在很多方面都类似于su
。管理员可以将sudo
配置为允许普通用户执行以非受控的方式要求作为另一个用户(通常是超级用户)。特别是用户可能只能使用一个或多个特定命令,而不能使用其他命令。另一个重要的区别是使用sudo
不需要访问超级用户的密码。要使用sudo
进行身份验证,用户使用他/她自己的密码。
[xiongze@iZerb5rob3dcf6Z ~]$ cat /etc/shadow
cat: /etc/shadow: 权限不够
[xiongze@iZerb5rob3dcf6Z ~]$ sudo cat /etc/shadow
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
[sudo] xiongze 的密码:
xiongze 不在 sudoers 文件中。此事将被报告。
另一个重要的区别在于sudo
不会启动新的Shell
,也不会加载另一个用户的环境。
查看sudo
授予了哪些权限:
[root@iZerb5rob3dcf6Z ~]# sudo -l
匹配 %2$s 上 %1$s 的默认条目:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR
LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT
LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET
XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
用户 root 可以在 iZerb5rob3dcf6Z 上运行以下命令:
(ALL) ALL
chown
更改文件所有者或所属组,使用此命令需要超级用户特权。
chown [owner][:[group]] file...
Examples:
[root@iZerb5rob3dcf6Z ~]# > ownship.txt ;ll ownship.txt
-rw-r--r-- 1 root root 0 6月 12 16:33 ownship.txt
[root@iZerb5rob3dcf6Z ~]# chown xiongze ownship.txt ; ll ownship.txt
-rw-r--r-- 1 xiongze root 0 6月 12 16:33 ownship.txt
[root@iZerb5rob3dcf6Z ~]# chown xiongze:xiaohong ownship.txt ; ll ownship.txt
-rw-r--r-- 1 xiongze xiaohong 0 6月 12 16:33 ownship.txt
[root@iZerb5rob3dcf6Z ~]# chown :root ownship.txt ; ll ownship.txt
-rw-r--r-- 1 xiongze root 0 6月 12 16:33 ownship.txt
[root@iZerb5rob3dcf6Z ~]# chown xiaohong: ownship.txt ; ll ownship.txt
-rw-r--r-- 1 xiaohong xiaohong 0 6月 12 16:33 ownship.txt
更改密码
passwd user