61阅读

linux目录权限-linux如何判断指定用户对指定目录具有的权限具体介绍

发布时间:2017-11-16 所属栏目:Linux

一 : linux如何判断指定用户对指定目录具有的权限具体介绍

脚本名:power.sh
脚本内容:


#!/bin/sh
username3=$1
dir_name2=$2
# get existing directory
file_path=$dir_name2
while true
do
if [ -d $file_path ];then
break;
fi
file_path=${file_path%/*}
done
dir_name2=$file_path
# Judge whether the user exists
grep "^$username3:" /etc/passwd >/dev/null
if [ $? -ne 0 ];then
echo "This user "$username3" does not exist."
exit 4
fi
#echo "username : $username3"
group4=` grep "^$username3:" /etc/passwd |awk -F : {'print $4'}|xargs -i grep {} /etc/group|cut -d":" -f1`
#echo "group : $group4"
su -l $username3 -c "test -r $dir_name2"
is_read=$?
su -l $username3 -c "test -x $dir_name2"
is_exe=$?
su -l $username3 -c "test -w $dir_name2"
is_write=$?
$is_read_str
$is_exe_str
$is_write_str
if [ $is_read -eq 0 ];then
is_read_str="r"
else
is_read_str="-"
fi
if [ $is_exe -eq 0 ];then
is_exe_str="x"
else
is_exe_str="-"
fi
if [ $is_write -eq 0 ];then
is_write_str="w"
else
is_write_str="-"
fi
echo "${is_read_str}${is_write_str}${is_exe_str}"


-------------------------------------------
注意:必须以root 身份执行该脚本。
脚本power.sh 需要两个参数,第一个表示指定的用户,第二个表示指定的目录
测试:
[root@ppc40 study]# sh power.sh whuanga4 /tmp/abc/dd
This user "whuanga4" does not exist.
[root@ppc40 study]# sh power.sh whuang4 /tmp/abc/dd
rw-
说明:表示用户whuang4 对目录/tmp/abc/dd 具有读和写权限,没有执行权限)。

二 : Linux下显示子目录大小

Linux下显示子目录大小

有时候会遇到把磁盘空间用完的情况,通常都是一些日志文件、备份文件造成的,此时需要查找一下哪些子目录的大小(占用的磁盘空间)比较多,然后看看能否删除掉一些文件。

一般先用df -h命令看看是哪个卷满了:

Linux代码

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/vg_rhel6-LogVol00

17G 7.3G 8.3G 48% /

tmpfs 7.8G 548K 7.8G 1% /dev/shm

/dev/sda1 194M 85M 99M 47% /boot

/dev/mapper/vg_rhel6-LVvar

20G 877M 18G 5% /var

/dev/mapper/vg_rhel6-LVtmp

2.0G 69M 1.9G 4% /tmp

/dev/mapper/vg_rhel6-LVhome

485M 69M 391M 15% /home

/dev/mapper/vg_vmp-LVvmplayer

875G 127G 704G 16% /vmp

然后用du -h --max-depth=1 /vmp命令来看看/vmp目录下哪些子目录大小比较异常。

-h表示人性化,用K、M、G等表示子目录大致的大小;

--max-depth=1表示只显示第一级子目录;

/vmp表示要查看的是/vmp目录。

Linux代码

16K /vmp/lost+found

106M /vmp/sonar-3.3.2

95M /vmp/sonar-3.4.1

102M /vmp/sonar-3.5.1-dev

106M /vmp/setup

15G /vmp/backup

du: cannot read directory `/vmp/mysqldata/sonar_dev': Permission denied

112G /vmp/mysqldata

127G /vmp

扩展:linux 查看子目录大小 / linux 子目录大小 / linux 查看目录大小

三 : 天一点学习Linux之ACL权限

引言

前面的内容中,我们讲到传统的权限仅有三种身份(owner,group,others)搭配三种权限(r,w,x)以及三种特殊的权限(SUID,SGID,SBIT),随着应用的发展,这些权限组合已不能适应现在复杂的文件系统权限控制要求。

例如,目录data的权限为:drwxr-x—,所有者与所属组均为root,在不改变所有者和所属组的前提下,要求用户yufei对该目录有完全访问权限(rwx),但又不能让其他有用完全权限(rwx)。这个要求看似不能实现,这就看出来传统的权限管理设置有时候也会力不从心。为了解决这样的问题,Linux开发出了一套新的文件系统权限管理方法,叫文件访问控制列表ACL(Access Control Lists)。这时候,我们就可能通过ACL来实现。

什么是ACL

ACL是Access Control List的缩写,主要的目的是在提供传统的owner,group,others的read,write,execute权限之外的局部权限设定。ACL可以针对单个用户,单个文件或目录来进行r,w,x的权限设定,特别适用于需要特殊权限的使用情况。

ACL主要针对用户(user)、用户组(group)、以及掩码(mask)方面来控制权限。

简单地来说,ACL就是可以设置特定用户或用户组对于一个文件/目录的操作权限。

而在windows系统上,没有这个ACL,ACL是类Unix(Unix-like)操作系统权限的额外支持项目,因此要使用ACL必须要有文件系统的支持才行。主要包括ReiserFS, EXT2/EXT3/ext4, JFS, XFS等文件系统。

查看系统是否支持ACL

要查看你的系统是不是支持ACL,我们可以通过下面的方法来查看。

[root@yufei ~]# df

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/sda1 15118728 2442140 11908588 18% /

[root@yufei ~]# dumpe2fs /dev/sda1 |grep acl

dumpe2fs 1.41.12 (17-May-2010)+`-

Default mount options: user_xattr acl

我们看到,默认的挂载选项就已经有了ACL了,如果你的系统挂载时候没有这个选项,你可以通过

mount -o remount,acl /dev/sda1

来重新挂载。你也可以把这个挂载选项加入到开机启动,也就是写入到/etc/fatab文件里面。

ACL权限的查看与设置(getfacl, setfacl)

知道了ACL的意义了,也知道了系统是否支持ACL,那么下面就是如何来设定/使用这个ACL呢?

getfacl:查看文件/目录的ACL设定内容

setfacl:设置文件/目录的ACL内容

相关参数说明

先来看看setfacl这个命令的相关参数说明

语法:setfacl [-bkRd] [{-m|-x} acl参数] 文件名

-m :设置后续的acl参数

-x :删除后续的acl参数

-b :删除所有的ACL设定参数

-R :递归设置acl参数

-d :设置预设的acl参数(只对目录有效,在该目录新建的文件也会使用此ACL默认值)

-k :删除预设的ACL参数

设置格式如下

[d[efault]:] u[ser]:uid [:perms]

[d[efault]:] g[roup]:gid [:perms]

[d[efault]:] m[ask][:] [:perms]

[d[efault]:] o[ther][:] [:perms]

以上的参数和设置格式说明,可以在MAN中查看到

针对其他人的ACL设置

下面我们就用例子来演示一下ACL的设置与查看

我们在/root目录下进行操作

先查看install.log文件的ACL设置值是什么

[root@yufei ~]# getfacl install.log

# file: install.log

# owner: root

# group: yufei

user::rwx

group::r–

other::r–

[root@yufei ~]# ls -l install.log

-rwxr–r–. 1 root yufei 31537 Jan 20 05:09 install.log

我想通过上面的对比,大家应该能看明白getfacl所显示出来的内容吧!OK,这里我就不多说了,下面我们来看看给这个文件设置ACL值后的效果。

[root@yufei ~]# setfacl -m o:rwx install.log

[root@yufei ~]# getfacl install.log

# file: install.log

# owner: root

# group: yufei

user::rwx

group::r–

other::rwx

[root@yufei ~]# ls -l install.log

-rwxr–rwx. 1 root yufei 31537 Jan 20 05:09 install.log

这时候,我对other赋予了rwx权限了,我们切换到其他用户,就可以对此文件进行写操作了。大家可能也发现了,通过setfacl设置的other权限,和通过chmod设置的效果是一样的。没错,是这样的。

针对用户的ACL设置

把install.log拷贝到根目录,

[root@yufei ~]# cp install.log /

[root@yufei ~]# ls -l /install.log

-rwxr-xr– 1 root root 31537 Feb 9 16:27 /install.log

我们通过ACL给yufei用户赋予rwx权限

[root@yufei ~]# setfacl -m u:yufei:rwx /install.log

[root@yufei ~]# getfacl /install.log

getfacl: Removing leading ‘/’ from absolute path names

# file: install.log

# owner: root

# group: root

user::rwx

user:yufei:rwx

group::r-x

mask::rwx

other::r–

[root@yufei ~]# ls -l /install.log

-rwxrwxr–+ 1 root root 31537 Feb 9 16:27 /install.log

这时候,通过ls -l查看的文件权限后面多了一个“+”号,这就表示了文件存在ACL权限。我们切换到yufei用户,来对此文件进行一下编辑操作是完全没有问题,这里面就不演示了,自己动手吧。

注:

1、上面的用户可以换成用户列表,中间用英文的“,”分隔就OK了。

2、针对用户组的ACL设置与用户的设置差不多,这里就不演示了。

删除ACL的设置

要是删除我们设置的ACL权限的话,要怎么做呢?有两种方法

1、用-x删除后面接着的ACL权限

[root@yufei ~]# setfacl -x u:yufei /install.log

[root@yufei ~]# getfacl /install.log

getfacl: Removing leading ‘/’ from absolute path names

# file: install.log

# owner: root

# group: root

user::rwx

group::r-x

mask::r-x

other::r–

这时候发现还有个mask的权限没有去掉,

[root@yufei ~]# setfacl -x m:: /install.log

[root@yufei ~]# getfacl /install.log

getfacl: Removing leading ‘/’ from absolute path names

# file: install.log

# owner: root

# group: root

user::rwx

group::r-x

other::r–

经过了上面的操作才算把权限还原了,实在有点不方便,而且在使用-x的时候,不能单独删除某个权限。否则会出现错误提示。如setfacl -x u:yufei:rwx /install.log,这们的命令是不可以的,不知道是我哪里用错了,还是这个命令就是这样。还是用下面这种方法来提直接。

2、用-b删除所有的ACL权限

[root@yufei ~]# setfacl -m u:yufei:rwx /install.log

[root@yufei ~]# getfacl /install.log

getfacl: Removing leading ‘/’ from absolute path names

# file: install.log

# owner: root

# group: root

user::rwx

user:yufei:rwx

group::r-x

mask::rwx

other::r–

[root@yufei ~]# setfacl -b /install.log

[root@yufei ~]# getfacl /install.log

getfacl: Removing leading ‘/’ from absolute path names

# file: install.log

# owner: root

# group: root

user::rwx

group::r-x

other::r–

这个-b参数,一次性把所有的ACL权限全部清空,还原成文件的原来权限。我推荐大家用这个参数。

ACL的mask设置

关于group的设置与user的设置类似,这里也就不做演示了,下面我们来看看mask,他的作用就是让用户/组对某个文件只有某些权限。mask只对其他用户和组的权限有影响,而对owner和other的权限是没有任何影响的。我们还是以/install.log为例来实验。

[root@yufei ~]# ls -l /install.log

-rwxr-xr– 1 root root 31537 Feb 9 17:03 /install.log

[root@yufei ~]# setfacl -m u:yufei:rwx /install.log

[root@yufei ~]# getfacl /install.log

getfacl: Removing leading ‘/’ from absolute path names

# file: install.log

# owner: root

# group: root

user::rwx

user:yufei:rwx

group::r-x

mask::rwx

other::r–

这时候我们看到mask::rwx是全部的权限,所以,切换到yufei这个帐户的时候,可能对/install.log文件进行写操作的。下面我们让yufei用户对其只有读取的权限。

[root@yufei ~]# setfacl -m m::r /install.log

[root@yufei ~]# getfacl /install.log

getfacl: Removing leading ‘/’ from absolute path names

# file: install.log

# owner: root

# group: root

user::rwx

user:yufei:rwx #effective:r–

group::r-x #effective:r–

mask::r–

other::r–

我们可以看到,user:yufei:rwx的后面多了一个提示#effective:r–,也就是说,现在yufei用户只拥有r权限了。切换到yufei用户对/install.log文件进行一下写操作,会有“–INSERT —W10: Warning: Changing a readonly file ”这样的提示。

关于-d参数的作用我这里就不赘述了,用法是一样的,只是他是针对目录而已,同时也会对里面后加的文件起作用而已,而-R是我们一直在用的参数,一个递归处理的效果,很多地方都会用到些参数

摘自 羽飞博客

四 : Linux学习笔记(三):权限管理(文件目录权限、用户权限)

文件及目录的权限管理

上篇简单介绍了下文件和目录的一些简单的操作,接下来介绍用户和文件权限的管理。首先了解用户和组账号的配置文件,然后是管理用户和组账号,最后要会设置文件和目录权限和归属。

Linux基于用户身份对资源访问进行控制。用户账号分为超级用户root(相当于windows下的Administrator),然后是普通用户。Linux中是不建议使用root登录系统执行管理任务的,因为这很不安全。要是误删了系统中某个重要的文件,那就玩完了。

用户账号文件——passwd

用于保存用户的账号的基本信息,文件位置:/etc/passwd,每一行对应一个用户的账号记录,下面是取出最后两行记录的账号信息,然后来分析它每个字段的含义(字段之间用冒号分隔)。

字段1  jzhou:用户账号的名字;

字段2  x :密码占位符

字段3  500:用户账号的UID号(RedHat和CentOS中默认从500开始)

字段4  500:用户所属主账号的GID号(也是默认从500开始)

字段5 zhoujie:用户全名

字段6  /home/jzhou :用户的宿主目录,即家目录

字段7  /bin/bash :登录shell信息

基于系统运行和管理需要,所有用户都可以访问passwd文件中的内容,但只有root用户才能更改

用户密码文件——shadow

用于保存密码串、密码有效期等信息,文件位置:/etc/shadow,每一行对应一个用户的密码记录。下面列出最后两行记录并解释每个字段的含义:

字段1 :用户账号的名称

字段2 :加密的密码字串信息(采用MD5加密)

字段3 :上次修改密码的时间

字段4:密码的最短有效天数,默认值为 0

字段5:密码的最长有效天数,默认值为 99999

字段6:提前多少天警告用户口令将要过期,默认值为 7

字段7:在密码过期后多少天禁用此用户(默认为空)

字段8:账号失效时间(默认为空)   

字段9 :保留字段(未使用)

默认只要root用户能够读取该文件中的内容,并且不允许root直接编辑该文件中的内容。那么添加用户时如何来指定选项以实现这些功能呢?下面将简单介绍如何添加用户、组。

添加用户账号——useradd

用户账号的初始配置文件

文件来源——新建用户账号时,从/etc/skel目录中复制而来

主要的用户初始配置文件有 :



~/.bash_profile:用户每次登录时执行
~/.bashrc:每次进入新的Bash环境时执行,默认设置了一些命令的别名
~/.bash_logout:用户每次退出登录时执行

可通过cat命令查看上述文件的内容。

设置/更改用户口令——passwd

一般我不会也没有必要解释每个命令的带的参数,但是passwd我会介绍它的参数含义及用法,因为我觉得在系统维护中会常用到。



[jzhou@localhost ~]$ su - root
口令:
[root@localhost ~]# passwd -l jzhou ==>锁定用户jzhou的账号
Locking password for user jzhou.
passwd: Success
[root@localhost ~]# passwd -S jzhou ==>查看用户状态
jzhou LK 2013-02-03 0 99999 7 -1 (Password locked.) ==>为锁定状态
[root@localhost ~]# tail -2 /etc/shadow ==>账号锁定后,有木有发现密码位前面多了两个!!,表示密码不可用
jzhou:!!$1$XRmjIBM9$SgXA00pPfvhjvxt/9..Lh.:15739:0:99999:7:::
user1:!!:15771:0:99999:7:::
[root@localhost ~]# passwd -u jzhou ==>为账号jzhou解锁
Unlocking password for user jzhou. ==>已被成功解锁
passwd: Success.
[root@localhost ~]# passwd -S jzhou ==>再次查看用户状态
jzhou PS 2013-02-03 0 99999 7 -1 (Password set, MD5 crypt.)
[root@localhost ~]# tail -2 /etc/shadow ==>观察密码位变化,没有了两个!!,表示密码可用
jzhou:$1$XRmjIBM9$SgXA00pPfvhjvxt/9..Lh.:15739:0:99999:7:::
user1:!!:15771:0:99999:7:::
[root@localhost ~]# passwd -d jzhou ==>清楚用户jzhou的密码
Removing password for user jzhou. ==>密码已被成功清除
passwd: Success
[root@localhost ~]# tail -2 /etc/shadow ==>查看密码位有什么变化
jzhou::15771:0:99999:7::: ==>密码位变空了。。。
user1:!!:15771:0:99999:7:::
[root@localhost ~]# passwd jzhou ==>为用户重新设定密码
Changing password for user jzhou.
New UNIX password:
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password:
passwd: all authentication tokens updated successfully. ==>OK,密码已经设置成功了
[root@localhost ~]#

注意,“未设置密码”的用户账号尚未完成初始化,处于不可登录状态,与“空密码”的情况不同,普通用户可以使用passwd命令,但只能更改自己的密码。另外,被锁定的账号也不能登录系统。

修改用户账号的属性——usermod

它的命令有几个功能和passwd是一样的,比如L和U参数就是锁定和解锁账户的,不过要大写。其他选项和useradd的中的一样,就是更改uid,gid等。

删除用户账号——userdel
     
删除账号时直接用”userdel  用户名“就行了,但是这样删除的话,用户的家目录依然存在,这时你若要再建立一个与刚才同名的账号那是不行的,所以我习惯带上-r选项,删的彻底点,即连同家目录一起删除,反正删除账号后家目录也没什么用了。
 
还有两个域组账号相关的文件,即/etc/group 和/etc/gshadow,不太常用,尤其是后者,知道下应该就行了。

添加组账号——groupadd

添加一个组账号,在新建用户时,若要指定用户的gid和组名称,则必须先保证这个组要存在,所以要先建立组,简单的操作如下:



[root@localhost ~]#groupadd -g 1000 test ==>创建一个组gid为1000
[root@localhost ~]#tail -3 /etc/group
jzhou:x:500:
user1:x:504:
test:x:1000:
[root@localhost ~]#

删除组账号——groupdel

很简单,直接接用户名作为参数,删除组账号后,从/etc/group文件中将查不到相应的记录。

用户和组账号查询:

id命令——查询用户身份标识

groups命令——查询用户所属的组

finger命令——查询用户的详细信息

users、w、who命令查询已登录到主机的用户信息

文件/目录的权限和归属

将ls带上参数l或直接打ll命令,则可以查看用户对文件的使用权。


 第一列权限位由10位(比如d rwx rwx r-x)组成,其中第一位表示文件类型,d表示目录,l表示链接文件,b表示块文件,c表示字符文件,-表示普通文件。关于rwx-分别表示读、写、执行、无权限,r w x - 四个权限字符分别可表示为8进制数字4,2,1,0,即 rwx rwx r-x权限也可表示为775,其中前三位rwx(7)表示文件所有者(owner)对该文件的权限,中间3位rwx(7)表示文件所在的组(group)对该文件的权限,最后三位r-x(5)表示其他用户(other)对该文件的权限,也即ugo权限。

设置文件/目录的权限——chmod



[jzhou@localhost dirtest]$ ll
总计 36
drwxrwxr-x 2 jzhou jzhou 4096 03-05 22:43 dirtest1
lrwxrwxrwx 1 jzhou jzhou 8 03-05 22:45 linkfile -> testfile
-rw-rw-r-- 1 jzhou jzhou 67 03-05 22:40 testfile
[jzhou@localhost dirtest]$ chmod g-w,o+x testfile ==>设置文件testfile的组权限和其他人权限,注意权限变化
[jzhou@localhost dirtest]$ ls -l
总计 36
drwxrwxr-x 2 jzhou jzhou 4096 03-05 22:43 dirtest1
lrwxrwxrwx 1 jzhou jzhou 8 03-05 22:45 linkfile -> testfile
-rw-r--r-x 1 jzhou jzhou 67 03-05 22:40 testfile ==>看,权限变化了
[jzhou@localhost dirtest]$ chmod 644 dirtest1/ ==>改变目录dirtest1的权限,即读写|读|读
[jzhou@localhost dirtest]$ ll
总计 36
drw-r--r-- 2 jzhou jzhou 4096 03-05 22:43 dirtest1 ==>发现它的变化了没
lrwxrwxrwx 1 jzhou jzhou 8 03-05 22:45 linkfile -> testfile
-rw-r--r-x 1 jzhou jzhou 67 03-05 22:40 testfile
[jzhou@localhost dirtest]$ chown jzhou:root testfile ==>普通用户没有权限更改
chown: 正在更改 “testfile” 的所有者: 不允许的操作
[jzhou@localhost dirtest]$ su root ==>切换到root用户
口令:
[root@localhost dirtest]# ll
总计 36
drw-r--r-- 2 jzhou jzhou 4096 03-05 22:43 dirtest1
lrwxrwxrwx 1 jzhou jzhou 8 03-05 22:45 linkfile -> testfile
-rw-r--r-x 1 jzhou jzhou 67 03-05 22:40 testfile
[root@localhost dirtest]# chown root:root testfile ==>将文件testfile的拥有者和属组都改为root
[root@localhost dirtest]# ll
总计 36
drw-r--r-- 2 jzhou jzhou 4096 03-05 22:43 dirtest1
lrwxrwxrwx 1 jzhou jzhou 8 03-05 22:45 linkfile -> testfile
-rw-r--r-x 1 root root 67 03-05 22:40 testfile ==>看,它的文件拥有者和所属组都变为root了
[root@localhost dirtest]#

修改目录的权限和所属组时可以指定-R选项以实现目录里的文件或者目录也可以递归变化。若只修改文件/目录所有者只需指定前者,即chown root testfile,若只修改文件/目录所属组的权限,前面的用户可不写,即chown :root testfile。

附加权限位

普通用户并没有权限修改“/etc/shadow”文件,那为什么可以修改自己的登录密码呢?因为passwd命令程序被设置了SUID权限,普通用户在执行该命令时临时获得相当于属主用户(root)的权限。

set位权限的主要用途:

为可执行(有 x 权限的)文件设置,权限字符为“s”;

 其他用户执行该文件时,将拥有属主或属组用户的权限。

set位权限类型:
SUID:表示对属主用户增加SET位权限;
SGID:表示对属组内的用户增加SET位权限。



[root@localhost ~]# ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 19876 2006-07-17 /usr/bin/passwd
==>普通用户以root用户的身份,间接更新了shadow文件中自己的密码

注意:不要轻易为可执行文件设置SET位权限,特别是对于那些属主、属组是root的执行程序,使用SET位权限时更应该慎重。例如,若为vim编辑器程序设置SUID权限,将导致普通用户也可以使用vim编辑器修改系统中的任何配置文件     

 粘滞位(Sticky)

主要用途:
为公共目录(例如,权限为777的)设置,权限字符为“t”
用户不能删除该目录中其他用户的文件
 
由于系统及服务程序运行的需要, Linux提供了/tmp、/var/tmp等临时目录,允许任意用户、程序写入数据,然而试想一下,若任意一个普通用户都能够删除系统服务运行中使用的临时文件,将造成什么后果?设置粘滞位以后,正好可以保持一种动态的平衡:允许各用户在目录中任意写入、删除数据,但是禁止随意删除其他用户的数据 。



[root@localhost ~]# ls -ld /tmp /var/tmp
drwxrwxrwt 8 root root 4096 09-09 15:07 /tmp ==>就是将t位代替执行位x
drwxrwxrwt 2 root root 4096 09-09 07:00 /var/tmp

其实这些特殊权限位用的不多,我认为只不过是为那几种特殊的文件作个解释罢了,不用深究的,知道派什么用的就行了吧。

使用附加权限

设置SET位、粘滞位权限
使用权限字符


chmod ug±s 可执行文件...
chmod o±t 目录名...


使用权限数字:


chmod mnnn 可执行文件...

m为4时,对应SUID,2对应SGID,1对应粘滞位,可叠加
 
SET位标记字符为“s”,若使用8进制数字形式,则SUID对应为“4”、SGID对应为“2”;在权限模式中可采用“nnnn”的形式时,如“4755”表示设置SUID权限、“6755”表示同时设置SUID、SGID权限。

本文标题:linux目录权限-linux如何判断指定用户对指定目录具有的权限具体介绍
本文地址: http://www.61k.com/1088926.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1