您的位置:首页 > 其它

find和chmod结合来修改权限

2020-01-15 08:35 141 查看

已知问题:

1,/etc/my.cnf 由于权限过高,无法被load,mysql启动时略过,导致配置文件字符集设置无效,出现乱码。

2,/etc/ssh/下面sshd的配置文件,启动文件,key文件权限过高,无法被load,导致ssh连接失败,错误为ssh_exchange_identification: Connection closed by remote host。


chmod –R o+rwx /后,很多系统文件权限过高,导致很多应用出问题。

我解决的基本原则是,对于目录如果group只有rx的,去掉others的w,对于group只有r的,去掉others的wx,对于group没有任何权限的,去掉others的rwx;

对于文件group有r权限的,给others r的权限,去掉wx;对于group没有任何权限的,others也没有任何权限;

对于find命令和chmod命令不熟的,以及运营服务器上慎用如下命令,由此带来的损失,概不负责。


对于目录:

find / \( -path /usr -o -path /var \) -prune -o -type d -perm 647 -exec chmod 644 {} \; -print

--忽略/usr,/var目录,查找类型为目录,权限为647的文件,修改权限为644,并将这些目录显示出来

find / \( -path /usr -o -path /var \) -prune -o -type d -perm 667 -exec chmod 664 {} \; -print

find / \( -path /usr -o -path /var \) -prune -o -type d -perm 657 -exec chmod 655 {} \; -print

find / \( -path /usr -o -path /var \) -prune -o -type d -perm 607 -exec chmod 600 {} \; -print

find / \( -path /usr -o -path /var \) -prune -o -type d -perm 707 -exec chmod 700 {} \; -print

find / \( -path /usr -o -path /var \) -prune -o -type d -perm 407 -exec chmod 400 {} \; -print

find / \( -path /usr -o -path /var \) -prune -o -type d -perm 207 -exec chmod 200 {} \; -print

find / \( -path /usr -o -path /var \) -prune -o -type d -perm 107 -exec chmod 100 {} \; -print

find . –type d –perm 757 –exec chmod o-w {} \;

find . –type d –perm 667 –exec chmod o-w {} \;

find . –type d –perm 607 –exec chmod o-rwx {} \;

find . –type d –perm 707 –exec chmod o-rwx {} \;

find . –type d –perm 407 –exec chmod o-rwx {} \;

find . –type d –perm 207 –exec chmod o-rwx {} \;

find . –type d –perm 107 –exec chmod o-rwx {} \;

 

对于文件:

find / \( -path /usr -o -path /var \) -prune -o -type f -perm 647 -exec chmod 644 {} \; -print

find / \( -path /usr -o -path /var \) -prune -o -type f -perm 657 -exec chmod 654 {} \; -print

find / \( -path /usr -o -path /var \) -prune -o -type f -perm 667 -exec chmod 664 {} \; -print

find / \( -path /usr -o -path /var \) -prune -o -type f -perm 607 -exec chmod 600 {} \; -print

find / \( -path /usr -o -path /var \) -prune -o -type f -perm 707 -exec chmod 700 {} \; -print

find / \( -path /usr -o -path /var \) -prune -o -type f -perm 407 -exec chmod 400 {} \; -print

find / \( -path /usr -o -path /var \) -prune -o -type f -perm 207 -exec chmod 200 {} \; -print

find / \( -path /usr -o -path /var \) -prune -o -type f -perm 107 -exec chmod 100 {} \; -print

find . –type d –perm 647 –exec chmod o-wx {} \;

find . –type d –perm 667 –exec chmod o-wx {} \;

find . –type d –perm 607 –exec chmod o-rwx {} \;

find . –type d –perm 707 –exec chmod o-rwx {} \;

find . –type d –perm 407 –exec chmod o-rwx {} \;

find . –type d –perm 207 –exec chmod o-rwx {} \;

find . –type d –perm 107 –exec chmod o-rwx {} \;

批量处理完后,查找一下是否还有残留的others为rwx的文件,一般都是些l链接文件,对于这些不用变。

find –perm -007 +007 007 /007

 

 

 

在linux里面,目录也是一个文件。权限设置方法与普通文件一样。
目录的可执行权限:目录无所谓执行不执行,目录只能否被开启(也称作“遍历”或“搜索”)
对目录的执行权限不仅意味着查看目录下文件名还允许查看文件的其它信息如文件大小、修改时间。

说的再详细些就是这样的
Linux的权限不是很细致,只有RWX三种
r(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。
w(Write,写入):对文件而言,具有新增,修改,删除文件内容的权限;对目录来说,具有新建,删除,修改,移动目录内文件的权限。
x(eXecute,执行):对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。
1、目录的只读访问不允许使用cd进入目录,必须要有执行的权限才能进入。
2、只有执行权限只能进入目录,不能看到目录下的内容,要想看到目录下的文件名和目录名,需要可读权限。
3、一个文件能不能被删除,主要看该文件所在的目录对用户是否具有写权限,如果目录对用户没有写权限,则该目录下的所有文件都不能被删除,文件所有者除外
4、目录的w位不设置,即使你拥有目录种某文件的w权限也不能写该文件

再具体的话 只能# man chmod 自己查看了

 

Linux权限设置详解


 

Linux是一个对权限管理非常严格的系统,Linux下每个文件的权限分为三个组:User,Group,Other。每个组又有三种不同的权限,可读,可写,可执行,一共用3个八进制数来表示一个文件的权限。
User组代表文件的拥有者,通常文件的创建者就是文件的拥有者,当然,可以使用chown来改变拥有者。
Group组代表拥有文件的用户组,任何在这个组中的用户都被视作拥有这个文件,并且拥有相同的访问权限,这个是很有用的,比如,你有一个项目,需要多人合作,必须让开发者拥有访问权限,而其他人没有,那么就可以把这些用户添加到一个组,然后设置文件归这个组所有。
Other组代表既不是文件的拥有者,也不属于拥有文件的用户组的用户。相当于Windows中Everyone组,对这个组设置的权限会影响到其他所有人。
我们可以用ls -l命令来列出目录下文件的权限,比如得到了如下列表:

drwxr-xr-x 3 cloud www-data 4096 2012-08-07 08:46 android-build
drwxr-xr-x 2 cloud www-data 4096 2012-08-07 08:46 bin -rw-r--r-- 1 root     root 529 2012-07-22 07:30 atk.json -rwxrwxrwx 1 cloud www-data 702261 2012-04-17 17:48 rootdabitch-0.1.zip

这里drwxr-xr-x里面开头的d代表这是一个目录,rwx代表文件拥有者具有读(r),写(w),执行(x)的权限,r-x代表拥有文件的组的成员具有读取和执行的权限,但是没有写入权限,cloud代表文件拥有者,www-data代表拥有文件的组。-rw-r–r– root root代表这是一个普通的文件,拥有者是root,拥有文件的组为root,root用户有读取和写入权限,没有执行权限,root组有读取权限,其他人有读取权限。如果用三个8进制数来表示文件的权限,对应规则是:r代表2^2=4,w代表2^1=2,x代表2^0=1,-代表0,所以-rw-r–r–用三个8进制数表示就是644,-rwxrwxrwx就是777.
可以用chmod来修改文件的权限,但必须是用较高权限的账户,或者是文件的所有者来执行这个命令,比如:

chmod o w atk.json

表示授予Other组写入权限。

chmod go-rw atk.json

表示删除Group和Other组的读取和写入权限。
基本参数如下:
u 代表所有者(user)
g 代表所有者所在的组群(group)
o 代表其他人,但不是u和g (other)
a 代表全部的人,也就是包括u,g和o
r 表示文件可以被读(read)
w 表示文件可以被写(write)
x 表示文件可以被执行(如果它可执行的话)
或者可以用3个八进制数来设置权限,比如

chmod 777 atk.json

表示设置atk.json对所有人都可读写,可执行。
还可以用chown来设置文件的拥有者。具体请参考:

man chmod
man chown

Linux命令之chmod(修改文件权限) 转

linux下总是遇到没有文件修改权限, 很头疼, 作为菜鸟我很喜欢"chmod 777 -R 文件目录" 了事, 结果现在系统崩了, 哎.. 慎用

"

<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->

chmod 命令

用途

更改文件方式。

语法

要用符号更改文件方式

chmod [ -R ] [ -h ] [ -f ] [ [ u ] [ g ] [ o ] | [ a ] ] { { - | + | = } [ r ] [ w ] [ x ] [ X ] [ s ] [ t ] } { File ... | Directory ... }

要用数字更改文件方式

chmod [ -R ] [ -h ] [ -f ] PermissionCode { File ... | Directory ... }

描述

chmod 命令修改方式位和指定文件或目录的扩展访问控制表(ACL )。可以用符号或用数字定义方式(完全方式)。

当遇到符号链接而您未指定 -h 标志时,chmod 命令更改通过链接指向的文件或目录的方式,而非链接本身的方式。如果指定 -h 标志,则 chmod 命令防止此方式更改。

如果指定 -h 标志和 -R 标志,chmod 命令递归地降序指定的目录,并且在遇到符号链接时,不更改链接指向的文件或目录的方式。

标志

-f

禁止所有错误报告(除了无效权限和用法语句)。

-h

禁止遇到的符号链接指向的文件或目录的方式更改。

注:由于不能在符号链接上设置方式位,所以此行为与 chgrp 和 chown 命令上的 -h标志的行为略有不同。

-R

只递归地降序目录,如同模式 File...|Directory... 指定。-R 标志更改匹配指定模式的每个目录和所有文件的文件方式位。请参阅示例 6 。

当遇到符号链接并且链接指向目录时,更改该目录的文件方式位,但不进一步遍历目录。

符号方式

要以符号格式指定方式,必须指定三个标志集。

注:不要使用空格分隔标志。

第一个标志集指定对谁授权或对谁拒绝指定的许可权,如下所述:

u

文件所有者。

g

文件组固有的组和扩展 ACL 条目。

o

所有其它条目。

a

用户、组和所有其它条目。a 标志具有与一起指定 ugo 标志相同的效果。如果不指定这些标志,则缺省值为 a 标志,并应用文件创建掩码(umask )。

第二个标志集指定是否要除去、应用或设置许可权:

-

除去指定的许可权。

+

应用指定的许可权。

=

清除选定的许可权字段并将其设置为指定的许可权。如果不指定 = 之后的许可权,chmod 命令从选定的字段除去所有许可权。

第三个标志集指定要除去、应用或设置的许可权:

r

读许可权。

w

写许可权。

x

对于文件的执行许可权;对于目录的搜索许可权。

X

如果当前的(未修改的)方式位设置了至少一个用户、组或其它执行位,则执行文件的许可权。如果指定了 File 参数并且在当前的方式位中未设置任何执行位,则忽略 标志。

搜索目录的许可权。

s

如果指定或隐含 u 标志,则设置执行时的用户标识许可权。如果指定或隐含 g 标志,则设置执行时的组标识许可权。

t

对于目录,它表示只有文件所有者可以链接或取消链接指定目录中的文件。对于文件,它设置 save-text 属性。

数字或完全方式

chmod 命令还允许您对该方式使用八进制表示法。数字方式是一个或多个以下值的摘要:

4000

设置执行时的用户标识。

2000

设置执行时的组标识。

1000

对于目录设置链接许可权或对于文件设置 save-text 属性。

0400

允许所有者读。

0200

允许所有者写。

0100

允许所有者执行或搜索。

0040

允许组读。

0020

允许组写。

0010

允许组执行或搜索。

0004

允许其他人读。

0002

允许其他人写。

0001

允许其他人执行或搜索。

注:

1. 用数字方式指定禁用任何扩展 ACL 。请参考《AIX 5L V5.2 系统用户指南:操作系统与设备》中的『访问控制列表 』以获取更多信息。

2. 用符号更改组访问权限还影响扩展 ACL 条目。与文件的所有组相同的 ACL 中的组条目拒绝从方式除去的任何许可权。请参考『访问控制表 』以获取更多信息。

3. 可以指定用逗号分开的多个符号方式。按照它们从左到右的出现顺序执行操作。

4. 当从目录除去设置执行时的组标识许可权时,必须用符号指定该方式或使用 4 字符八进制,并且行距为零(例如 0755 )。

安全性

访问控制:此程序应该作为“可信计算基”中的正常用户程序安装。

只有文件的所有者或 root 用户可以更改文件的方式。

退出状态

该命令返回以下出口值:

0

已成功执行完命令并已执行所有请求的更改。

>0

发生错误。

示例

1. 要将许可权类型添加到几个文件:

chmod g+w chap1 chap2

这将组成员的写权限添加到文件 chap1 和 chap2 。

2. 要立即进行几个许可权更改:

chmod go-w+x mydir

这拒绝组成员和其他人创建或删除 mydir (go-w )中的文件的许可权,并允许组成员和其他人搜索 mydir 或在路径名(go+x )中使用它。这等价于命令序列:

chmod g-w mydir

chmod o-w mydir

chmod g+x mydir

chmod o+x mydir

3. 要只允许所有者将 shell 步骤用作命令:

chmod u=rwx,go= cmd

这授权文件(u=rwx )所有者读、写和执行许可权。它还拒绝组和其他人以任何方式(go= )访问 cmd 的许可权。

如果具有执行 cmd shell 命令文件的许可权,则可以通过输入以下命令运行它:

cmd

注:取决于 PATH shell 变量,可能需要指定 cmd 文件的全路径。

4. 要使用设置标识(Set-ID )方式:

chmod ug+s cmd

在执行 cmd 命令时,有效的用户标识和组标识设置为那些拥有 cmd 文件的所有者。只更改与运行 cmd 命令的子进程关联的有效标识。 shell 会话的有效标识保留不更改。

此功能允许您可以访问受限制的文件。假定 cmd 程序启用了“设置用户标识(Set-User-ID )方式”并为名为 dbms 的用户所拥有。实际上,用户 dbms不是一个人,但可能与数据库管理系统关联。用户 betty 不具有访问任何 dbms 的数据文件的许可权。然而,她具有执行 cmd 命令的许可权。当她这样做时,她的有效用户标识临时更改为 dbms ,因此 cmd 程序可以访问用户 dbms 拥有的数据文件。

这种方式下,用户 betty 可以使用 cmd 命令访问数据文件,但她不会在使用标准 shell 命令的过程中意外地破坏它们。

5. 要使用 chmod 命令的完全方式格式:

chmod 644 text

这设置所有者的读和写许可权,并且它对组和其他用户设置只读方式。这还除去可能与文件关联的所有扩展 ACL 。

6. 要递归地降序目录并更改给予树结构的文件和目录许可权:

./dir1/dir2/file1

./dir1/dir2/file2

./dir1/file1

请输入此命令序列:

chmod -R 777 f*

这将更改 ./dir1/file1 的许可权。

但对于以下树结构:

./dir1/fdir2/file1

./dir1/fdir2/file2

./dir1/file3

命令序列:

chmod -R 777 f*

将更改以下内容的许可权:

./dir1/fdir2

./dir1/fdir2/file1

./dir1/fdir2/file2

./dir1/file3

文件

/usr/bin/chmod

包含 chmod 命令。

"

 Linux find 命令忽略某个或多个子目录的方法

在linux find 进行查找的时候,有时候需要忽略某些目录不查找,可以使用 -prune 参数来进行过滤,但必须要注意要忽略的路径参数必须紧跟着搜索的路径之后,否则该参数无法起作用

以下是指定搜索/home/carryf目录下的所有文件,但是会忽略/home/carryf/astetc的路径:

find /home/carryf -path "/home/carryf/astetc" -prune -o -type f -print

 

如果按照文件名来搜索则为:

find /home/carryf -path "/home/carryf/astetc" -prune -o -type f -name "cdr_*.conf" -print

 

如果要忽略两个以上的路径如何处理?

find /home/carryf /( -path "/home/carryf/astetc" -o -path "/home/carryf/etc" /) -prune -o -type f  -print

find /home/carryf /( -path "/home/carryf/astetc" -o -path "/home/carryf/etc" /) -prune -o -type f  -name "cdr_*.conf" -print

注意/( 和/) 前后都有空格。

 

 查找某个文件包含内容,下面这个语句可以解决目录带空格的问题

find ./ -name "mysql*" -print0  |xargs -0 grep "SELECT lead_id FROM vicidial_list where vendor_lead_code"

如果目录不带空格,那么可以如下面的形式执行:

find ./ -name "mysql*"  |xargs  grep "SELECT lead_id FROM vicidial_list where vendor_lead_code"

 

转载于:https://my.oschina.net/alphajay/blog/108668

  • 点赞
  • 收藏
  • 分享
  • 文章举报
chenqiechun3408 发布了0 篇原创文章 · 获赞 0 · 访问量 560 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: