1.Linux文件、目录管理

一、Linux文件目录

1.创建目录-mkdir(make directorys)
#mkdir [选项] (参数)
mkdir  /filename 			#--filename为目录名称
mkdir  -p  /dad/son  		#依次创建父目录后创建子目录
2.查看目录或文件-ls | ll(list directory)

ls 与 ll 命令功能几乎相同,ll命令显示信息更加全面,下方以ll命令做介绍。

#ls  [选项] (文件)  
ls -l   		--输出长格式/列表(等同与 ll 命令)
#ll /			--查看根目录下文件与目录
#ll -a 			--查看当前目录下内容与隐藏文件

#ll -i  		--显示文件的inode索引号 
#ll -t			--最近修改的文件放最上面
#ll -h		--自读单位,自动换算单位
#ll -ld  /data 	--只看data目录下的文件时间、类型
3.切换目录-cd ( change directory)

绝对路径: 从根开始 把学校校门当作根,从校门到教室就是绝对路径
#cat /etc/sysconfig
相对路径: 没从 校门开始,直接从教室一 到 教室二 就是相对路径
#cat syscionfig

#cd  /  		--切换到根
#cd /dad/son --切换到dad下的son目录 
特殊符号:
~    切换至用户主目录 
-    返回此前进入的目录
.    代表当前目录
. .  代表上一级目录
4.查看当前目录-pwd(print work directory)
#pwd  打印当前所在的目录
5.显示文件或文件系统状态-stat (status)

stat命令用来显示文件或文件系统的详细信息

#stat file  查看文件三种时间状态:Access,Modify,Change:
	[root@localhost ~]# stat  passwd
	  File: ‘passwd’
	  Size: 906             Blocks: 8          IO Block: 4096   regular file
	Device: fd00h/64768d    Inode: 25192981    Links: 1
	Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
	Context: unconfined_u:object_r:admin_home_t:s0
	Access: 2020-05-14 17:06:19.096067049 +0800
	Modify: 2020-05-14 17:07:41.806062954 +0800
	Change: 2020-05-14 17:07:41.806062954 +0800
	 Birth: -
# stat -f passwd		 显示文件系统的信息
	[root@localhost ~]# stat -f passwd
	  File: "passwd"
	    ID: fd0000000000 Namelen: 255     Type: xfs
	Block size: 4096       Fundamental block size: 4096
	Blocks: Total: 2618880    Free: 2282731    Available: 2282731
	Inodes: Total: 5242880    Free: 5208166
6.更新文件时间|创建文件-touch

1.一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式)
2.二是用来创建新的空文件

语法:
#touch [选项]  (参数)

#touch file				 创建file文件
#touch zjz{1..10}.txt    批量创建为zjz1、zjz2...10的文件
#touch -a file		     修改`stat`命令查看的`Access`档案的读取时间记录
7.移动文件|重命名文件-mv ( move files)
mv zjz.txt 123.txt		#重命名zjz.txt为123.txt
mv zjz /tmp				#将文件zjz移动到/tmp(类似Windows回收站)
mv 1.txt 2.txt  /test  	#将1.txt-2.txt移动到/zjztest 文件夹中
8.复制文件或目录-cp(copy)
语法:
#cp[选项]  (参数)
cp -p file1 file2   #保留时间戳、模式、所有权
cp -r dir1 dir2/	#递归复制文件和目录
9.删除文件-rm(remove)慎用

删除一个目录中的一个或多个文件或目录

rm -r /dir	#删除文件或目录
rm -rf *		#删除当前目录下的所有文件
正确删除文件方式:
使用mv命令移动到 /tmp(回收站定期删除),替代删除命令

二、Linux权限配置

1.用户与用户组

-rw- r-- r–.
属主 属组 其他
u 代表属主用户(owner/user)
g 代表属组(group)
o 代表其他用户(other)
a 代表属主、属组、和其他用户(all)

改变文件所有者-chown(change owner)

利用 chown 命令可以将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID,组可以是组名或者组ID

chown test:test file       #将文件的属主和属组改为test
chown -R  test:test dir/   #将dir文件夹下的所有文件属主和属组改为test
chown -c bin:bin test.txt  #查看该文件的拥有者是否被更改过
changed ownership of `test.txt' to bin:bin
2.文件目录的属性
[root@localhost ~]# ll -ih
total 2.2M
1		 2           3  4    5    6   7    8   9           10
25165890 -rw-------. 1 root root 1.6K Dec 28 23:12 anaconda-ks.cfg
25192968 -rw-r--r--. 1 root root  327 May  5 21:58 array_count_bash.sh
25192971 -rw-r--r--. 1 root root  235 May  6 00:08 array_status.sh
25192966 -rw-r--r--. 1 root root 2.2M May  2 06:11 redis-6.0.1.tar.gz
第1列:inode索引号(像人的身份证,唯一)
> 系统读取文件是首先通过文件名找到inode,然后才读取文件内容

图片源自鸟哥
第1列:inode索引号(像人的身份证,唯一)

系统读取文件是首先通过文件名找到inode,然后才读取文件内容

第2列:文件权限

 1 2   3   4   5
 1. rw- r-- r-- .
d r-x r-x r-x .   5 root root 4096 Dec 28 23:12 boot
 
//1:文件类型
 2. 代表:普通文件
d 代表:目录
l 代表:符合链接
b 代表:块设备,比如U盘,镜像
c 代表:字符设备文件
s 代表:Socket监听文件
p 代表:管道文件
//2:属主权限
r read      (读)    4
w write    (写)    2
x execute  (执行)  1
.       没有权限     0
//3:属组权限
//4:其他权限
//5:创建文件后有点的原因是开启了selinux,如果关闭selinux后,文件的属性就不带点

第3列:链接数,(如:建立软链接就会+1)

3.文件目录的权限

3.1. 可读 r:表示具有读取\阅读文件内容的权限;
同时如果没有x权限,不能进到目录里,即无法cd dir);
同时如果没有x权限,ls列表时可以看到所有文件名。但是会提示无权访问目录下文件,
同时如果1s-1列表,所有的属性会带有问号,也会提示会提示无权访问目录下文件。 但是可以看到所有文件名。

3.2. 可写 w:表示具有新增、修改文件内容的权限:(需要x权限的配合)
1)如果没有r配合,那么vi编辑文件会提示无法编辑(但可强制编辑),echo可以重定向或追加);
2)特别提示:删除文件(修改文件名等)的权限是受父目录的权限控制,和文件本身权限无关; (比如打狗看主人,但是够不知道主人的上一级是谁

3.3. 可执行x:表示具有进入目录、执行文件的权限
1)文件本身要能够执行。
2)普通用户同时还需要具备r的权限才能执行,不能关有x(执行)权限。
3)root 只要有x的权限就能执行。
4)没有 r 无法查看列表文件及目录
5)没有 w 无法新建和删除
win32下可执行文件:exe,,bat,.com
linux下可执行文件:sh,.py,
.per1等。

4.文件与目录的默认权限与隐藏权限

4.1. 文件默认权限-umask

你知道当你创建一个新的文件或目录时,他的默认权限会是什么吗?与 umask 有关。umask 就是指定 『目前使用者在创建文件或目录时候的权限默认值』

umask   #查看创建文件或目录时的权限默认值 (数字形式)
	0022
umask  -S	#查看创建文件或目录时的权限默认值 (字符形式)
u=rwx,g=rx,o=rx

注意:x权限对目录是很重要的,进入目录需要x权限
文件的权限算666开始
目录的权限算777开始

//文件的权限从666开始算
root下默认文件权限计算方法
(1)假设umask 值为:022 (所有为都是偶数)
6 6 6  ——>文件的起始权限值
0 2 2 ——>umask 的值
------------------
6 4 4 

(2)假设umask值为:045(所有为奇数的位加1)
6 6 6  ——>文件的起始权限值
0 4 5 ——>umask 的值
----------------
6 2 1 ——>计算出来的权限。由于umask的最后一位是5,所以,在其他用户组位在加1
0 0 1+
----------
6 2 2——>真实文件权限
=====
//目录的权限777算法如上
root下默认目录权限计算方法
(1)假设umask 值为:022 (所有为都是偶数)
7 7 7  ——>目录的起始权限值
0 2 2 ——>umask 的值
------------------
7 5 5 

4.2. 修改文件权限-chmod(change mode)

chmod是用来改变文件或目录的权限的命令,但只有文件的属主和超级用户root才有这种权限。

通过chmod改变权限的两种方法:

  • 通过权限字母和操作符表达式的方法来设置权限。
  • 使用数字方法修改权限
r read     (读)    4
w write    (写)    2
x execute  (执行)  1
-         没有权限   0
例题:rwxr-xr-x  4+2+1=7,4+1=5,4+1=5  755

权限增减字符
+    添加某个权限
 -    取消某个权限
=    取消其他所有权限
chmod 755 filename/		#修改目录权限为 drwxr-xr-x
chmod -R 755 filename/  #递归修改filename下的所有文件权限
chmod u-x test			#取消test.sh属主用户的x权限
chmod g+w test.sh 	    #增加test.sh 属组用户的w权限
chmod u+x,g+w,o+rwx test.sh  #同时分开修改u,g,o(其他)的权限
chmod a=rwx test.sh   		 #a代表ALL ,修改属主、属组、其他权限

比较安全的权限设置
目录使用755
文件使用644

4.3. 文件隐藏权限-chattr(change file attributes)

在系统安全 (Security) 上面,重要的紧呢!不过要先强调的是,底下的chattr命令只能在Ext2/Ext3的文件系统上面生效, 其他的文件系统可能就无法支持这个命令了。底下我们就来谈一谈如何配置与检查这些隐藏的属性吧!

chattr [+-=] [ASacdistu] 文件或目录名称
选项
+	#添加一个特殊参数
-	#删除一个特殊参数
参数:
i	#文件『不能被删除、改名、配置链接也无法写入或新增数据!』
a	#当配置了a属性后,文件只能添加,不能删除不能修改数据。(只有root才能配置该属性)

A  #当配置了A这个属性后,存取时间atime不会被修改(touch命令)
S	#当配置了S属性后,进行任何文件的修改会同步写入磁盘中(一般文件是非同步写入)
c	#将会自动的将此文件『压缩』,在读取的时候将会自动解压缩
s	#当使用u配置文件时,如果文件被删除了,数据内容其实还在磁盘中(还能找回)

例如:
//设置文件不能被删除 +i
[root@localhost ~]# touch attr-test
[root@localhost ~]# chattr +i attr-test
[root@localhost ~]# rm attr-test
rm: remove regular empty file ‘attr-test’? y
rm: cannot remove ‘attr-test’: Operation not permitted

//设置文件只能添加不能修改
[root@localhost ~]# chattr +a attr-test
[root@localhost ~]# echo 222 > attr-test		# > :代表直接覆盖,即为不能修改
-bash: attr-test: Operation not permitted
[root@localhost ~]# echo 333 >> attr-test
[root@localhost ~]# cat attr-test
111
333

4.4. 查看文件隐藏权限-lsattr

[root@localhost ~]# lsattr [-adR] 文件或目录
选项与参数:
-a :将隐藏档的属性也秀出来;
-d :如果接的是目录,仅列出目录本身的属性而非目录内的档名;
-R :连同子目录的数据也一并列出来! 

[root@localhost ~]# lsattr attr-test
-----a---------- attr-test

5.文件的特殊权限-SUID/SGID/SBIT

//非root用户运行passwd获取root权限

整个 SUID 的权限会生效是由于『具有该权限的程序被触发』,而我们知道一个程序被触发会变成程序,
所以,运行者可以具有程序拥有者的权限就是在该程序变成程序的那个时候啦!
或许那时候会觉得很奇怪,为啥运行了 passwd 后你就具有 root 的权限呢?
不都是一般使用者运行的吗? 这是因为你在触发 passwd 后,会取得一个新的程序与 PID,该 PID 产生时透过 SUID 来给予该 PID 特殊的权限配置啦! 我们使用 zjz登陆系统且运行 passwd 后,透过工作控制来理解一下!

[root@localhost ~]# su zjz
[zjz@localhost root]$ passwd
Changing password for user zjz.
Changing password for zjz.
(current) UNIX password:

[1]+  Stopped                 passwd
[zjz@localhost root]$ pstree -u
systemd─┬─NetworkManager─┬─dhclient
...................		#可以看到就是从调用passwd时,SUID 程序运行过程中产生的程序拥有的root权限
        ├─sshd─┬─sshd───bash───su───bash(zjz)─┬─2*[passwd(root)]
        │      │                              └─pstree
..................

查看文件权限

不是应该只有 rwx 吗?还有其他的特殊权限( s 跟 t )
SUID 的权限其实与程序的相关性非常的大!

[root@localhost ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd

5.1 SUID
当s标志出现在文件拥有者的x权限上时,例如/usr/bin/passwd 这个文件的权限状态:『-rwsr-xr-x』

  • SUID权限只对二进制程序有效
  • 运行者对该程序需要具有 x 权限
  • SUID权限仅在运行该程序的过程中有效
  • 运行者将具有该程序拥有者 (owner) 的权限

举个例子:
Linux中所有的账号信息都记录在/etc/passwd下,这个文件的权限为-rw-r--r--. 1 root root只有root能修改。
如果现在用普通用户test能否修改自己的密码呢?答案是可以的。
- test对于/usr/bin/passwd是有x执行权限,表示能运行passwd
- passwd的拥有者是root账号
- test在运行/usr/bin/passwd账号时,是暂时获得root权限
- /etc/shadow 就可以被test用户所运行的passwd修改

[test@localhost bin]$ ll /usr/bin/passwd 
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
//test用户修改密码
[test@MiWiFi-R3L-srv bin]$ passwd 
Changing password for user test.
Changing password for test.
(current) UNIX password: 
passwd: Authentication token manipulation error
[test@MiWiFi-R3L-srv bin]$ passwd 
Changing password for user test.
Changing password for test.
(current) UNIX password: 
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

源自鸟哥
另外,SUID 仅可用在二进制程序上, 不能够用在 shell script 上面!SUID 对於目录也是无效的~这点要特别留意。

5.2 SGID

s 在属组的 x 时则称为 Set GID, SGID

  • SGID 只对二进制进程有用
  • 程序运行者对该程序来说,需具备x执行权限
  • 运行者在运行过程中将会获得该程序属组的支持

与 SUID 非常的类似,若我使用 test这个帐号去运行 locate 时,那 test将会取得 slocate 群组的支持, 因此就能够去读取 mlocate.db 啦!非常有趣吧!

Centos7以弃用locate
[root@www ~]# ll /usr/bin/locate /var/lib/mlocate/mlocate.db
-rwx--s--x 1 root slocate   23856 Mar 15  2007 /usr/bin/locate
-rw-r----- 1 root slocate 3175776 Sep 28 04:02 /var/lib/mlocate/mlocate.db

5.3 SBIT

SBIT 只针对目录有效

  • 当使用者对于此目录具有 w, x 权限,亦即具有写入的权限时;
  • 当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件

举个例子:
/tmp本身的权限是drwxrwxrwt. 7 root root 4096 Jan 14 12:45 tmp,这样的权限下任何人都可以在/tmp下新增、修改文件,但仅有该文件/目录的创建者才能删除

[root@nothing  /]# touch /tmp/test
[root@nothing  /]# chmod 777 /tmp/test 
[root@nothing  /]# ll  /tmp/test 
-rwxrwxrwx. 1 root root 0 Jan 14 12:46 /tmp/test
[root@nothing  /]# su test
[test@nothing  /]$ cd /tmp/
[test@nothing  tmp]$ ll
total 4
-rwx------. 1 root root 827 Jan 14 10:15 ks-script-DuLn2x
-rwxrwxrwx. 1 root root   0 Jan 14 12:46 test
-rw-------. 1 root root   0 Jan 14 10:08 yum.log
[test@nothing  tmp]$ rm -rf test 
rm: cannot remove ‘test’: Operation not permitted

5.4 SUID/SGID/SBIT配置

  • 4 为 SUID
  • 2 为 SGID
  • 1 为 SBIT

举个例子:
假设要将一个文件权限改为『-rwsr-xr-x』时,由於 s 在使用者权限中,所以是 SUID ,因此, 在原先的 755 之前还要加上 4 ,也就是:『 chmod 4755 filename 』来配置!此外,还有大 S 与大 T 的产生喔!参考底下的范例啦!

[root@www ~]# cd /tmp
[root@www tmp]# touch test                  <==创建一个测试用空档
[root@www tmp]# chmod 4755 test; ls -l test <==加入具有 SUID 的权限
-rwsr-xr-x 1 root root 0 Sep 29 03:06 test
[root@www tmp]# chmod 6755 test; ls -l test <==加入具有 SUID/SGID 的权限
-rwsr-sr-x 1 root root 0 Sep 29 03:06 test
[root@www tmp]# chmod 1755 test; ls -l test <==加入 SBIT 的功能!
-rwxr-xr-t 1 root root 0 Sep 29 03:06 test
[root@www tmp]# chmod 7666 test; ls -l test <==具有空的 SUID/SGID 权限
-rwSrwSrwT 1 root root 0 Sep 29 03:06 test

最后一个例子就要特别小心啦!怎么会出现大写的 S 与 T 呢?不都是小写的吗?
因为 s 与 t 都是取代 x 这个权限的,但是你有没有发现阿,我们是下达 7666 喔!也就是说, user, group 以及 others 都没有 x 这个可运行的标志( 因为 666 嘛 ),所以,这个 S, T 代表的就是『空的』啦!
怎么说? SUID 是表示『该文件在运行的时候,具有文件拥有者的权限』,但是文件 拥有者都无法运行了,哪里来的权限给其他人使用?当然就是空的啦! _

# 配置权限成为 -rws--x--x 的模样:
[root@www tmp]# chmod u=rwxs,go=x test; ls -l test
-rws--x--x 1 root root 0 Aug 18 23:47 test

# 承上,加上 SGID 与 SBIT 在上述的文件权限中!
[root@www tmp]# chmod g+s,o+t test; ls -l test
-rws--s--t 1 root root 0 Aug 18 23:47 test

三、主机的细部权限规划

传统的角色只有三种身份(属主、属组、其他),搭配(r、w、x)权限。没有办法单纯的针对某个使用者或是一个群组来配置特定的权限需求。

1. 什么是ACL

ACL是Access Control List的缩写,提供细部权限配置


更多更好的原创文章,请访问官方网站: 点我就能跳转咯-》https://nothingzh.gitee.io
也可关注“哎呦运维”微信订阅号,随时接受文章推送。

猜你喜欢

转载自blog.csdn.net/qq_37126850/article/details/106119992