Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1501189
  • 博文数量: 329
  • 博客积分: 2773
  • 博客等级: 少校
  • 技术积分: 4219
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 14:17
个人简介

淡定从容,宁静致远

文章分类

全部博文(329)

文章存档

2016年(4)

2015年(50)

2014年(68)

2013年(45)

2012年(162)

分类: LINUX

2012-12-12 21:23:26

理解Linux的权限机制 

ls –l /

§

UNIX文件类型分析 

d     目录类型文件

l     符号连接型文件                         /dev/cdrom

b     块设备文件                             /dev/sda

c     字符型设备文件                         /dev/tty1

p     管道文件                               /dev/initctl

有名管道是一个能在互不相关进程之间传送数据的特殊文件 

s     socket文件

经常用在计算机网络间的通信 

-     普通文件

 

基本文件及目录权限 

文件权限

r   读权限   -读取文件内容            cat               vi 强制

w  写权限   -修改文件内容            echo  >>         vi  强制改写

x   可执行权限                       二进制文件,shell脚本

目录权限

r   读权限   -读取目录内容

w  写权限   -修改目录内容      单独使用没有意义,与x权限一起使用时可以在目录内删除文件生成文件给文件改名

x   访问权限  access   -可以进到目录

文件和目录权限比较

权限

文件

目录

r

cat

ls

w

vi

no

x

no

cd

rw

cat  vi

ls

rx

. /

ls  cd

wx

vi

cd  touch  mkdir

rwx

all

all

常用权限操作命令

chmod  改变权限

chmod [ugoa][+-=][rwx]  filename   

基本文件拥有者分类 

u      所有者

g      所属组

o      其他人 

a      所有人

chmod

u
g
o
a

+(加入)
-(除去)
=(设定)

r
w
x

s

t

文件或目录

规则

含义

u+w

为文件的属主添加写入的权限

ug=rwo=r

赋予属主和属组读取/写入的权限,赋予其他人读取的权限

a-x

删除全部3种类别用户(属主/属组/其他人)的执行权限

ug=srxo=

设置文件的setuidsetgid位,并且只给属主和属组赋予读取/执行的权限

g=u

让属组的权限跟属主的权限完全一样

      

数字类型改变文件权限

chmod [-R] xyz 文件或目录

r = 4 

w = 2  

x = 1  

八进制

二进制

权限

0

000

---

1

001

--x

2

010

-w-

3

011

-wx

4

100

r--

5

101

r-x

6

110

rw-

7

111

rwx

只有文件的拥有者和root 才能使用

chown  改变文件所有者和所属组

chown [ -R ]... [属主][:[属组]] 文件名或目录

            chown [ -R ]... --reference=参考文件 文件名或目录

 

           

chgrp 

           chgrp [ -R ]... 属组 文件或目录

           chgrp [ -R ]... --reference=参考文件 文件名或目录

 

Umask    对用户默认创建文件及目录的权限影响 ,umask 用一个三位数字的八进制值形式来指定,这个值代表要剥夺的权限。

· 若使用者创建为『文件』则默认『没有可运行( x )权限』,亦即只有 rw 这两个项目,也就是最大为 666,默认权限如下:
-rw-rw-rw-

· 若使用者创建为『目录』,则由於 x 与是否可以进入此目录有关,因此默认为所有权限均开放,亦即为 777,默认权限如下:
drwxrwxrwx

创建文件时:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--

创建目录时:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x

练习:

在根目录下创建一个子目录叫shared

#mkdir /shared

该目录的权限为777

#chmod 777 /shared

* candan用户在该目录下创建一个只有自己能读取的文件,叫candanfile

#useradd candan

#su - candan

$cd /shared

$touch candanfile

$chmod 400 candanfile

$ls -l

* uplooking用户进入到该目录以后通过什么方式获取了candanfile文件的所有权

#useradd uplooking

#su - uplooking

$cd /shared

$vi candanfile    ---> wq!

---------------------------------------------------------------------------------------------------------------

特殊权限

suid; 

SUID 权限仅对二进制程序(binary program)有效; 

运行者对该程序需要具有 的可运行权限; 

本权限仅在运行该程序的过程中有效 (run-time); 

运行者将具有该程序拥有者 (owner) 的权限。

所有者  4     4777

普通用户能给自己修改密码

#ls -l /usr/bin/passwd

尝试让普通用户可以使用init命令关机

# chmod 4755 /sbin/init

注意:如果你系统上的vi 被赋予了suid 权限,可以肯定你的系统已经被入侵

sgid

 所属组  2     2777

针对目录

    用户若对目录具有 与 的权限时,该用户能够进入此目录; 

该目录内所有用户在创建文件时,文件属组与目录属组相同

# mkdir /aaa

# chmod 2777 aaa

# chown :mike aaa

# su – tom

$ cd /aaa

$ touch a

$ ls -l a

针对文件

SGID 对二进制程序有用; 

程序运行者对程序来说,需具备 的权限; 

运行者在运行的过程中将会获得该用户组的支持!

Locate 

-rwx--s--x 1 root slocate 23856 Mar 17  2009 /usr/bin/locate

/var/lib/mlocate/mlocate.db

-rw-r----- 1 root slocate 1738963 May 18 10:39 /var/lib/mlocate/mlocate.db

sticky  其他人  1     1777

针对目录

当使用者对於此目录具有 w, x 权限,亦即具有写入的权限时; 

当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件 

防止普通用户在公共目录里互相残害对方的文件。

#chmod 1777 /shared

#chmod o+t /shared

#chmod o-t /shared

练习

/tmp目录内,创建一个子目录为redhat

#mkdir /tmp/redhat

or

#cd /tmp

#mkdir redhat

redhat目录内有三个子目录,分别是 c1, s1, u1.

#cd /tmp/redhat

#mkdir c1 u1 s1

* c1目录的只允许candancandan组成员有完全控制权限,其他人无任何权限。

#cd /tmp/redhat

#chown candan.candan c1

#chmod 770 c1

* u1目录的只允许uplookinguplooking组成员有完全控制权限,其他人无任何权限。

#cd /tmp/redhat

#chown uplooking:uplooking u1

#chmod 770 u1

* s1目录的只允许singhsingh组成员有完全控制权限,其他人无任何权限。

#cd /tmp/redhat

#chown singh.singh s1

#chmod 770 s1

* manager用户可以对以上三个目录有完全控制权限。

#useradd manager

#usermod -G candan,uplooking,singh manager

所有进入到u1目录的用户,在创建文件时,文件属组与u1相同

#chmod 2770 /tmp/redhat/u1

* redhat目录不允许除root以外的用户进行修改类动作

--------------------------------------------

* /tmp/test4目录内有一个文件,叫test

* candan只能读取

*uplooking只能写

*singh不能读取、不能写,但是能删除该文件

#mkdir /tmp/test4

#touch /tmp/test4/test

#chown singh:singh /tmp/test4

#ls -ld test4

#drwxr-xr-x 2 singh singh 4096 May 18 12:38 test4

#chown uplooking:candan test

#chmod 240 test

#ls -l test

#--w-r----- 1 uplooking candan 9 May 18 12:46 test

--------------------------------------------

隐藏权限

chattr  添加隐藏权限

lsattr   查看隐藏权限

chattr [+-][ai] filename

a: 只允许文件内容被追加, 日志

i: 不可变,重要的系统文件

ACL   acess control  list    访问控制列表

需求:针对一部分普通用户开放权限

命令:

查看:getfacl 

设置:setfacl 

需求:需要文件系统支持acl

选项:

-m :添加一个 ACL 规范;

-x :删除一个 ACL 规范;

-b :全部的 ACL 规范都移除;

对象:

1、针对用户

设定值的规范为: user:[用户账号列表]:[rwx]

[root@linux ~]# setfacl -m u:username:rx filename

2、针对组来设定

设定值的规范为: group:[组名]:[rwx]

[root@linux ~]# setfacl -m g:groupname:rw filename

3、设置的方式

1)拒绝所有,允许局部

# touch abc

# chmod 770 abc

# setfacl -m u:u1:rwx abc

2)拒绝局部,允许所有

# chmod 777 abc 

# setfacl -m u:u1:--- abc

举例:

# mkdir /acl_test

# cd /acl_test

# touch c1

mkdir abc

# setfacl -m u:u1:rw c1   针对c1文件给u1用户加权限

# setfacl -m u:u1:rwx abc/ 针对abc目录给u1用户加权限

# setfacl -x u:u1 c1 删除u1用户在c1上的权限

# setfacl -b c1  删除所有用户的权限

针对目录

# touch  /c1

# setfacl -m g:mike:rwx  /c1

# usermod -G mike tom

# su – tom

$ tom vi /c1

----------------------------------------------------------------------------------------------------------------------------

查找

什么是查找?

为什么使用查找?

因为我们常常需要知道那个文件放在哪里,才能够对该文件进行一些修改或维护等动作

-----------------------------------------------------------------------------------------------------------------------

which 查找对象为 PATH 指定路径下的可执行的 shell 命令或可执行脚本。 

  # echo $PATH

# which ifconfig

# su  tom

$ echo $PATH

$ which ifconfig

whereis 查找一个命令的二进制文件位置,源代码位置,man 页的位置 

  #whereis passwd 

locate 基于数据库查找,速度快。 依赖于数据库,更新数据库命令为 updatedb 

  #touch /root/rootfile 

  #locate rootfile 

  #updatedb 

  #locate rootfile 

find    全盘扫描

find  要查找的位置   选项   参数    要查找的内容 

 

参数: 

  -name 按照文件名查找 

  -iname 名字不区分大小写 

    #cd /tmp 

    #touch redhat 

    #REDHAT 

    #find . -name redhat 

    #find . -iname redhat 

 

  -user 用户名    按照用户查找文件 

  -group  组名    按照组查找文件 

  -nouser   没有所有者  孤儿文件 

  -nogroup  没有所属组 

    #cd /tmp 

    #su - candan 

    $cd /tmp  

    $touch candanfile 

    $exit 

    #su - uplooking 

    $cd /tmp 

    $touch uplookingfile 

    $exit 

    #cd /tmp 

    #find . -user candan 

    #find -group uplooking 

    #userdel uplooking 

    #find . -nouser 

    #find . -nogroup 

  -size  文件大小

    c  byte 

    k  +.k (大于)   -.k(小于)   …k(等于) 

    M  +…M    -…M    ….M 

    #cd /tmp 

    #dd if=/dev/zero of=1Mfile bs=1M count=1 

    #dd if=/dev/zero of=3Mfile bs=1M count=3 

    # dd if=/dev/zero of=8Mfile bs=1M count=8 

    #find . -size +1M 

    #find .-size -8M 

    #find . -size +1M -and -size -8M 

    #find . -size 3M 

  -type 文件类型

    f:普通文件 

    d:目录文件 

    b:块设备文件 

    l:链接文件 

    p:管道文件 

    ssocket 文件 

    c:字符设备文件:打印机 

   

  -perm 权限    0000   7777 

    +: 只要满足条件就输出 

    -: 只有满足条件才输出 

    : 绝对匹配 

[root@x1 test1]# ll 

总计 12308 

-rw-r--r-- 1 root root 1048576 07-29 14:01 1Mfile 

-rw-r--r-- 1 root root 3145728 07-29 14:03 3Mfile 

-rw-r--r-- 1 root root 8388608 07-29 14:05 8Mfile 

-rwxr--r-- 1 root root       0 07-29 14:06 a 

-rwxrwxrwx 1 root root       0 07-29 14:06 b 

[root@x1 test1]# find   -perm  +111 

./b 

./a 

[root@x1 test1]# find  -perm  -111 

./b 

[root@x1 test1]# find  -perm  744 

./a 

[root@www ~]# ls  `find /sbin -perm +7000

[root@x1 test1]# 

 

 

  -atime n (24 小时从当前时间开始 

  -ctime n    

  -mtime n 

 

-anewer filename 

-cnewer filename 

-mnewer (-newerfilename 

 

查找以后直接处理找到的文件 

  -exec 非交互 

  -ok   交互 

  # find . -perm 744 -exec rm -f {} \; 

  # find . -perm 744 -ok rm -f {} \; 

  

查找/etc/目录下所有.conf 的文件,将这些文件拷贝到/backup 目录内 

  # find /etc -name *.conf -exec cp {} /backup \; 

 

逻辑关系运算 

  -o或者 

    #find /etc -name passwd -o -name shadow 

  -and: 与 (-a) 

    # find . -type f -and -size 3M 

  -not: 非(!) 

    # find . -type f -not -name 3Mfile 

练习:

尝试用 find 找出目前 linux 系统中,所有具有 SUID 的文件有哪些? 

# find / -perm +4000 -print 

找出 /etc 底下,文件大小介於 50K 到 60K 之间的文件,并且将权限完整的列出。

# find /etc -size +50k -a -size -60k -exec ls -l {} \;

找出 /etc 底下,文件容量大於 50K 且文件所有者不是 root 的文件,且将权限完整的列出。 

# find /etc -size +50k -a ! -user root -exec ls -ld {} \;

# find /etc -size +50k -a ! -user root -type f -exec ls -l {} \;

找出 /etc 底下,容量大於 1500K 以及容量等於 的文件: 

# find /etc -size +1500k -o -size 0

---------------------------------------------------------------------------------------------

grep 搜索某些关键字,输出结果包含该关键字的行。以行为单位。

global regular expression print 

正则表达式是一种表示方式,让你可以查找匹配特定准则的文本,例如,“以字母a开头”。此表示法让你可以写一个表达式,选定或匹配多个数据字符串。

正则表达式:

字符模式:

一般字符

元字符

基本格式:

grep [选项] ‘搜索关键字’要搜索的文件名列表

#grep root /etc/passwd 

-i 忽略大小写

#ifconfig | grep -i bcast 

-n 列出行号

#grep -n root /etc/passwd 

-v 反向显示

#cat /etc/vsftpd/vsftpd.conf | grep -v ^# | grep -v ^$

-r directory:对某个路径下面的所有文件进行搜索

#grep -r root /etc 

-l 只显示包含该关键字文件的文件名

#grep -rl root /etc 

-c 统计,显示一共有多少行包含该关键字

# grep -c root /etc/passwd 

如果一个文件中,包含$这样的字符,如何查找?

#grep ‘\$’ b 

善于使用管道符号进行多次筛选

使用命令列出/etc下所有的目录

#ls -l /etc | grep ^d 

grep支持的正则元字符:

^    行首定位符    匹配以tom开头的行      /^tom/ 

$    行尾定位符    匹配以tom结尾的行      /tom$/

.    匹配单个字符  匹配to+任意一个字符  /to./

*    匹配0个或多个前面的一个字符          /go*.gle/

[]   匹配一组字符中的一个                 /[Tt]om/

[a-z]    表示一个匹配范围  

[^]  表示不匹配里面的字符                 /[^abc]om/ 

\    表示转义                             /3\.1/

\<   词首定位符

\>   词尾定位符

x\{m\}   x字符重复m次                     /\<[A-Za-z]\{5\}\>/

x\{m,\}  x字符至少重复m次                 /\<[A-Za-z]\{5,}\>/

x\{m,n\}  x字符重复的范围                 /\<[A-Za-z]\{5,7\}\>    

.*       任意0个或多个字符

\(....\)  标签        lovely  \(love\)ly   \1ly 

------------------------------------

wc (word count)

-l: line  计算一共有多少行

-w:word  计算一共有多少单词

-c:character  计算有多少个字符

-------------------------------------

cut  文本列抽取命令

-d:指定分隔符

-f:指定你要抽取的列

-----------------------------------

sort  排序

-n  数字方式

-r  逆序

-t  分隔符

-k  以哪个区间来

--------------------------------------

uniq 

-c  进行计数 

阅读(832) | 评论(0) | 转发(0) |
0

上一篇:day 01

下一篇:day3

给主人留下些什么吧!~~