首页 / LINUX / 理解Linux文件权限
理解Linux文件权限
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了理解Linux文件权限,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含8809字,纯文字阅读大概需要13分钟。
内容图文
![理解Linux文件权限](/upload/InfoBanner/zyjiaocheng/932/f3d2a8e3323a469a9be600137fc6b792.jpg)
7.1 Linux的安全性
用户权限是通过创建用户时分配的用户ID (User ID ,UID)来跟踪的。 UID 时数值,每个用户都有唯一的UID。
7.1.1 /etc/passwd 文件
Linux 系统使用了一个专门的文件来讲用户的登录名匹配到对应的UID值。 这个文件就是 /etc/passwd ,它包含了一些于用户有关的信息。
UID
Linux系统中,有三类用户,分别是:普通用户、根用户、系统用户
Linux采用了32位整数跟用户分配不同的id,即userid,也就是 UID。 这意味着,理论上一个计算机系统最多默认支持了40亿个不同用户。
通常普通用户的UID 大于500,因此默认的,在添加普通用户时,系统默认用户ID从500开始编号。
根用户,即root用户,在Redhat系列系统下,用户的ID范围时1 ~ 499。root 用户就是一个Linux操作系统中上帝一样的存在,能删一切(by@jayce)。
系统用户是指,系统运行时必须有的用户,但是并不是真实的使用者。例如apache,mysql相关服务,就需要使用系统用户apache和mysql。
下文中有讲到shadow文件,可以cat /usr/shadow 就会发现除了注册过的用户和root,还有很多用户,很多以news,mail等服务命令的用户,这些用户都是系统用户。
jayce@DESKTOP-JASQLDM:~$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
.
.
.
GID
GID,即Group ID ,用户组id。
UID 和 GID 是什么关系? 是从属关系,Linux下,每个用户至少属于有一个组。
确定用户id 使用 id
命令
$id #显示当前用户的id相关信息
$id username #显示某用户的id信息
确定某用户所属的用户组,使用 groups
命令
$groups #显示当前用户所属用户组
$groups username #显示某用户所属用户组
查看当前用户名,可以使用 whoami
命令
查询当前在线用户,可以使用 who
命令
??一个系统中,不能存在重复的username,也就是用户名不能重复,但是,多个用户名可能共用一个UID !!!
7.1.2 用户名和密码 /etc/passwd 和 /etc/shadow
系统用来记录用户名、密码最重要的两个文件就是/etc/passwd 和 /etc/shadow
passwd和shadow什么关系?
最早在UNIX系统中用于记录密码的文件就是passwd(第2列的x),但是有一个问题:每个用户都需要有读取这个文件的权限,随着现代密码破解技术的发展,即便是加密的密码,也有被破解的可能。所以将密码从这个文件中剥离出去是非常必要的。
目前Linux的做法是将密码相关的信息保存在 /etc/shadow 中。而默认,只有root用户才有读取权限。其他人完全没有读取这个文件的可能。这种保存密码的方式,被称之为“影子密码”。
/etc/passwd 内容格式说明
列数 | 含义 | 说明 |
---|---|---|
1 | 用户名 | 是UID的字符串标记方式,方便阅读 |
2 | 密码 | 在旧的UNIX系统中,该字段使用户加密之后的密码,现在已经不再使用,而是将密码放在 etc/shadow 中,所以此处都只是一个字母 x |
3 | UID | 系统用来区分不同用户的整数 |
4 | GID | 系统用来区分不同用户组的整数 |
5 | 说明栏 | 类似于“注释”,现在已经不再使用 |
6 | 家目录 | 用户登录之后,所在的目录,即用户的家目录 |
7 | 登录Shell | 用户登录之后,所使用的Shell |
/etc/shadow 内容格式说明
列数 | 含义 | 说明 |
---|---|---|
1 | 用户名 | 是UID的字符串标记方式,方便阅读 |
2 | 密码 | 经过加密之后的密码 |
3 | 密码的最近修改日期 | 这个数组是从 1970 年 1 月 1 日至密码修改日的天数 |
4 | 密码不可修改的天数 | 修改密码之后,几天内不可修改密码,如果是0,则随时可以修改 |
5 | 密码重新修改的天数 | 考虑到密码使用一段时间后可能会泄露,可以设置一个修改时间,在密码到期之前,系统就会提醒用户修改密码。一般默认99999可以认为是永久 |
6 | 密码失效前提前警告的天数 | 设定密码到期前几天内开始提醒用户修改密码 |
7 | 密码失效宽限天数 | 如果密码到期,过了几天之后将会失效,无法登录系统 |
8 | 密码失效日期 | 一般为空 |
9 | 保留字段 | 暂时没有使用 |
7.1.3 添加新用户 useradd
useradd
命令,用于向Linux系统添加新的用户。
useradd
使用系统的默认值以及命令行参数来设置用户账户。
系统默认值被设置在 /etc/default/useradd 文件中。 可以使用 useradd -D
查看所用Linux系统中的这些默认值:
jayce@DESKTOP-JASQLDM:~$ useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no
本章节部分内容摘录自:《Linux系统命令及Shell脚本实践指南》
在创建新用户的时候,如果你不在命令行中指定具体的值,useradd
命令就会使用 -D
选项所显示的那些默认值。也就是:
-
新用户会被添加到GID为100的公共组;
-
新用户的HOME目录将会位于 /home/loginname;
-
新用户账户密码在过期之后不会被禁用;
-
新用户账未被设置过日期;
-
新用户账户将sh shell 作为默认shell;(sh 指向的是dash)
-
root@DESKTOP-JASQLDM:/bin# ls -la sh lrwxrwxrwx 1 root root 4 Aug 5 05:39 sh -> dash
-
-
系统会将 /etc/skel 目录下的内容赋值到用户的HOME目录下;
-
系统不会为该用户账户在mail目录下创建一个用于接受邮件的文件。
因为发行版本的不同这些都可能不同
倒数第二个值,useradd命令允许管理员创建一份默认的HOME目录配置,然后作为新用户创建的家目录模板。
jayce@DESKTOP-JASQLDM:/bin$ ls -lah /etc/skel
total 20K
drwxr-xr-x 2 root root 4.0K Aug 5 05:40 .
drwxr-xr-x 92 root root 4.0K Oct 8 07:21 ..
-rw-r--r-- 1 root root 220 Feb 25 2020 .bash_logout
-rw-r--r-- 1 root root 3.7K Feb 25 2020 .bashrc
-rw-r--r-- 1 root root 807 Feb 25 2020 .profile
第六章说过了, 这些文件,是bash shell 环境的标准启动文件。
##测试,使用默认参数创建一个新用户账户,检查HOME目录
root@DESKTOP-JASQLDM:~# useradd -m test
root@DESKTOP-JASQLDM:~# ls -lah /home/test
total 20K
drwxr-xr-x 2 test test 4.0K Oct 10 07:39 .
drwxr-xr-x 5 root root 4.0K Oct 10 07:39 ..
-rw-r--r-- 1 test test 220 Feb 25 2020 .bash_logout
-rw-r--r-- 1 test test 3.7K Feb 25 2020 .bashrc
-rw-r--r-- 1 test test 807 Feb 25 2020 .profile
root@DESKTOP-JASQLDM:~#
useradd -m 选项,是“创建用户家目录”。
参数 | 描述 |
---|---|
-c comment | 给新用户添加备注 |
-d home_dir | 为主目录指定一个名字(如果不指定,就会和登录名一致) |
-e expire_date | 用YYYY-MM-DD格式指定一个账户过期的日期 |
-f inactive_days | 指定这个账户密码过期后多少天这个账户被禁用;0表示密码一过期就立即禁用,1表示禁用这个功能 |
-g initial_group | 指定用户登录组的GID或者组名 |
-G group ... | 指定用户除了登陆组之外所属的一个或者多个附加组 |
-k | 必须和-m一起使用,将/etc/skel目录的内容复制到用户的HOME目录 |
-m | 创建用户的HOME目录 |
-M | 不创建用户的HOME目录(当默认设置里要求创建时,才会使用这个选项) |
-n | 创建一个与用户登录名同名的新组 |
-r | 创建系统账户 |
-p passwd | 为用户账户指定默认密码 |
-s shell | 指定默认的登录shell |
-u uid | 对账户指定唯一的UID |
在创建新用户的时候,使用命令行参数可以更改系统指定的默认值。但是如果总是需要修改某个值的话,最好还是修改一下系统的默认值配置
可以在 -D
选项后跟上一个指定的值,来修改系统默认的新用户设置。
参数 | 描述 |
---|---|
-b default_home | 更改默认的创建用户HOME目录的位置 |
-e expiration_date | 更改默认的新账户的过期日期 |
-f inactive | 更改默认的新用户从密码过期到账户被禁用的天数 |
-g group | 更改默认的组名称或者GID |
-s shell | 更改默认的登录shell |
##示例修改新用户默认的登录shell
root@DESKTOP-JASQLDM:/bin# useradd -D -s /bin/bash
root@DESKTOP-JASQLDM:/bin# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no
7.1.4 删除用户 userdel
usesdel
命令用于从系统中删除用户,但是,默认情况下,保险起见,userdel
命令只会删除/etc/passwd 文件中的用户信息, 而不会删除系统中属于该账户的任何文件。
如果,加上 -r
参数, userdel
命令会删除用户的HOME目录以及邮件目录。 然而,系统上仍然可能存在已删除用户的其他文件。 这在有些环境中会造成问题。
##用户删除示例
root@DESKTOP-JASQLDM:/bin# userdel -r test
userdel: test mail spool (/var/mail/test) not found
root@DESKTOP-JASQLDM:/bin# ls -al /home/test
ls: cannot access '/home/test': No such file or directory
7.1.5 修改用户
Linux提供了一些不同的工具来修改已经有用户账户的信息。
命令 | 描述 |
---|---|
usermod | 修改用户账户的字段,还可以指定主要组以及附加组的所属关系 |
passwd | 修改已有用户的密码 |
chpasswd | 从文件中读取登录名密码对,并更新密码 |
chage | 修改密码的过期日期 |
chfn | 修改用户账户的备注信息 |
chsh | 修改用户账户的默认登录shell |
1. usermod
该命令是用户账户修改工具中最强大的一个。 更用于修改 /etc/passwd文件中的大部分字段,著需要与想修改的字段对应的命令行参数就可以了。 参数大部分和useradd
命令的参数一样(-c
修改备注、-e
修改过期日期,更多见手册)。
此外,该命令还有一些可能派上用场的选项
-
-l
修改用户账户的登录名。 -
-L
锁定账户,使用户无法登录 -
-p
修改账户的密码 -
-U
解除锁定,使用户能够登录。-L
、-U
选项是比较常用的选项
2. passwd 和 chpasswd
Linux系统上的任何用户都能改自己的密码。但是,只有root用户才有权限改别人的密码。
passwd username
-e
选项能强制用户下次登录的时候,修改密码。 可以先给用户设置一个简单的默认密码。然后用户自己下次登录的时候,就会被强制要求修改密码。
为系统中大量的用户修改密码,chpasswd
命令可以事半功倍。
chpasswd
命令能从标准输入自动读取登录名和密码对(由冒号分割)列表。给密码加密,然后为用户账户设置。 你也可以用重定向命令来将含有userid:passwd 对的文件重定向给该命令。
chapasswd < users.txt
3. chsh、chfn 和 chage
这三个工具专门用来修改特定的账户信息。
chsh
命令用于快速修改默认的用户登录shell。 使用时,必须用shell的全路径作为参数,不能只用shell名。
chsh -s /bin/csh username
finger username
标签:,,,,,,,, 来源: https://www.cnblogs.com/jaycethanks/p/14166250.html
内容总结
以上是互联网集市为您收集整理的理解Linux文件权限全部内容,希望文章能够帮你解决理解Linux文件权限所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。