Linux文件权限

/etc/passwd文件

[root@tzPC ~]# head -2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

 root用户的UID为0

所有运行在后台的服务都有一个系统用户,系统用户是系统上运行各种服务进程访问资源用的特殊账户。

Linux系统预留了500以下的UID值

各字段意思如下

  1. 登陆用户名
  2. 用户密码
  3. 用户账户UID
  4. 用户账户组ID
  5. 用户账户描述信息
  6. 用户HOME目录位置
  7. 用户的默认shell

/etc/shadow文件

[root@tzPC ~]# cat /etc/shadow|grep tz
tz:$6$JRBWbFqS$oy:18461:0:99999:7:::

只有root账户或者特定程序(如登陆程序)才能访问

[root@tzPC ~]# ll /etc/shadow
----------. 1 root root 2580 Jul 18 21:50 /etc/shadow

9个字段意思如下

  1. 登陆用户名
  2. 加密后的密码
  3. 从上次修改密码后过去的天数(自1970年1月1日开始算)
  4. 多少天后更改密码
  5. 多少天后必须更改密码
  6. 密码过期前提前多少天提醒用户更改密码
  7. 密码过期后多少天禁用用户账户
  8. 用户账户被禁用的日期(自1970年1月1日到当天)
  9. 预留字段给将来使用

添加用户

useradd命令

命令默认在/usr/sbin/useradd,如果不能用需要查看是否安装以及加入到PATH变量中

不加参数则使用默认值创建用户

默认值配置文件在/etc/default/useradd中

可使用-D参数查看

[root@tzPC ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

各字段含义如下

  1. 新用户会被添加到GID为100的公共组
  2. HOME目录将会位于/home/loginname
  3. 新用户密码过期后不会被禁用
  4. 新用户账号未设置过期日期
  5. 新用户的默认shell为bash shell
  6. 系统会将/etc/skel目录下的内容复制到用户的HOME目录下
  7. 系统为新用户在mail目录下创建一个用于接收邮件的文件
[root@tzPC ~]# ls /var/spool/mail/
 tz  tz1  tz10  tz2  tz3  tz4  tz5  tz6  tz7  tz8  tz9

注意:useradd默认会默认创建用户家目录,但userdel不会默认删除用户家目录,需要加-r参数

-D参数可修改系统默认设置

参数 描述
-b 修改默认Home目录位置
-e

更改新用户过期时间

-f 更改新用户密码过期到被禁用的天数
-g 更改默认组名或GID
-s 更改默认的登陆shell

如修改默认shell为tsch

[root@tzPC ~]# useradd -D -s /bin/tsch

删除用户

userdel

-r 同时删除用户家目录,默认不加此参数不删除用户家目录,使用前需要确认该用户家目录是否含有重要文件!

修改用户

usermod

能修改/etc/passwd文件大部分字段

常用参数

参数 描述
-c 修改备注字段
-e 修改过期日期
-g 修改默认登陆组
-l 修改用户登陆名
-L 锁定用户使其无法登陆(常用)
-p 修改用户密码
-U 解锁用户(常用)

更改密码

passwd

passwd -e能下次登陆时强制修改密码

chpasswd

用于给大量用户修改密码使用

自动读取一个文件中的登陆名和密码对(如username:passwd)

[root@tzPC ~]# echo tz:321|chpasswd
[root@tzPC ~]# chpasswd < users.txt 

更改用户登陆shell

chsh

[root@tzPC ~]# chsh -s /bin/sh tz
Changing shell for tz.
Shell changed.

更改用户备注

chfn

更改/etc/passwd文件的备注字段

[root@tzPC ~]# chfn tz
Changing finger information for tz.
Name []: tz
Office []: zjtd
Office Phone []: 8888
Home Phone []: 9999

Finger information changed.

更改后如下

[root@tzPC ~]# cat /etc/passwd | grep tz
tz:x:1000:1000:tz,zjtd,8888,9999:/home/tz:/bin/sh

查看用户信息

finger

[root@tzPC ~]# finger tz
Login: tz                         Name: tz
Directory: /home/tz                     Shell: /bin/sh
Office: zjtd, x8888            Home Phone: x9999
On since Thu Aug  6 12:02 (CST) on pts/4 from 192.168.149.1
   3 hours 28 minutes idle
No mail.
No Plan.

管理账户有效期

chage

参数 描述
-d 设置上次修改密码到现在的天数
-E 设置密码过期的日期
-I 设置密码过期到锁定账户的天数(常用)
-m 设置修改密码之间最少要多少天
-W 设置密码过期前多久出现提示信息

日期格式可以为

  • YYYY-MM-DD
  • 从1970年1月1日到该日期天数的数值

Linux组

组权限允许多个用户对系统中的对象(文件或目录等)共享一组共用的权限

/etc/group文件

系统账户用的组会分配低于500的GID值,用户组从500开始分配

[root@tzPC ~]# head -2 /etc/group
root:x:0:
bin:x:1:

4个字段解释如下

  1. 组名
  2. 组密码
  3. GID
  4. 属于该组的用户列表

组密码允许非组内成员通过它成为该组成员

创建组

groupadd

[root@tzPC ~]# groupadd shared
[root@tzPC ~]# tail -1 /etc/group
shared:x:1017:

添加用户到组

需使用usermod -G参数,将该组成为此用户的属组

[root@tzPC ~]# usermod -G shared tz
[root@tzPC ~]# usermod -G shared tz1
[root@tzPC ~]# tail -1 /etc/group
shared:x:1017:tz,tz1

 usermod -g参数将修改默认组

[root@tzPC ~]# usermod -g shared tz
[root@tzPC ~]# cat /etc/passwd | grep tz
tz:x:1000:1017:tz,zjtd,8888,9999:/home/tz:/bin/sh
[root@tzPC ~]# cat /etc/group | grep 1017
shared:x:1017:tz,tz1

修改组

groupmod -g修改已有组的GID

groupmod -n修改已有组的组名

将shared组名更改为sharing

[root@tzPC ~]# groupmod -n sharing shared
[root@tzPC ~]# tail -1 /etc/group
sharing:x:1017:tz,tz1

文件权限符

[root@tzPC ~]# ls -l 
total 40
-rw-r--r--. 1 root root 10240 Aug  5 18:04 My.tar
-rw-r--r--. 1 root root 10240 Aug  5 18:04 Rich.tar

-代表文件

d代表目录

l代表链接

c代表字符型设备

b代表块设备

n代表网络设备

umask显示默认权限值

[root@tzPC ~]# umask
0022

 第一位代表粘着位(sticky bit)

一个文件默认的读写权限是从全权限值减去umask值

文件全权限值为666,减去umask值022,结果为644,所以创建一个文件的权限为644

[root@tzPC ~]# touch test
[root@tzPC ~]# ll test
-rw-r--r--. 1 root root 0 Aug  6 16:09 test

 目录的全权限值为777

 修改umask值

[root@tzPC ~]# umask 026

改变权限

chmod

[root@tzPC ~]# chmod 760 test

另外写法

[root@tzPC ~]# chmod o+r test
[root@tzPC ~]# chmod u-w test
[root@tzPC ~]# chmod g+rw test
[root@tzPC ~]# chmod a+rwx test

-R 递归目录及其文件

[root@tzPC ~]# chmod -R a=rwx test1
[root@tzPC ~]# ll | grep test1
drwxrwxrwx. 2 root root    18 Aug  6 16:15 test1
[root@tzPC ~]# ll test1/
total 0
-rwxrwxrwx. 1 root root 0 Aug  6 16:15 test

更改属主跟属组

Linux共享文件的方式就是创建组

chown

[root@tzPC ~]# chown tz test
[root@tzPC ~]# ll | grep test
-rwxrwxrwx. 1 tz   root     0 Aug  6 16:09 test

同时更改属主跟属组

[root@tzPC ~]# chown tz.tz test
[root@tzPC ~]# ll | grep test
-rwxrwxrwx. 1 tz   tz       0 Aug  6 16:09 test

只更改属组

[root@tzPC ~]# chown .tz test

将属组更改为属主的默认属组

[root@tzPC ~]# chown tz. test
[root@tzPC ~]# ll | grep test
-rwxrwxrwx. 1 tz   sharing     0 Aug  6 16:09 test

可以看到属组不写,会更改为属主的默认属组

-R可递归更改目录及文件所属关系

-h可以改变该文件所有符号链接文件的所属关系

chgrp

可以更改文件或目录的属组,前提是用户必须是这个文件的属主,还得是新组的成员,root除外。

[root@tzPC ~]# chgrp root test
[root@tzPC ~]# ll | grep test
-rwxrwxrwx. 1 tz   root     0 Aug  6 16:09 test

SUID跟SGID

SUID

当文件被用户使用时,程序会以文件属主的权限运行

[root@tzPC tz]#chmod u+s test 设置SUID位
[root@tzPC ~]#chmod 4744 /home/tz/test
[root@tzPC tz]# ll
-rwsr--r--. 1 root root 0 Aug  6 17:10 test

[root@tzPC tz]#chmod u-s test 去掉SUID设置

SGID

对文件来说,程序会以文件属组的权限运行,对目录来说,目录中创建的新文件会以目录的默认属组作为属组。

[root@tzPC tz]# chmod g+s testdir
[root@tzPC tz]# ll | grep testdir
drwxr-sr-x. 2 root tz   16 Aug  6 17:44 testdir
[root@tzPC testdir]# ll
-rw-r--r--. 1 root tz 0 Aug  6 17:44 xx

锁定文件或文件夹

chattr

+i :给文件或目录加锁,使文件或者文件夹不可删除、移动、修改或者追加内容;                 

+a :使文件或者文件夹不可删除、移动、修改的操作,但可以追加内容的操作;
+i,+a 可以复制,但复制后的新文件权限变了默认权限;

[root@tzPC tz]# chattr +i xx
[root@tzPC tz]# lsattr
----i----------- ./xx
[root@tzPC tz]# chattr -i xx

查看隐藏权限

lsattr
-a :查看目录里面包含的子目录和(包括隐藏)文件的隐藏权限;
-R:查看目录里面包含的子目录和文件的隐藏权限(并可快捷查看子目录下的隐藏权限);

-d : 查看当前目录的隐藏权限

今天的学习是为了以后的工作更加的轻松!
原文地址:https://www.cnblogs.com/tz90/p/13445464.html