权限简介
文件的权限主要针对三类对象进行定义:
- owner:属主,u
- group:属组,g
- other:其它,o
相应的对每个文件针对的访问者定义了三种权限:
| 权限 | 对应的操作对象 | 权限说明 |
|---|---|---|
| r | 文件 | 可读,可以使用类似cat等命令查看文件内容 |
| w | 文件 | 可写,可以编辑或删除此文件 |
| x | 文件 | 可执行,eXacutable,可以在命令提示符下 当作命令提交给内核运行 |
| r | 目录 | 可以对此目录执行ls以列出内部的所有文件 |
| w | 目录 | 可以在此目录中创建文件,也可删除此目录中的文件 |
| x | 目录 | 可以使用cd切换进此目录,也可以 使用ls -l查看内部文件的详细信息 |
权限的二进制与十进制转换:
| 权限 | 二进制 | 十进制 |
|---|---|---|
| —- | 000 | 0 |
| —x | 001 | 1 |
| -w- | 010 | 2 |
| -wx | 011 | 3 |
| r— | 100 | 4 |
| r-x | 101 | 5 |
| rw- | 110 | 6 |
| rwx | 111 | 7 |
权限管理命令
chmod修改权限命令:
//修改三类用户的权限://语法:chmod MODE file,...-R //递归修改权限//修改某类用户或某些类用户权限://u,g,o,a(用户类别)//实例[root@Gin-Kin ~]# chmod u=rwx,g=rwx anaconda-ks.cfg[root@Gin-Kin ~]# lltotal 4-rwxrwx---. 1 root root 1306 Jul 1 15:38 anaconda-ks.cfg[root@Gin-Kin ~]#[root@Gin-Kin ~]# chmod u+rwx anaconda-ks.cfg[root@Gin-Kin ~]# lltotal 4-rwx------. 1 root root 1306 Jul 1 15:38 anaconda-ks.cfg[root@localhost ~]#[root@Gin-Kint ~]# chmod 400 anaconda-ks.cfg[root@localhost ~]# lltotal 4-r--------. 1 root root 1306 Jul 1 15:38 anaconda-ks.cfg[root@Gin-Kin ~]#//chmod 用户类别=MODE file,.....//chmod 用户类别=MODE,用户类别=MODE file,.....//修改某类的用户某位或某些位权限://u,g,o,a(用户类别)//chmod 用户类别+|-MODE file,.....//chmod 用户类别+|-MODE,用户类别+|-MODE file,.....//chmod +|-MODE file,.....
chown修改文件属主和属组命令:
//chown USERNAME file,...-R //修改目录及其内部文件的属主//chown USERNAME:GROUPNAME file,...//chown USERNAME.GROUPNAME file,.//实例[root@Gin-Kin ~]# lltotal 4-rw-------. 1 root root 1428 Jul 5 09:50 anaconda-ks.cfg[root@Gin-Kin ~]# chown .Gin anaconda-ks.cfg[root@Gin-Kin ~]# lltotal 4-rw-------. 1 root Gin 1428 Jul 5 09:50 anaconda-ks.cfg[root@Gin-Kin ~]#
遮罩码
为什么文件创建以后默认权限是644?
为什么目录创建以后默认权限是755?
这是由遮罩码umask来控制的。
从名字就能看出来,遮罩码umask是用来隐藏一些权限的。举例:如果你不想让人家认出你,你会怎么办?
文件最终的权限为:
- 666-umask
目录最终的权限为:
- 777-umask
文件默认是不能具有执行权限的,如果算得的结果有执行权限则将其权限整体加1。
#在wowo用户里面创建目录和文件[root@Gin-Kin ~]$ mkdir Gin #创建目录[root@Gin-Kin ~]$ touch Kin #创建文件[root@Gin-Kin ~]$ lltotal 0-rw-rw-r--. 1 root root 0 Jul 7 15:15 Kindrwxrwxr-x. 2 root root 6 Jul 7 15:15 Gin#设置遮罩码033 遮罩码只影响到你设置后的创建,之前的没有影响[wowo@Gin-Kin ~]$ umask 033[wowo@Gin-Kin ~]$ mkdir aaa #目录 777-033=744[wowo@Gin-Kin ~]$ touch bbb #文件 666-033=633+011=644[wowo@Gin-Kin ~]$ lltotal 0-rw-rw-r--. 1 root root 0 Jul 7 15:15 Kindrwxrwxr-x. 2 root root 6 Jul 7 15:15 Gindrwxr--r--. 2 root root 6 Jul 7 15:16 aaa-rw-r--r--. 1 root root 0 Jul 7 15:16 bbb[root@Gin-Kin ~]$
Linux安全上下文与特殊权限
Linux安全上下文
前提:进程有属主和属组;文件有属主和属组
- 任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有可执行权限;
- 启动为进程后,其进程的属主为发起者,属组为发起者所属的组
- 进程访问文件时的权限取决于进程的发起者:
SUID(4) //运行程序时,这个程序启动的进程的属主是程序文件自身的属主,而不是启动者为属主chmod u+s filechmod u-s file//如果file本身原来就有执行权限,则SUID显示为s,否则显示为S//加s[root@Gin-Kin ~]# ll /usr/bin/sleep-rwxr-xr-x. 1 root root 38424 Apr 27 2020 /usr/bin/sleep[root@Gin-Kin ~]# chmod u+s /usr/bin/sleep[root@Gin-Kin ~]# ll /usr/bin/sleep-rwsr-xr-x. 1 root root 38424 Apr 27 2020 /usr/bin/sleep[root@Gin-Kin ~]# ps -efl | grep sleep0 S root 2136 2115 0 99 19 - 1820 hrtime 15:31 pts/1 00:00:00 sleep 5000 S root 2142 1647 0 99 19 - 3027 - 15:32 pts/0 00:00:00 grep --color=auto sleep//减去s[root@Gin-Kin ~]# chmod u-s /usr/bin/sleep[root@Gin-Kin ~]# ll /usr/bin/sleep-rwxr-xr-x. 1 root root 38424 Apr 27 2020 /usr/bin/sleep[root@Gin-Kin ~]# ps -efl | grep sleep0 S Gin 2164 2115 0 99 19 - 1820 hrtime 15:43 pts/1 00:00:00 sleep 500 S root 2166 1647 0 99 19 - 3027 - 15:43 pts/0 00:00:00 grep --color=auto sleepSGID(2) //运行程序时,这个程序启动的进程的属组是程序文件自身的属组,而不是启动者所属的基本组//默认情况下,用户创建文件时,其属组为此用户所属的基本组;//一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件或目录,其所属的组 \//为此设定了SGID的目录的属组chmod g+s DIRchmod g-s DIR//如果file本身原来就有执行权限,则SGID显示为s,否则显示为S//不加g[root@Gin-Kin opt]# chown .Gin Gin/1205[root@Gin-Kin opt]# cd Gin/[root@Gin-Kin Gin]# lltotal 0-rw-r--r--. 1 root Gin 0 Jul 7 15:46 1205[root@Gin-Kin Gin]# touch 0503[root@Gin-Kin Gin]# lltotal 0-rw-r--r--. 1 root root 0 Jul 7 15:47 0503-rw-r--r--. 1 root Gin 0 Jul 7 15:46 1205//加g[root@Gin-Kin opt]# chown .Gin Gin/[root@Gin-Kin opt]# chmod g+s Gin/[root@Gin-Kin opt]# lltotal 0drwxr-sr-x. 2 root Gin 6 Jul 7 15:53 Gin[root@Gin-Kin opt]# cd Gin/[root@Gin-Kin Gin]# touch 1205[root@Gin-Kin Gin]# touch 0503[root@Gin-Kin Gin]# lltotal 0-rw-r--r--. 1 root Gin 0 Jul 7 15:54 0503-rw-r--r--. 1 root Gin 0 Jul 7 15:54 1205Sticky(1) //在一个公共目录,每个人都能创建文件,删除自己的文件,但是不能删除别人创建的文件chmod o+t DIRchmod o-t DIR//如果DIR本身原来就有执行权限,则Sticky显示为t,否则显示为T//实例[root@Gin-Kin opt]# chmod 1777 Gin/[root@Gin-Kin opt]# lltotal 0drwxrwxrwt. 2 root Gin 30 Jul 7 15:54 Gin[root@Gin-Kin opt]# cd Gin/[root@Gin-Kin Gin]# touch 1205[root@Gin-Kin Gin]# su - Gin[Gin@Gin-Kin ~]$ cd /opt/Gin/[Gin@Gin-Kin Gin]$ lltotal 0-rw-r--r--. 1 root Gin 0 Jul 7 15:54 0503-rw-r--r--. 1 root Gin 0 Jul 7 15:59 1205[Gin@Gin-Kin Gin]$ rm -rf 1205rm: cannot remove '1205': Operation not permitted[Gin@Gin-Kin Gin]$ touch 7878[Gin@Gin-Kin Gin]$ lltotal 0-rw-r--r--. 1 root Gin 0 Jul 7 15:54 0503-rw-r--r--. 1 root Gin 0 Jul 7 15:59 1205-rw-rw-r--. 1 Gin Gin 0 Jul 7 16:00 7878[Gin@Gin-Kin Gin]$ rm -rf 7878[Gin@Gin-Kin Gin]$ lltotal 0-rw-r--r--. 1 root Gin 0 Jul 7 15:54 0503-rw-r--r--. 1 root Gin 0 Jul 7 15:59 12054755 //有SUID,文件权限为7552755 //有SGID,文件权限为7551755 //有Sticky,文件权限为755//这里前面的4、2、1分别表示SUID、SGID、Sticky
文件系统访问控制列表facl
facl(Filesystem Access Control List),利用文件扩展保存额外的访问控制权限。
//语法:setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...-m //设定u:UID:permg:GID:perm//setfacl -m u:test:rw file//setfacl -m g:test:rw file//如果要为某个目录设定默认的访问控制列表,只需要设定时在u或g前面加上d即可。 如:\//实例[root@Gin-Kin opt]# touch Kin[root@Gin-Kin opt]# chmod 600 Kin[root@Gin-Kin opt]# lltotal 0-rw-------. 1 root root 0 Jul 7 16:14 Kin[root@Gin-Kin opt]# su Gin[Gin@Gin-Kin opt]$ cat Kincat: Kin: Permission denied[Gin@Gin-Kin opt]$ exitexit[root@Gin-Kin opt]# setfacl -m u:Gin:rw Kin[root@Gin-Kin opt]# lltotal 0-rw-rw----+ 1 root root 0 Jul 7 16:14 Kin[root@Gin-Kin opt]# su Gin[Gin@Gin-Kin opt]$ cat Kin[Gin@Gin-Kin opt]$//setfacl -m d:u:test:rw file,此时在此目录中创建的文件均继承此访问控制列表所设置的权限-x //取消u:UIDg:GID//实例[root@Gin-Kin opt]# setfacl -x u:Gin Kin[root@Gin-Kin opt]# getfacl Kin# file: Kin# owner: root# group: rootuser::rw-group::---mask::---other::---//setfacl -x u:test file//setfacl -x g:test file-b //Remove all //移除所有的用户权限//实例[root@Gin-Kin opt]# setfacl -b Kin[root@Gin-Kin opt]# getfacl Kin# file: Kin# owner: root# group: rootuser::rw-group::---other::---//语法:getfacl [-aceEsRLPtpndvh] file ... //查看文件的用户权限方式//getfacl file//实例[Gin@Gin-Kin opt]$ getfacl /opt/Kingetfacl: Removing leading '/' from absolute path names# file: opt/Kin# owner: root# group: rootuser::rw-user:Gin:rw-group::---mask::rw-other::---
sudo
sudo可以实现某个用户能够以另外哪一个用户的身份通过哪些主机执行什么命令
sudo的配置文件:/etc/sudoers
使用visudo命令进行sudo的配置,每一行就是一个sudo条目,条目格式如下:
- who which_hosts=(runas) command
- who:User_Alias,表示运行命令者的身份
- which_hosts:Host_Alias,通过哪些主机
- runas:Runas_Alias,以哪个用户的身份
- command:Cmnd_Alias,运行哪些命令
别名必须全部而且只能使用大写英文字母的组合,可以使用感叹号取反
别名分类:
- 用户别名:
- User_Alias NETWORKADMIN =
- 用户的用户名
- 组名,使用%引导
- 还可以其它已经定义的用户别名
- User_Alias NETWORKADMIN =
- 主机别名:
- Host_Alias =
- 主机名
- IP地址
- 网络地址
- 其它主机别名
- Host_Alias =
- Runas别名:
- Runas_Alias =
- 用户名
- %组名
- 其它的Runas别名
- Runas_Alias =
- 命令别名:
- Cmnd_Alias =
- 命令路径
- 目录(此目录内的所有命令)
- 其它已定义的命令别名
```python
//sudo命令语法:sudo [options] COMMAND
-V //显示版本编号
-h //会显示版本编号及指令的使用方式说明
-l //列出当前用户可以使用的所有sudo类命令
-v //因为sudo在第一次执行时或是在N分钟内没有执行(N默认为5)会问密码,这个参数 \
-k //让认证信息失效,如果不指定-k,默认认证信息在5分钟后失效 -b //将要执行的指令放在后台执行 -u USERNAME //以指定的用户名执行命令,默认为root//是重新做一次确认,如果超过N分钟,也会问密码
- Cmnd_Alias =
//实例 [Gin@Gin-Kin ~]$ useradd long useradd: Permission denied. useradd: cannot lock /etc/passwd; try again later. [Gin@Gin-Kin ~]$
[root@Gin-Kin ~]# visudo root ALL=(ALL) ALL Gin ALL=(ALL) /usr/sbin/useradd,/usr/sbin/userdel
[Gin@Gin-Kin ~]$ sudo useradd long [sudo] password for Gin: [Gin@localhost ~]$ id long uid=2003(long) gid=2003(long) groups=2003(long) [Gin@localhost ~]$
[root@Gin-Kin ~]# visudo root ALL=(ALL) ALL Gin ALL=(ALL) NOPASSWD:/usr/sbin/useradd, /usr/sbin/userdel
[Gin@Gin-Kin ~]$ sudo useradd ling [Gin@Gin-Kin ~]$ id ling uid=2004(ling) gid=2004(ling) groups=2004(ling) [Gin@Gin-Kin ~]$
[Gin@Gin-Kin ~]$ sudo -l Matching Defaults entries for wowo on localhost: !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 User wowo may run the following commands on localhost: (ALL) /usr/sbin/useradd, /usr/sbin/userdel
[Gin@Gin-Kin ~]$ sudo -v
<a name="fSXqm"></a>## 管理命令```pythonw //显示当前登录到系统的用户有哪些,以及其正在做什么//实例[root@Gin-Kin ~]# whoroot tty1 2022-07-07 09:50root pts/0 2022-07-07 09:51 (192.168.22.1)root pts/1 2022-07-07 15:30 (192.168.22.1)[root@Gin-Kin ~]# w21:01:57 up 10:03, 3 users, load average: 0.02, 0.02, 0.00USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATroot tty1 - 09:50 11:11m 0.03s 0.03s -bashroot pts/0 192.168.22.1 09:51 2.00s 0.73s 0.00s wroot pts/1 192.168.22.1 15:30 5:18m 0.07s 0.04s bashsleep //睡眠,写脚本为防止上一个命令没执行完下一命令就开始执行时可以加上sleep # \//表示停顿#秒后再执行后面的命令sleep NUMBER[SUFFIX]...SUFFIX:s:秒,默认m:分h:小时d:天last //显示/var/log/wtmp文件,显示用户登录历史及系统重启历史-n # //显示最近#次的相关信息//实例[root@Gin-Kin ~]# last -n 5 -Rroot pts/1 Thu Jul 7 15:30 still logged inroot pts/0 Thu Jul 7 09:51 gone - no logoutroot tty1 Thu Jul 7 09:50 gone - no logoutreboot system boot Thu Jul 7 09:50 still runningroot pts/1 Wed Jul 6 15:05 - 18:13 (03:08)wtmp begins Tue Jul 5 09:54:36 2022[root@Gin-Kin ~]#lastb //显示/var/log/btmp文件,显示用户错误的登录尝试-n # //显示最近#次的相关信息//实例[root@Gin-Kin ~]# lastb -n 5btmp begins Thu Jul 7 09:50:37 2022lastlog //显示每个用户最近一次成功登录信息-u username //显示特定用户最近的登录信息//实例[root@Gin-Kin ~]# lastlog -u GinUsername Port From LatestGin pts/0 Thu Jul 7 16:16:59 +0800 2022[root@Gin-Kin ~]#basename //显示路径基名//实例取后⾯ 取前⾯[root@Gin-Kin ~]# basename /usr/local/src/src[root@Gin-Kin ~]# dirname /usr/local/src//usr/local[root@Gin-Kin ~]#[root@Gin-Kin ~]# a=/opt/software/xx.tar.gz[root@Gin-Kin ~]# basename $a //可以知道包的名字Gin.tar.gz[root@Gin-Kin ~]# dirname $a //可以知道包的路径/opt/software
