用户与组和权限管理

来源:互联网 发布:dnf优化不卡补丁2017 编辑:程序博客网 时间:2024/05/29 14:59

用户、组、权限

一、用户与组
系统识别用户的权限不是取决于用户的名字,而是UID(组同样取决于GID)。
UID=0的用户为系统超级管理员。
1-999为系统程序用户(centos6中1-499)。
1000+之后都是普通用户(6中为500+)。
通过UID和GID的不同,每个用户和组的权限也不一样。每个用户必须有一个主组,还可以拥有多个辅助组。

问题一:当系统超级用户被删除(root的UID被改为1000+)系统宕机如何恢复。
系统重启,按住向上键,屏幕下方选项 ‘a’ 或者‘e’键(非救援模式)。 CentOS6 在最后一行后面 跟上 init=/bin/sh 然后回车 输入

    #mount –o rw,remount /     #nano /etc/passwd

将root的UID改回为0即可。 CentOS7中 在开头为Linux16 的那一段最后面加上 selinux=0 init=/bin/sh 后面操作同上。

二、用户与组的主要配置文件

/etc/passwd:用户及其属性信息 文件格式name:password:UID:GID:GECOS:directory:shell
/etc/group 组及其属性信息
/etc/shadow 用户密码及其相关属性
etc/gshadow 组密码及其相关属性 因为系统安全的缘故,以前密码都是在passwd里的。现在分到shadow文件里了。 可以用pwunconv 命令将密码还原回passwd文件中(不建议使用,为了系统安全)。 现在的密码都是用sha512加密的,也可以修改加密算法:
authconfig –passalgo=sha256 –update
将密码修改为256位加密。
问题二:随机设计一个30位的密码
]# openssl rand –base64 30 8co+TVhe2detV1NozQxQa1XCWyTs+1WdcUGMbL4n(选取前30位即可)
密码的复杂性策略: 使用数字、大小写字母及特殊字符中的至少3种 足够长
使用随机密码 定期更换,不要使用最近曾经使用过的密码

三、用户与组的管理命令

1 . useradd 创建用户

-u UID 指定用户的UID
-o 配合-u 指定用户的UID 并不检查UID的唯一性
-g 指定用户的所属主组,可为组名,也可以是GID 必须是已存在的。 -c 给用户添加注释信息 “ ”
-d 给用户指定家目录的路径
-s 设置用户的默认的shell程序
-G 为用户知名辅助组,组必须事先存在
-N 不创建使用组为主组,使用users组做主组
-r 创建系统用户 UID 范围在系统用户里选择
-m 强制创建家目录用于系统用户 (单单创建系统用户不会生成家目录) -M 强制不创建家目录 用于非系统用户
-D 显示或更改默认设置 -s SHELL –b BASE_DIR -g GROUP
命令所在目录 /etc/default/useradd

问题三:创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息…,创建名字为admins 的组,创建用户natasha ,使用admins 作为附属组,创建用户harry ,也使用admins 作为附属组,创建用户sarah ,不可交互登录系统,且不是admins 的成员,,设置natasha ,harry ,sarah 密码都是centos

useradd -c "Gentoo Distribution" -G bin,root -s /bin/csh gentoo groupadd admins useradd -G admins natasha useradd -G admins harry useradd -s /sbin/nologin sarah echo centos |passwd --stdin natashaecho centos |passwd --stdin harry echo centos |passwd --stdin sarah 

用户家目录里的数据源 /etc/skel/*
如果用户家目录被删除了可以用cp -r /etc/skel /home/username 恢复初始数据
/etc/login.defs 用户创建时给用户加上的初始属性文档(UID、SUID、email路径、密码的加密机制和日期属性)
批量创建用户可以使用 newusers user.txt (注意文件格式要和passwd中一样)这样可以批量创建文件中的用户 cat passwd.txt |chpasswd

2 . 用户属性修改命令 usermod

-u 修改UID
-g 修改所属主组
-G 新增的附加组 覆盖原有附加组,用-a 选项可以保留原有附加组
-s 修改默认SHELL
-d 修改新的家,不会自动创建新的家目录,使用-m 可以创建新的家并且移动原数据
-c 新的注释信息
-l 修改用户名字
-L 指定用户在密码栏添加! 等同于 /sbin/nologin -U 指定用户在密码栏去掉!
-e y-m-d指定用户账户有效期,到期账户失效
-f密码过期后密码失效缓冲期
chage 可以修改口令的一些时间设置

口令时间格式: 17485:3:42:7:10:设定账户有效期:

17485变为0 ,口令及时失效,需要修改密码,他记录的创建时间距离1970年一月一日总共多少天。
:::3天内不可以改口令,:::3天到42天可以 改口令,最大有效期42天
:::10天之内还可以改口令,10天结束之后口令失效,账户无法登陆了 。
:::设定账户有效期y-m-d: ::

chage 帮助文档 chage [options] LOGIN

-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M:密码保持有效的最大天数。
-w:用户密码到期前,提前收到警告信息的天数。
-E:帐号到期的日期。过了这天,此帐号将不可用。
-d:上一次更改的日期。
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
示例: chage -d 0 tom 下一次登录强制重设密码
chage -m 0 –M 42 –W 14 –I 7 tom
chage -E 2016-09-10 tom

3 . userdel删除用户

-r删除用户家目录(清除干净)
vipw 直接打开 passwd文件 拥有文件检查功能 改动语法错误 可以检查出来
vigr 直接打开group 文件 功能同上 pwck 检查用户账号 发现问题和检查语法 grpck 检查组账号 发现问题和检查语法

4 . groupadd 创建组

-g 指定组号GID
-r 创建系统的组

5 . groupmod 组属性修改

-n 修改为新的名字

6 . groupdel 删除组

7 . id 显示指定用户的ID信息

-u 显示UID
-g 显示GID
-G 显示用户所属组的ID
-n 显示名称

8 . su 切换用户

su userName 不完全切换,切换用户不改变当前目录
su - UserName 完全切换,切换至用户的家目录 root用户切换至其他用户不需要密码,其他用户切换时,都需要密码。
su UserName -c ‘COMMAND’ 换个用户执行一条命令

9 . passwd UserName 修改指定用户的密码(仅root用户权限)

passwd 修改自己的密码
-l 锁定指定用户
-u 解锁用户
-e 强制用户下次登录修改密码
-n 指定最短使用期限
-x 最大使用期限
-w warndays 提前多少天开始警告
-i inactivedays 非活动期限
–stdin 从标准输入接收用户密码 echo password | passwd --stdin arno

10 . gpasswd 组密码

-a user 将user 添加至指定组中
-d 从指定组中删除指定用户
-A 设置有管理权限的用户列表

11 . groupmems 更改和查看组成员

-g 更改为指定组(只有root)
-a 指定用户加入组
-d 从组中删除用户
-p 从组中清除所有成员

12 . 相关命令

groups 查看用户所属组列表
newgrp 临时切换主组(如果用户不属于此组,则需要组密码)
chfn 指定书写个人信息
chsh 指定更改用户
shell finger 查看指定用户的信息

四、 文件权限管理 文件属性
drwxr-xr-x. 4 root root 4096 Nov 14 11:47 app
r read 读取文件 (列出目录文件)
w write 写权限 (可以在目录中修改创建或删除文件 需要x 权限)
x excute 执行权限 (目录基本权限,只有执行权限才能有其他操作)

1 . chown root用户 更改文件的所属用户

chown OWNER:GROUP (:group 命令中的冒号可用 . 替换)
-R 递归 (– reference == f1 f2 引用f1的属性 来设置 f2的属性)

2 . chmod 修改文件权限

chmod who opt per filename
who :u,g,o,a 用户
opt :+,-,= 增加 减去 覆盖
per:r,w,x
-R 递归文件夹内的所有文件属性
+ X 只给目录x权限,不给文件
u+s 给文件加s的权限,让该文件可以让所有用户继承文件所有者的所有权限
g+s 让所有用户在该文件夹下创建文件默认组为该文件夹所属组
o+t 加 t的权限,只能作用在目录文件上,让该目录下的文件只有文件拥有者才能删除自己的文件。
–reference f1 f2 参考 f1权限 设置f2权限

3 . chgrp root 用户更改文件的所属组(如果普通用户在该组里,也可以更改)

4 . umask 可以用来保留在创建文件权限

新建文件夹的权限值为 777-mask(如果是文件 默认不能拥有执行权限) 操作示例: 误删除了用户arno 的家目录,请重建并恢复该用户家目录及相应的权限属性
cp -R /etc/skel /home/arno
chown arno:arno /home/arno

五、文件系统上的特殊权限

1 . SUID

SUID只作用在二进制程序上,不能作用在文本的脚步上
SUID将执行该程序的用户,会继承程序拥有者的所有权限 chmod u+s FileName

2 . SGID

SGID 作用在二进制程序上,执行sgid权限的程序时,此用户将继承程序所属组权限 SGID可以让文件夹下的新建文件默认归属于文件夹的组。

3 . sticky 粘滞位

只能作用在目录上 具有sticky权限的目录下,普通用户只能删除自己的文件

4 . 小工具

chattr +i FileName 文件不能修改 (+a 只能追加)
+A 不更新 Access查看的时间不更新
lsattr +i FlieName 查看 chattr 更改的 特殊属性

六、访问控制列表ACL

CentOS7 之前版本,默认手工创建的ext4 文件系统无ACL功能, 需手动增加 tune2fs –o acl /dev/sdb1 mount –o acl /dev/sdb1 /mnt/test
ACL生效顺序: owner ,users , groups , other

1 . getfacl 查看ACL列表

getfacl FILE (DIR) 其中的mask值 是设置最高 ACL列表的权限(除了拥有者和其他人不能限制)

2 . setfacl 设置访问列表

-m (-M)选项修改文件或目录的acl (M是用文件导入ac l权限)
-b 清空文件或目录的acl
对所属组设置 setfacl -m group (g): :rwx FileName
-x u: arno 在acl列表删除用户arno -R 设置acl 属性 递归到目录下的所有新建文件
-k DIR 删除默认权限 目录上的
setfacl -R –m d:apache:rw /app/html(d 的含义是默认)让这个目录下的所有文件默认有Apache 的ACL权限
getfacl f1 | setfacl --set-file =- f2 复制f1的ACL权限给f2
–set 删除原的ACL 权限 ,然后用新的权限覆盖。 -m是修改
setfacl --set u::rw,u:wang:rw,g::r,o::- file1

3 . 备份和恢复ACL

主要的文件操作命令cp 和mv 都支持ACL ,只是cp 命令需要加上-p 参数。但是tar 等常见的备份工具是不会保留目录和文件的ACL 信息
相对路径,只能在目录路径下执行
getfacl -R /tmp/dir1 > acl.txt 备份 目录 和该目录下的所有ACL权限
setfacl -R -b /tmp/dir1 清除所有 setfacl -R --set-file=acl.txt /tmp/dir1 还原备份
setfacl --restore acl.txt 还原备份
getfacl -R /tmp/dir1 查看目录 和目录下的所有文件

ACL权限 操作示例:

1.在/testdir/dir 里创建的新文件自动属于g1 组,组g2 的成员如:alice 能对这些新文件有读写权限,组g3的成员如:tom 只能对新文件有读权限,其它用户(不属于g1,g2,g3 )不能访问这个文件夹。

chown :g1 /testdir/dir chmod g+s /testdir/dir setfacl -m d:g:g2:rw /testdir/dir setfacl -m d:g:g3:r /testdir/dir chmod o=- /testdir/dir 

2.备份/testdir/dir 里所有文件的ACL 权限到/root/acl.txt 中,清除/testdir/dir 中所有ACL 权限,最后还原ACL 权限

getfacl –R ../dir > acl.xt etfacl –b /testdir/dir setfacl --restore acl.txt