用户与用户组

用户身份与用户组记录的文件

/etc/passwd:所有的系统上的账号与一般身份用户,包括root账号
/etc/shadow:账号的密码信息
/etc/group:所有的用户组名
注意:这三个文件分别记录了linux系统的账号、密码、用户组,切记不要随便删除

Linux文件权限

  1. -rw-r--r-- 1 root root 0 Jun 11 14:19 __init__.py
  2. drwxr-xr-x 2 root root 6 Aug 1 17:51 linux_basic
  3. [文件权限] [链接] [拥有者][用户组][文件容量] [修改日期] [文件名]

文件权限说明

一共十个字符,其中第一为一组,剩下三个为一组
第一组:
为[d]表示为目录
为[-]表示为文件
为[l]表示为链接文件
为[b]表示为设备文件里面的可供存储的周边设备(可按块随机读写的设备)
为[c]表示为设备文件里面的串行端口设备,例如键盘、鼠标(一次性读取设备)
其他三组:
[r]代表读(read) [w]代表写(write) [x]代表执行(execute)

  1. 文件拥有者可具备的权限
  2. 加入此用户组的账号的权限
  3. 非本人且未加入用户组的其他账号的权限

    修改文件属性与权限

  • chgrp:修改文件的所属用户组
  • chown:修改文件的拥有者
  • chmod:修改文件的权限
    1. [root@xxxxx linux_basic]# ls -l
    2. total 0
    3. -rw-r--r-- 1 root root 0 Aug 2 19:38 privilege_test.py

    查看账号所属用户组

    ```shell

    查看当前用户

    [william@xxxxx linux_basic]$ groups william

查看指定用户

[root@xxxxx linux_basic]# groups william william : william

  1. <a name="DBAQa"></a>
  2. #### 修改所属用户组
  3. chgrp group_name [-R] file_name/dir_name<br />[-R]:表递归(recursive)更改目录下所有文件/目录的用户组信息
  4. ```shell
  5. [root@xxxxx linux_basic]# chgrp shigl privilege_test.py
  6. [root@xxxxx linux_basic]# ll
  7. total 0
  8. -rw-r--r-- 1 root shigl 0 Aug 2 19:38 privilege_test.py

修改拥有者

chown own_name [-R] file_name/dir_name
[-R]:表递归(recursive)更改目录下所有文件/目录的拥有者信息

[root@xxxxx linux_basic]# chown shigl privilege_test.py
[root@xxxxx linux_basic]# ll
total 0
-rw-r--r-- 1 shigl shigl 0 Aug  2 19:38 privilege_test.py

小知识:chown也可以用 【chown user_name.group_name file_name】,不过这种方式需要注意,因为如果账号中存在小数点.则容易造成系统误判。所以还是建议使用【:】来分隔拥有者和用户组

[root@xxxxx linux_basic]# chown william.william privilege_test.py
[root@xxxxx linux_basic]# ll
total 0
-rw-r--r-- 1 william william 0 Aug  2 19:38 privilege_test.py

# 同样适用于更新目录的 拥有者:用户组
[root@xxxxx linux_basic]# ll
total 0
-rw-r--r-- 1 william william  0 Aug  2 19:38 privilege_test.py
drwxr-xr-x 3 root    root    20 Aug  2 20:14 test
[root@xxxxx linux_basic]# chown william.william -R test
[root@xxxxx linux_basic]# ll
total 0
-rw-r--r-- 1 william william  0 Aug  2 19:38 privilege_test.py
drwxr-xr-x 3 william william 20 Aug  2 20:14 test

修改权限

方式1:数字类型修改权限
数字对照如下:

r:4
w:2
x:1

修改文件权限
chmod [-R] 权限值 file_name/dir_name
[-R]:表递归(recursive)更改目录下所有文件/目录的权限

[root@xxxxx linux_basic]# ll
total 0
-rw-r--r-- 1 william william  0 Aug  2 19:38 privilege_test.py
drwxr-xr-x 3 william william 20 Aug  2 20:14 test
[root@xxxxx linux_basic]# chmod 664 privilege_test.py
[root@xxxxx linux_basic]# ll
total 0
-rw-rw-r-- 1 william william  0 Aug  2 19:38 privilege_test.py
drwxr-xr-x 3 william william 20 Aug  2 20:14 test

结果:privilege_test.py文件允许拥有者读写,用户组用户读写,其他组用户只能读

[root@xxxxx linux_basic]# chmod -R 664 test
[root@xxxxx linux_basic]# ll
total 0
-rw-rw-r-- 1 william william  0 Aug  2 19:38 privilege_test.py
drw-rw-r-- 3 william william 20 Aug  2 20:14 test

方式2:符号类型修改权限
符号对照如下:

u:user 
g:group
o:other
a:all

+:新增权限
-:移除权限
=:设置权限

修改文件权限

[root@xxxxx linux_basic]# chmod o=wrx privilege_test.py
[root@xxxxx linux_basic]# ll
total 0
-rw-rw-rwx 1 william william  0 Aug  2 19:38 privilege_test.py

# 支持同时修改不同组的权限,使用逗号分隔
[root@xxxxx linux_basic]# chmod u=rwx,go=r privilege_test.py
[root@xxxxx linux_basic]# ll
total 0
-rwxr--r-- 1 william william  0 Aug  2 19:38 privilege_test.py

[root@xxxxx linux_basic]# chmod u=rwx,g=rw,o=r privilege_test.py
[root@xxxxx linux_basic]# ll
total 0
-rwxrw-r-- 1 william william  0 Aug  2 19:38 privilege_test.py

# 如果三个组要修改的权限相同,则可使用a=xxx
[root@xxxxx linux_basic]# chmod a=r privilege_test.py
[root@xxxxx linux_basic]# ll
total 0
-r--r--r-- 1 william william  0 Aug  2 19:38 privilege_test.py

[root@xxxxx linux_basic]# chmod a+w privilege_test.py
[root@xxxxx linux_basic]# ll
total 0
-rw-rw-rw- 1 william william  0 Aug  2 19:38 privilege_test.py

[root@xxxxx linux_basic]# chmod a-r privilege_test.py
[root@xxxxx linux_basic]# ll
total 0
--w--w--w- 1 william william  0 Aug  2 19:38 privilege_test.py

文件与目录的权限意义

权限对文件的意义:

  • read:可读取文件的实际内容
  • write:可编辑,新增或修改文件的内容(但不包好删除文件)
  • execute:该文件具有可以被系统执行的权限

【x】权限说明
Window下文件是否具有执行能力是由扩展名决定的,比如:.exe、.bat、.com等
Linux下文件能否被执行,是由【x】权限决定的,跟文件名没有绝对的关系
权限对目录的意义:目录主要是记录文件名列表,目录和文件名有强烈的关联

  • read:读取文件目录列表的权限,比如使用ls命令
  • write:可以对目录下的文件/目录进行新增,编辑,删除操作及移动该目录内的文件、目录位置
  • execute:代表能否进入该目录

目录权限

[william@xxxxx linux_basic]$ ll
total 0
d--------- 3 william william 20 Aug  2 20:14 test
[william@xxxxx linux_basic]$ ls test/
ls: cannot open directory test/: Permission denied

[william@xxxxx linux_basic]$ cd test/
bash: cd: test/: Permission denied

[william@xxxxx linux_basic]$ ll
total 0
d--x--x--x 3 william william 20 Aug  2 20:14 test
[william@xxxxx linux_basic]$ cd test/
[william@xxxxx test]$ ls
ls: cannot open directory .: Permission denied

Linux目录配置

目录配置的依据

为了让用户了解到已安装软件通常放置在哪个目录下,后来就有了所谓的FHS(Filesystem Hierarchy Standard)标准,FHS重点在于规范每个特定的目录下应该要放置什么样的数据<br />FHS依据文件系统使用的频繁与否和是否允许用户随意修改,将目录定义成为四种交互作用的形态
可分享(shareable) 不可分享(unshareable)
不变(static) /usr(软件存放处) /etc(配置文件)
/opt(第三方辅助软件) /boot(启动与内核文件)
可变动(variable) /var/mail(用户邮箱) /var/run(程序相关)
/var/spool/news(新闻组) /var/lock(程序相关)
  • 可分享:可以分享给其他系统挂在使用的目录
  • 不可分享:自己机器上面运行的设备文件或是与程序有关的socket文件等,由于仅与自身机器相关,所以就不适合分享给其他主机。
  • 不变:有些数据是不会经常变动的,随着发行版而不变动。比如函数库、文件说明、系统管理员所管理的主机服务配置文件等
  • 可变动:经常修改的数据,例如日志文件、一般用户可自行接口的新闻组等

事实上FHS对目录树架构仅定义了三层目录下面应该放置什么数据,分别如下:

  • / (root,根目录):与启动系统有关
  • /usr (unix software resource):与软件安装/执行有关
  • /usr (variable):与系统运行过程有关

    常见的目录说明

    | 目录 | 应放置文件内容 | | —- | —- | | /bin | 系统有很多存放执行文件的目录,/bin目录放置的是单人维护模式下还能被使用的命令,主要有:cat、chmod、chown、mv、cp、bash等 | | /boot | 启动会使用的文件,包括linux内核文件即启动选项与启动所需的配置文件等。如果使用grub2这个启动引导程序,还存在/boot/grub2目录 | | /dev | 系统上任何设备与接口设备都是以文件的形式存在这个目录中。读写该目录下的某个文件,等于读写某个设备。常见:/dev/null、/dev/zero等 | | /etc | 系统主要的配置文件几乎都放在这个目录。例如人员账号密码、各服务启动文件等,一般用户可以查看,但只有root才能修改 | | /lib | 放置在启动时会用到的函数库,以及在/bin或/sbin下面的命令会调用的函数库 | | /media | 放置可删除的设备,包括软盘、光盘、DVD等设备都暂时挂载在此,常用的文件名:/media/floppy、/media/cdrom等 | | /opt | 放置第三方辅助软件的目录 | | /run | 早期FHS规定系统启动后产生的各项信息放在/var/log目录下,新版FHS规范到/run下面,由于/run可以使用内存模拟,性能上会好很多 | | /sbin | /sbin下面的未启动过程中所需要的,里面包括了启动、修复、还原系统所需要的命令 | | /srv | 可视为service的缩写,是一些网络服务启动后,这些服务所需要使用的数据目录,如:WWW、FTP等 | | /tmp | 一般用户或正在执行的程序暂时放置文件的地方。这个目录的是任何人都能够存取的,所以需要定期地清理下。重要数据一定不要放在此 | | /home | 系统默认的用户家目录。当新增一个一般账号时,默认的家目录都会规范到这里。 ~:代表当前这个用户的家目录 ~shigl:代表shigl的家目录 | | /root | 系统管理员root的家目录 | | /proc | 这个目录本身是一个虚拟文件系统,放置的数据都是在内存当中,如:系统内核、进程信息、外接设备的状态及网络状态等,不占用硬盘空间 | | /sys | 跟/proc非常相似,也是一个虚拟文件系统,主要记录内核和系统硬盘信息相关的内容。 |

重点关注的目录

理解:/usr是安装时会占用较大硬盘容量的内容;/var是系统运行后才会渐渐占用硬盘容量的目录

目录 应放置文件内容
/usr/bin 所有一般用户能使用的命令都放在这,使用链接文件的方式将/bin链接在此,另外FHS要求此目录下不应该有子目录
/usr/lib 基本上和/lib功能相同,/lib就是链接到该目录中
/usr/local 系统管理员在本机安装自己下载的软件,建议安装到此目录,这样便于管理
/usr/sbin 非系统正常运行所需要的系统命令,常见的就是某些网络服务器软件的服务命令(deamon),/sbin就是链接到此目录
/usr/share 主要放置只读的数据文件,几乎部分硬软件架构均可读的数据。常见的目录/usr/share/man、/usr/share/doc、/usr/share/zoneinfo
/usr/src 一般源代码建议放在这里
/var/cache 应用程序本省运行过程中产生的缓存
/var/lib 程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录各程序要有自己的目录。如:/var/lib/mysql、/var/lib/rpm
/var/lock 某些设备或文件资源一次只能被一个应用程序使用,如果同时有两个程序使用该设备,即可能产生错误的状况,就得要将该设备/文件上锁(lock)
/var/log 日志文件放置的目录,常用的有/var/log/messages、/var/log/wtmp(记录登录信息)等
/var/mail 放置个人电子邮箱目录
/var/run 某些程序或服务启动后,会将它们的PID放置在这个目录下,与/run相同,该目录链接到/run目录
/var/spool 通常放置一些队列数据,队列就是排队登录其他程序使用的数据,数据被使用后通常会删掉。比如邮件会放到/var/spool/mail/中,用户收到该邮件原则上就被删除,如果邮件暂时寄不出去会被放到/var/spool/queue/中,等被发送出去后就被删除,如果是计划任务数据(crontab),就会放置到/var/spool/cron/目录中