用户身份与能力
- 管理员UID为0:系统的管理员用户
- 系统用户UID为1~999:Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围
- 普通用户UID从1000开始:由管理员创建的用于日常工作的用户
useradd
创建新的用户
参数 | 作用 |
---|---|
-d | 指定用户的家目录(默认为/home/username) |
-e | 账户的到期时间,格式为YYYY-MM-DD |
-u | 指定该用户的默认UID |
-g | 指定一个出事的用户基本组(必须已存在) |
-G | 指定一个活多个扩展用户组 |
-N | 不创建与用户同名的基本用户组 |
-s | 指定该用户的默认Shell解释器 |
# useradd -d /home/linux -u 8888 -s /sbin/nologin linux
groupadd
创建用户组
# groupadd linux
usermod
修改用户属性
参数 | 作用 |
---|---|
-c | 填写用户账户的备注信息 |
-d -m | 参数-m与参数-d连用,可重新制定用户的家目录,并自动把旧的数据迁移过去 |
-e | 账户到期时间,格式为YYYY-MM-DD |
-g | 变更所属用户组 |
-G | 变更扩展用户组 |
-L | 锁定用户禁止其登录系统 |
-U | 解锁用户,允许登录系统 |
-s | 变更默认终端 |
-u | 修改用户的UID |
# usermod -u 8888 linux
passwd
修改用户密码、过期时间、认证信息等
参数 | 作用 | |
---|---|---|
-l | 锁定用户,禁止登陆 | |
-u | 解除锁定,允许登录 | |
--stdin | 允许通过标准输入修改用户密码,如:echo “123” | passwd --stdinUsername |
-d | 使该用户可用密码登录系统 | |
-e | 强制该用户在下次登录时修改密码 | |
-S | 显示用户的密码是否被锁定,以及密码所采用的加密算法名称 |
# passwd linux
略
userdel
删除用户
参数 | 作用 |
---|---|
-f | 强制删除用户 |
-r | 同时删除用户及用户家目录 |
# userdel -r linux
文件权限与归属
- -: 普通文件
- d: 目录文件
- l: 链接文件
- b: 块设备文件
- c: 字符设备文件
- p: 管道文件
字符表示略
文件的特殊权限
SUID
可以让二进制程序的执行者,临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)
# ls -l /bin/passwd
-rwsr-xr-x. ...etc
SGID
让执行者临时拥有属组的权限
在某个目录中创建的文件自动继承挂目录的用户组
设置好目录的777权限,保证普通用户可以写入文件,设置好SGID特殊权限位后,切换至一个普通用户,然后尝试在该目录中创建文件,并查看新创建的文件是否会继承所在目录的所属组名称
# mkdir testdir
# ls -ald testdir/
drwxr-xr-x. 2 root root etc...
# chmod -Rf 777 testdir/
# chmod -Rf g+s testdir/
# ls -ald testdir/
drwxrwsrwx. 2 root root etc...
# su linux
$ cd /testdir/
$ echo "test" > test
$ ls -al test
-rw-rw-r--. linux root etc...
SBIT
带有此权限的目录,只有该目录的所有者,否则无法删除这里面的文件
$ ls -ald /temp
drwxrwxrwt. 17 root root etc...
$ cd /tep
$ ls -ald
drwxrwxrwt. 17 root root etc...
$ echo "test" > test
$ chmod 777 test
$ ls -al test
-rwxrwxrwx. 1 linux linux etc...
$ su - otherLinux
$ cd /tmp
$ rm -f test
rm: cannot remove `test`: Operation not permitted
文件的隐藏属性
chattr
设置文件的隐藏权限
参数 | 作用 |
---|---|
i | 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能信件或删除文件 |
a | 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only) |
S | 文件内容在变更后立即同步到硬盘(sync) |
s | 彻底从硬盘中删除,不可恢复(用0填充源文件所在硬盘区域) |
A | 不在修改这个文件或目录的最后访问时间(atime) |
b | 不在修改文件或目录的存取时间 |
D | 检查压缩文件中的错误 |
d | 使用dump命令备份时葫芦哦本文件/目录 |
c | 默认将文件或目录进行压缩 |
u | 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复 |
t | 让文件系统支持首尾合并(tail-merging) |
X | 可以直接访问压缩文件中的内容 |
# echo "test" > test
# chattr +a test
# rm test
rm: remove regular file `test`y
rm: cannot remove `test`: Operation not permitted
lsattr
查看文件的隐藏权限
# lsattr test
-----a---------- test
# chattr -a test
# lsattr test
---------------- test
文件访问控制列表
对某个指定的用户金鼎单独的权限限制(ACL)
# su linux
$ cd /root
-bash: cd: /root: Permission denied
setfacl
管理文件的ACL规则
设置过ACL的文件权限的最后一个点会变成+,使用-b可以删除某个文件的ACL
# setfacl -Rm u:linux:rwx /root
# su linux
$ cd /root
$ ls
etc...
$ exit
# ls -ld /root
dr-xrwx---+ 14 root root etc...
getfacl
显示文件上设置的ACL信息
# getfacl /root
getfacl: Removing leading '/' from absolute path names
# file: root
# owner: root
# group: root
user::r-x
user:linux:rwx
group::r-x
mask::rwx
other::---
su
切换用户身份
如果在su后面添加一个减号(-),意味着完全切换用户,即把环境变量信息也变更为新用户的相应信息
# su - linux
$ su root
Password:
sudo
给普通用户提供额外的权限来完成原本root管理员才能完成的任务
参数 | 作用 |
---|---|
-h | 列出帮助信息 |
-l | 列出当前用户可执行的命令 |
-u 用户名或UID值 | 以指定的用户身份执行命令 |
-k | 清空密码的有效时间,下次执行sudo时需要再次进行密码验证 |
-b | 在后台执行指定的命令 |
-p | 更改询问密码的提示语 |
将linux用户赋予root权限,这时如果切换用户再使用sudo命令,需要填写的是linux用户的密码
# visudo
98 root ALL=(ALL) ALL
99 linux ALL=(ALL) ALL
上面的做法并不安全,我们并不想要赋予linux用户所有的权限,如果想让linux用户可以使用某一个权限可以参考下面的配置,做完后可以用sudo cat 去查看之前权限查看不了的内容
# visudo
98 root ALL=(ALL) ALL
99 linux ALL=(ALL) /usr/bin/cat
下面的设置可以让我们在使用sudo命令时,不需要输入密码,这样会减少密码被黑客破译的几率
# visudo
98 root ALL=(ALL) ALL
99 linux ALL=NOPASSWD: /usr/sbin/poweroff