1. Linux/Centos 权限命令常识:

Linux操作系统是多用户多任务操作系统,包括用户账户和组账户两种:

细分用户账户(普通用户账户,超级用户账户)除了用户账户以为还有组账户所谓组账户就是用户账户的集合,centos组中有两种类型,私有组和标准组:

当创建一个新用户时,若没有指定他所属的组,centos就建立以个和该用户相同的私有组,此私有组中只包括用户自己。

标准组可以容纳多个用户,如果要使用标准组,那创建一个新的用户时就应该指定他所属于的组,从另外一方面讲,同一个用户可以属于多个组。当一个用户属于多个组时,其登录后所属的组是主组,其它组为附加组。

账户系统文件主要在 /etc/passwd, /etc/shadow,/etc/group,和/etc/gshadow四个文件中。

其中root的uid是0,从1-499是系统的标准账户,普通用户从uid 500开始。

1. 权限命令
chgrp,改变文件所属用户组;
chown,改变文件所有者;
chmod,改变文件的权限。  

chmod -R 777 /usr/data/websites/  #设置websites下所有文件的权限


2.chgrp就是change group的简称

使用该指令时,要被改变的组名必须在/etc/group文件内存在才行。
#chgrp [-R] group filename(or dirname),其中R表示进行递归(recursive)的持续更改,也即连同子目录下的所有文件、目录。
所以当修改一个目录中所有文件的用户组(所有者与权限也一样)时,要加上-R。

例如将文件install.log改到users用户组
$chgrp users install.log


3.chown就是change owner的简称。

#chown [-R] user filename(or dirname),改变file的文件所有者为user。
#chown [-R] .group filename(or dirname),改变file的用户组为group(注意加点)。
#chown [-R] user.group filename(or dirname),改变file的文件所有者为user,用户组为group。
为避免“.”引起的系统误判,通常用一下命令表示该句:
#chown [-R] user:group filename(or dirname)。


4.复制文件给其他人,复制命令:
$cp [-option] [source file or dir] [target file or dir]
复制行为(cp)会复制执行者的属性与权限,所以即使复制到他人用户组仍然无法使用,
所以这时必须修改该权限。


5.chmod就是change mode bits的简称。

数字类型改变文件权限:
#chmod [-R] xyz fileordir,其中x代表owner权限,y代表group权限,z代表others权限。
r=4,w=2,x=1,上面三种身份的权限是r+w+x的和,如果没有相应的权限,则值为0。
例如:install.log文件,owner=rwx=4+2+1=7,group=rwx=4+2+1=7,others=---=0+0+0=0,
     所以这个文件的将改变权限值为770:
#chmod 770 install.log。


6.符号类型改变文件权限

可以用u,g,o三个参数来代表user,group,others 3种身份的权限。
a代表all,也即全部的身份。

读写的权限就可以写成r,w,x。
+,-,=分别代表加入,出去,设置一个权限。
加入要设置一个文件的权限成“-rwxr-xr-x,指令为:

#chmod u=rwx,go=rx filename,注意加上那个逗号。
要给一个文件的全部身份加上x权限,则指令为:
#chmod a+x filename。

2. Linux系统下经常遇到文件或者文件夹的权限问题,或者是因为文件夹所属的用户问题而没有访问的权限。

根据我自己遇到的情况,对这类问题做一个小结。
在命令行使用命令“ll”或者“ls -a”,可以查看文件或者文件的权限:

ls -ld /usr/data/websites
drwxr-xr-x. 4 aerchi web 4096 Nov  29 09:42 /usr/data/webistes

其中“drwxr-xr-x”表示权限,一共有10字符。

第一个字符,如果是“-”则表示是文件,如果是“d”则表示是目录(directory)。

后面9个字符, 每3个字符为一个组,则有3组信息(“rwx”、“r-x”、“r-x”),分别表示所属用户本身具有的权限、所属用户组其他成员的权限、其他用户的权限。

每组信息如“rwx”,每一个字符都有它自己的特定含义且先后位置是固定的 。其中r是读权限、w是写权限、x是可执行权限、-没有对应字符的权限。
Linux里面对这些字符设置对应的数值,r是4,w是2,x是1,-是0。

说明如下:

1参数:   “-”则是文件,“d”是目录
2-4参数:  属于user权限
5-7参数:  属于group权限
8-10参数:  属于others权限
------------------

“d”  : 表示为目录
“rwx” :用户权限  7 
“r-x” :  用户组权限  5 
“r-x” :  其它用户权限  5

上面的“rwx”则是7(=4+2+1),所以最开始/usr/data/websites的权限是755,属于web用户组的aerchi用户。


注: 如下,当前目录为 /usr/data/websites,  下面包含子目录 aerchi,  

子目录 aerchi下包含 aerchi.txt, 即   /usr/data/websites/aerchi/aerchi.txt

3. 权限修改 chmod

3.1 文件的权限修改

我想修改文件aerchi.txt的权限为755,则为:

[root@aerchi websites]# ll
-rwxr-xr-x. 1 aerchi web 6 Nov 29 09:42 aerchi.txt #改之前权限是755, 用户:aerchi, 用户组:web

[root@aerchi websites]# chmod 775 aerchi.txt

[root@aerchi websites]# ll
-rwxrwxr-x. 1 aerchi web 6 Nov 29 09:42 aerchi.txt #改后权限是775

 

3.2 文件夹的权限修改

修改之前:

[root@aerchi websites]# ll

drw-r--r--. 2 root root 4096 Nov 9 16:42 aerchi #改之前文件夹aerchi的权限是644

[root@aerchi websites]# ll aerchi/

-rwxr-xr-x. 1 root root 6 Nov 9 16:42 a.txt #改之前文件夹my的里面的文件权限是755

3.2.1 改变文件夹本身权限,不改动子文件(夹)

执行命令修改aerchi文件夹权限为600:

[root@aerchi websites]# chmod 600 aerchi/ #修改命令

[root@aerchi websites]# ll

drw-------. 2 root root 4096 Nov 29 09:42 aerchi #改aerchi目录之后权限是600

[root@aerchi websites]# ll aerchi/

-rwxr-xr-x. 1 root root 6 Nov 29 09:42 aerchi.txt #改aerchi目录之后里面的文件权限还是755,没有变化

3.2.2  文件夹及子目录下所有文件(夹)权限修改

执行1.2.1步骤之后,aerchi目录和里面的文件权限都是不同的。现在递归修改,都改为统一的权限777:

[root@aerchi websites]# chmod -R 777 aerchi/ #修改命令,注意中间是大写的R,不是小写

[root@aerchi websites]# ll

drwxrwxrwx. 2 root root 4096 Nov 29 09:42 aerchi #修改后aerchi文件夹权限是777

[root@aerchi websites]# ll aerchi/

-rwxrwxrwx. 1 root root 6 Nov 29 09:42 aerchi.txt #修改后里面的文件变为了777

4. 所属用户和用户组修改chown 

这个和修改文件夹的权限是基本相同的,只不过是把chmod命令换成了chown。

4.1 文件所属用户和用户组修改

修改aerchi.txt文件所属用户(test-user)和用户组(test-group):

chown test-user:test-group aerchi.txt #修改文件所属用户为test-user,所属用户组为test-group

4.2 文件夹所属用户和用户组修改

4.2.1 只修改文件夹本身所属用户和用户组,不改子文件(夹)

仅修改目录aerchi 本身所属用户(test-user)和用户组(test-group):

chown test-user:test-group aerchi #修改文件所属用户为test-user,所属用户组为test-group

4.2.2 文件夹及所有子文件(夹)所属用户和用户组修改

递归修改文件夹aerchi及包含的所有子文件(夹)的所属用户(test-user)和用户组(test-group):

chown -R test-user:test-group aerchi #修改文件所属用户为test-user,所属用户组为test-group

5. 总结

修改单个文件(夹), 用命令:

chown或chmod    “权限”或“名:组”    文件(夹)名称

修改文件夹及其包含的子文件夹所有文件, 用命令:

chown或chmod  -R   “权限”或“名:组”    文件夹名称

比如我修改目录权限:

//注: group-aerchi 为用户组, 
//ftp-aerchi 用vsftp用户名, ng-nginx 为nginx用户名,apache-daemon 为apache用户名
groupadd group-aerchi  //用户组
usermod -G group-aerchi ftp-aerchi   //ftp用户添加至用户组
usermod -G group-aerchi nginx-nginx   //nginx用户添加至用户组
usermod -G group-aerchi apache-daemon   //apache用户添加至用户组
chown -R :group-aerchi /usr/data/web-sites && chmod 775 -R /usr/data/web-sites //为用户组赋予 /usr/data/web-sites目录 775权限

6. 其它常用命令:

1. 新建用户 
adduser user #新建user 用户 
passwd user #给user 用户设置密码


2. 新建工作组 
groupadd group #新建group工作组


3.新建用户同时增加工作组 
useradd -g group user #新建user用户并增加到group工作组

//注:-g 所属组, -d 家目录, -s 所用的SHELL


4.给已有的用户增加工作组 
usermod -G groupname username

5.临时关闭 
在/etc/shadow文件中,属于该用户的行的第二个字段(密码)前面加上就可以了。
恢复该用户,去掉即可 
//或者使用如下命令关闭用户账号: 
passwd user –l 
//重新释放: 
passwd user –u


6.永久性删除用户账号 
userdel user 
groupdel group 
usermod –G group user //(强制删除该用户的主目录及其所有子目录和子文件)


7.显示用户信息 
id user 
cat /etc/passwd

查看用户和用户组的方法:

用户列表文件:/etc/passwd 
用户组列表文件:/etc/group 
查看系统中有哪些用户:cut -d:-f 1 /etc/passwd 
查看可以登录系统的用户:cat /etc/passwd | grep -v /sbin/nologin | cut -d:-f 1 
查看用户操作:w命令 (#需要root权限) 
查看某一用户:w 用户名 
查看登录用户:who 
查看用户登录历史记录:last

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

useradd user1 #添加用户1

useradd user2 #添加用户2

groupadd group1 #创建名为group1的组

gpasswd  -a  user1 group1 #给用户user1添加到group1中 或 usermod -G group1 user1

gpasswd  -a  user2 group1 #给用户user2添加到group1中 或 usermod -G group1 user2

grep  group1 /etc/group #(或者 cat etc/group |grep group1)

mkdir -p /usr/data/websites  #创建目录

ls -ld /usr/data/websites  #查看目录信息

chmod 775 /usr/data/websites  #修改目录权限

chgrp group1 /usr/data/websites  #给group1组分配文件

chown -R :group1 /test/software && chmod 775 -R /test/software #给用户组group1赋予/test/software 目录775权限


vim /etc/group #查看并可修改用户组

以下命令查看相应权限
cat /etc/passwd #可以查看用户的pass
cat /etc/shadow #可以查看用户名
cat /etc/group  #可以查看 组

#注 cat 仅显示, vim 是修改命令

 乐意黎