Lesson 006 —— Linux 用户与权限
useradd username
添加用户
Linux 系统中,所有用户(包括系统管理员)的账号和密码都可以在 /etc/passwd 和 /etc/shadow 这两个文件中找到,(用户和密码就放在文件中,/etc/passwd 只有系统管理员才可以修改的,其他用户可以查看,/etc/shadow 其他用户看不了)。中passwd保存的是账号,shadow保存的是账号的密码等信息。
/etc/passwd 文件
/etc/passwd文件是Linux/UNIX安全的关键文件之一.该文件用于用户登录时校验 用户的口令,当然应当仅对root可写.部分内容如下:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
上面每一行都代表一个用户,每一行又通过[:]分为七个部分。其格式和具体含义如下:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
LOGNAME:PASSWORD:UID:GID:USERINFO:HOME:SHELL
1. 用户名(login_name):是代表用户账号的字符串。通常长度不超过8个字符,并且由大小写字母和/或数字组成。登录名中不能有冒号(:),因为冒号在这里是分隔符。为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。
2. 口令(passwd):一些系统中,存放着加密后的用户口令字。虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。
3. 用户标识号(UID):是一个整数,系统内部用它来标识用户。一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。取值范围是0-65535。0是超级用户root的标识号,1-99由系统保留,作为管理账号,普通用户的标识号从100开始。在Linux系统中,这个界限是500。
4. 组标识号(GID):字段记录的是用户所属的用户组。它对应着/etc/group文件中的一条记录。
5. 注释性描述(users):字段记录着用户的一些个人情况,例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。在不同的Linux系统中,这个字段的格式并没有统一。在许多Linux系统中,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出。
6. 主目录(home_directory):也就是用户的起始工作目录,它是用户在登录到系统之后所处的目录。在大多数系统中,各用户的主目录都被组织在同一个特定的目录下,而用户主目录的名称就是该用户的登录名。各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则根据具体情况设置。
7. 登录Shell(Shell):用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。常用的有sh(BourneShell),csh(CShell),ksh(KornShell),tcsh(TENEX/TOPS-20typeCShell),bash(BourneAgainShell)等。系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh。
用户的登录Shell可以指定为某个特定的程序(此程序不是一个命令解释器)。利用这一特点,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。有些Linux系统要求只有那些在系统中登记了的程序才能出现在这个字段中。
/etc/shadow 文件
/etc/shadow文件格式与/etc/passwd文件格式类似,同样由若干个字段组成,字段之间用“:”隔开。
文件中字段主要含义为:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
1. “登录名”(username): 登录名
2. “口令”(password): 字段存放的是加密后的用户口令字:
1. 如果为空,则对应用户没有口令,登录时不需要口令;
2. 星号代表帐号被锁定;
3. 双叹号表示这个密码已经过期了;
4. $6$开头的,表明是用SHA-512加密;
5. $1$表明是用MD5加密;
6. $2$ 是用Blowfish加密;
7. $5$ 是用 SHA-256加密;
3. “最后一次修改时间”(last change): 表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样。例如在SCOLinux中,这个时间起点是1970年1月1日。
4. “最小时间间隔”(may): 指的是两次修改口令之间所需的最小天数(距上次改密多少天之后可以改密)。
5. “最大时间间隔”(must): 指的是口令保持有效的最大天数(距上次改密多少天之后必须改密,否则,密码过期)。
6. “警告时间”(warn): 字段表示的是从系统开始警告用户到用户密码正式失效之间的天数(密码过期过期之前提醒)。
7. “不活动时间”(expire): 表示的是用户没有登录活动但账号仍能保持有效的最大天数(密码过期之后,多少天之后禁用账号)。
8. “失效时间”(disabled): 字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了(账号禁用的日期,距离1970.1.1的天数)。
9. 标志: 保留(reversed)
-
shadow密码存储结构
密文字符串格式为:salt来分割,其中$id用来指定使用的算法,如下表格所示:
ID Method 1 MD5 2a Blowfish(not in mainline glibc;added in some Linux distribution) 5 SHA-256(since glibc 2.7) 6 SHA-512(since glibc 2.7)
/etc/group 文件
Linux /etc/group文件与/etc/passwd和/etc/shadow文件都是有关于系统管理员对用户和用户组管理时相关的文件。linux /etc/group文件是有关于系统管理员对用户和用户组管理的文件,linux用户组的所有信息都存放在/etc/group文件中。具有某种共同特征的用户集合起来就是用户组(Group)。用户组(Group)配置文件主要有 /etc/group和/etc/gshadow,其中/etc/gshadow是/etc/group的加密信息文件。
每个用户都属于某个用户组;一个组中可以有多个用户,一个用户也可以属于不 同的组。当一个用户同时是多个组中的成员时,在/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。
用户组的所有信息都存放在/etc/group文件中。此文件的格式是由冒号(:)隔开若干个字段,这些字段具体如下:
组名:口令:组标识号:组内用户列表
1. 组名: 组名是用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。
2. 口令: 口令字段存放的是用户组加密后的口令字。一般Linux系统的用户组都没有口令,即这个字段一般为空,或者是*。
3. 组标识号: 组标识号与用户标识号类似,也是一个整数,被系统内部用来标识组。别称GID.
4. 组内用户列表: 是属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。
/etc/gshadow 文件
/etc/gshadow是/etc/group的加密资讯文件,比如用户组(Group)管理密码就是存放在这个文件。/etc/gshadow和/etc/group是互补的两个文件。
/etc/gshadow 格式如下,每个用户组独占一行:
groupname:password:admin,admin,...:member,member,...
1. 用户组
2. 用户组密码,这个段可以是空的或!,如果是空的或有!,表示没有密码;
3. 用户组管理者,这个字段也可为空,如果有多个用户组管理者,用,号分割;
4. 组成员,如果有多个成员,用,号分割;
家目录与邮件
新建一个用户会在 /home 目录下创建一个家目录,同样会在 /var/spool/mail 目录下创建一个邮件账户。
一些用户操作命令
useradd
: 新添加用户
-c :添加全称(备注信息)
-p :设置密码,但是为了安全性,不进行设置
-s :指定shell,如果不指定默认使用/bin/bash
-d :指定家目录的位置,默认/home/vanilla
-u :指定uid , 200
-G :当创建vanilla用户之后,除了为用户创建vanilla组之外,还会加入togogo组,此时用户会属于两个组
-g togogo -G will: -g不会为vanilla创建私人组,只创建togogo组,加入togogo组,-G同时会加入wheel组
id
: 查看用户及组的信息
查看用户UID、GID和所属组:
id username
例:
[root@linux-01 ~]# id user1
uid=1000(user1) gid=1000(user1) groups=1000(user1) # groups;用户所加入的组
usermod
: 更改用户信息
改变用户的uid
usermod -u 111 username
改变用户的gid
usermod -g gid username
更改用户家目录
usermod -d /home/linux username
更改登录shell
usermod -s /sbin/nologin username
改变用户扩展组(会覆盖掉之前的扩展组)
usermod -G 扩展组名称 username
同时为用户user1添加两个扩展组
usermod -G 扩展组1,扩展组2 username
追加扩展组,不覆盖之前的扩展组
usermod -aG 扩展组名称 username
锁定用户
usermod -L username
解锁用户
usermod -U username
userdel
: 删除用户
userdel -r username
r 参数表示删除用户创建的家目录、邮件等文件。
例子:
userdel -r wood
passwd
: 更改密码
-n 设置密码更改的最短时间;0表示用户可以在任何时候更改它的密码。
-x 设置密码最大过期期限;99999表示用户密码一直有效。
-w 在 passwd 命令中用于设置用户的警告期限。这意味着,n天之后,他/她的密码将过期,即在过期前的几天提醒用户密码即将过期。
-i 设置非活动时间,当用户密码过期后,用户再经过 n天后没有更改其密码,用户将不能登录。
-S 查看用户密码的状态
-l 对账户的锁定
-u 对账户的解锁
groupadd
: 添加用户组
添加用户组
groupadd 组名
添加用户组,并指定组编号(gid)
groupadd -g 数字 组名
groupmod
: 修改用户组
修改群组的 GID
groupmod -g 数字 组名
修改群组名称
groupmod -n newname oldname
groupdel
: 删除群组
删除群组
groupdel 组名
权限信息
ls -l
显示的信息如下:
-rwxrw-r‐- 1 root root 1213 Feb 2 09:39 abc
权限信息 硬链接数 属主 属组 文件大小 文件创建日期 文件名
10个字符确定不同用户能对文件干什么:
* 第一个字符代表文件(-)、目录(d),链接(l),设备文件(b, block),管道道文(p)
* 其余字符每3个一组(rwx),读(r)、写(w)、执行(x)
* 第一组rwx:文件所有者的权限是读、写和执行(u)
* 第二组rw-:与文件所有者同一组的用户的权限是读、写但不能执行(g)
* 第三组r--:不与文件所有者同组的其他用户的权限是读不能写和执行(o)
也可用数字表示为:r=4,w=2,x=1 因此rwx=4+2+1=7
* 1 表示连接的文件数
* root 表示用户
* root表示用户所在的组
* 1213 表示文件大小(字节)
* Feb 2 09:39 表示最后修改日期
* abc 表示文件名
权限字母含义
r=4 可读
可以查看文件内容
可以列出目录中的内容
w=2 可写
可以修改文件内容
可以在目录中创建、删除文件
x=1 可执行
可以执行文件
可以进入目录
0 没有权限
权限操作命令
执行文件方法:
sh 文件路径
bash 文件路径
. 文件路径
./文件路径
chmod
: 改变文件或目录的权限
chmod [-cfvR] [--help] [--version] mode file...
参数 :
mode : 权限设定字串,格式如下 : [ugoa][[+-=][rwxX]][,...],其中
u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
-c : 若该档案权限确实已经更改,才显示其更改动作
-f : 若该档案权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本
chown
: 将指定文件的拥有者改为指定的用户或组
chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。 。
chown [-cfhvR] [--help] [--version] user[:group] file...
参数 :
user : 新的文件拥有者的使用者 ID
group : 新的文件拥有者的使用者组(group)
-c : 显示更改的部分的信息
-f : 忽略错误信息
-h :修复符号链接
-v : 显示详细的处理信息
-R : 处理指定目录以及其子目录下的所有文件
--help : 显示辅助说明
--version : 显示版本
chgrp
: 改变文件或目录所属的组。
chgrp [选项] group filename
参数:
-c或–changes 效果类似”-v”参数,但仅回报更改的部分。
-f或–quiet或–silent 不显示错误信息。
-h或–no-dereference 只对符号连接的文件作修改,而不更动其他任何相关文件。
-R或–recursive 递归处理,将指定目录下的所有文件及子目录一并处理。
-v或–verbose 显示指令执行过程。
–help 在线帮助。
–reference=<参考文件或目录> 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同。
–version 显示版本信息。
其它特殊权限
-
SetUID 权限
-
SetGID 权限
find / -perm -4000 -o -perm -2000 > setuid.list 命令find选项“-perm”为指定文件权限,SetUID权限位对应数字标识为4 ,SetGID权限位对应数字标识为2 ,后面写为“000”标识对所有者所属组其他人三类用户的权限不限制;“-o”表示or,就是文件具有SetUID或者具有SetGID都在搜索之列,生成的搜索结果存放在文件setuid.list中。
另外,如果在一些数据存放的分区想禁用SetUID功能,还可以做如下设置,编辑配置文件/etc/fstab ,找到要设置的分区(如/home)所对应的设置行:
vi /etc/fstab LABEL=/home /home ext3 defaults 1 2
在设置“defaults”后,添加“nosuid”选项,并重新挂载/home分区:
vi /etc/fstab LABEL=/home /home ext3 defaults,nosuid 1 2 mount -o remount /home
-
权限之粘着位
-
文件系统权限
-
权限之chattr
-
权限之ACL
-
权限之管理员授权
管理员root使用visudo命令即可编辑其配置文件/etc/sudoers进行授权,具体格式为:
用户名/用户组名 主机地址=授权命令(绝对路径) 指定组名用百分号标记,如%admgroup ,多个授权命令之间用逗号分隔。 如,授权用户zhaoliu可以关机和重启,则添加如下行: zhaoliu Helen=/sbin/shutdown,/sbin/reboot 用户zhaoliu可以使用sudo查看授权的命令列表: sudo -l Password: User zhaoliu may run the following commands on this host: (root) /sbin/shutdown (root) /sbin/reboot
网友评论