一、用户及用户组的管理
1. useradd [选项] 用户名
用于创建新的用户。
参数 作用
-d 指定用户的家目录(默认为/home/username)
-e 账户的到期时间,格式为YYYY-MM-DD.
-u 指定该用户的默认UID
-g 指定一个初始的用户基本组(必须已存在)
-G 指定一个或多个扩展用户组
-N 不创建与用户同名的基本用户组
-s 指定该用户的默认Shell 解释器
例1:增加用户user1,不加参数,用户默认创建后通过“id 用户名”查看真实有效的用户ID(UID)和组ID(GID), UID 是对一个用户的单一身份标识。组ID(GID)则可以对应一个或多个UID。
[root@linux~]# adduser user1
[root@linux~]# id user1
uid=1001(user1) gid=1001(user1) groups=1001(user1)
例2:
创建一个普通用户user2并指定其home目录的路径、用户的UID 以及Shell 解释器.
注意:终端解释器设置为/sbin/nologin,表示该用户不能登录到系统中
[root@linux~]# useradd -d /home/user2home -u 8888 -s /sbin/nologin user2
[root@linux~]# id user2
uid=8888(user2) gid=8888(user2) groups=8888(user2)
2. groupadd [选项] 组名
用于创建用户组,通常一个组里面有多个用户,便于针对一类用户统一安排权限。
例1.创建技术人员组jsryz
[root@linux~]# groupadd jsryz
可以通过查看/etc/group文件 查看所有用户组
[root@linux~]# cat /etc/group
…(略)…
user1:x:1001:
user2:x:8888:
jsryz:x:8889:
3. usermod [选项] 用户名
Linux 系统中的一切都是文件,创建用户也就是修改配置文件(/etc/passwd)的过程。
可以用usermod 命令修改已经创建的用户信息,用户信息包括诸如用户的UID、基本/扩展用户组、默认终端等,也可以直接用文本编辑器来修改其中的用户参数项目。
例1. 将用户user1加入到jsryz用户组中,这样扩展组列表中则会出现jsryz用户组的字样,而基本组1001(user1)不会受到影响.
[root@linux~]# id user1
uid=1001(user1) gid=1001(user1) groups=1001(user1)
[root@linux~]# usermod -G jsryz user1
[root@linux~]# id user1
uid=1001(user1) gid=1001(user1) groups=1001(user1),8889(jsryz)
4. passwd [选项] [用户名]
修改用户密码
5. userdel [选项] 用户名
删除用户
参数 作用
-f 强制删除用户
-r 同时删除用户及用户家目录
[root@linux~]# useradd -d /home/user3home -u 9999 -s /sbin/nologin user3
[root@linux~]# userdel user1
[root@linux~]# userdel -f user2
[root@linux~]# userdel -r user3
二、文件权限与归属
1文件符号类型对应关系
-:普通文件。
d:目录文件。
l:链接文件。
b:块设备文件。
c:字符设备文件。
p:管道文件。
2权限
三、文件的特殊权限
单纯设置文件的rwx 权限无法满足我们对安全和灵活性的需求,因此便有了SUID、SGID 与SBIT 的特殊权限位。
1. SUID
例如:存储 Linux 系统中用户的密码信息的/etc/shadow 文件,只有 root 用户拥有对它的读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。
[root@linuxhome]# ls -l /etc/shadow
----------. 1 root root 1154 Mar 4 14:42 /etc/shadow
由此可知上述文件的默认权限是000,也就是说除了root 管理员以外,所有用户都没有查看或编辑该文件的权限。
root用户查看此文件,发现linuxprobe用户的密码信息如下:
linuxprobe:$6$TImw0SXf$N2mlQazZTiYHLx1hbsSezXDJ5XppDEBVelozVE79434dHhC066qFUuKg1vl8l0W0FTACVTwa10ptyEj4k.Ct30:18315:0:99999:7:::
通过命令su切换用户为linuxprobe用户,用户没有查看shadow的权限
[linuxprobe@linux~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
然后通过命令passwd修改密码后,再切回用户root,再次查看文件shadow后发现
linuxprobe:$6$28AsHxFb$VAfzFsV49.RT.Aa5h9xpHacchWop9rV/15YLGJp0A21PWG19MWtLMNWsW.i08TzKhLJAPDTLMsPOD2SqijkFT1:18325:0:99999:7:::
由此可以判断用户linuxprobe在修改密码时修改了此文件关于自己的密码信息。
通过whereis命令查看passwd
[root@linux~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
[root@linux~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jan 30 2014 /usr/bin/passwd
说明用户linuxprobe在执行passwd命令时会临时获得root权限
它的默认权限是000,也就是说除了root 管理员以外,所有用户都没有查看或编辑该文件的
权限。但是,在使用passwd 命令时如果加上SUID 特殊权限位,就可让普通用户临时获得程
序所有者的身份,把变更的密码信息写入到shadow 文件中
2.SGID
让目录内新建文件的所有组,将会继承原目录的所有组
chmod +权限 文件
chmod -权限 文件
chown 属性
SUID u+s
SGID g+s
SBIT o+t
例:
[root@linux~]# cd /home
[root@linuxhome]# mkdir haha
[root@linuxhome]# ls -dl haha
drwxr-xr-x. 2 root root 6 Mar 4 16:59 haha
[root@linuxhome]# chmod -R g+s haha
[root@linuxhome]# ls -dl haha
drwxr-sr-x. 2 root root 6 Mar 4 16:59 haha
由此可知此目录haha拥有了SGID权限,且此目录的所有组为root,其它用户如果在此目录中新建文件 ,则文件所有主为其它用户,但所有组将会是root.
下面执行实验,切换至linuxprobe用户
[root@linuxhome]# chmod -R 777 haha
[root@linuxhome]# su - linuxprobe
[linuxprobe@linux~]$ touch newfile
[linuxprobe@linux~]$ ls -l newfile
-rw-rw-r--. 1 linuxlinux0 Mar 4 17:11 newfile
[linuxprobe@linux~]$ cd /home/haha
[linuxprobe@linuxhaha]$ touch newfile
linuxprobe@linuxhaha]$ ls -l newfile
-rw-rw-r--. 1 linuxroot 0 Mar 4 17:23 newfile
3.SBIT
保护位 粘滞位
保护自己的文件不被别人所删除
例如:上个练习中的haha目录中linuxprobe用户新建了文件newfile,用户user1新建了2个文件test2和usertxt.txt,
[linuxprobe@linuxhaha]$ ls -l
-rw-rw-r--. 1 linuxroot 0 Mar 4 17:23 newfile
-rw-rw-r--. 1 user1 root 0 Mar 5 10:46 test2.txt
-rw-rw-r--. 1 user1 root 0 Mar 5 10:45 usertxt.txt
如果不设置粘滞位,用户linuxprobe是完全可能删除(或误删除)user1的文件的,例如linuxprobe删除了user1的test2.txt文件
[linuxprobe@linuxhaha]$ rm -rf test2.txt
[linuxprobe@linuxhaha]$ ls
newfile usertxt.txt
所以,此时root用户需要进行如下设置
[root@linux~]# ls -l /home/haha
total 0
-rw-rw-r--. 1 linuxroot 0 Mar 4 17:23 newfile
-rw-rw-r--. 1 user1 root 0 Mar 5 10:45 usertxt.txt
[root@linux~]# ls -l /home/haha
total 0
-rw-rw-r--. 1 linuxroot 0 Mar 4 17:23 newfile
-rw-rw-r--. 1 user1 root 0 Mar 5 10:45 usertxt.txt
[root@linux~]# chmod -R o+t /home/haha
[root@linux~]# ls -l /home/haha
total 0
-rw-rw-r-T. 1 linuxroot 0 Mar 4 17:23 newfile
-rw-rw-r-T. 1 user1 root 0 Mar 5 10:45 usertxt.txt
此后,用户linuxprobe再也无法删除(或误删除)user1的文件
试验如下:
[linuxprobe@linuxhaha]$ rm -rf usertxt.txt
rm: cannot remove ‘usertxt.txt’: Operation not permitted
同理,usre1用户也无法删除其它用户的文件
[user1@linuxhaha]$ rm -rf newfile
rm: cannot remove ‘newfile’: Operation not permitted
四、文件的隐藏属性
1. chattr [参数] 文件
用于设置文件的隐藏权限
例如:创建6个文件
[root@linux~]# echo "hellow" > file
[root@linux~]# echo "hellow" > file1
[root@linux~]# echo "hellow" > file2
[root@linux~]# echo "hellow" > file3
[root@linux~]# echo "hellow" > file4
[root@linux~]# echo "hellow" > file5
将file1设置为无法删除文件,仅能修改其中文件的内容。
[root@linux~]# ls -l file1
-rw-r--r--. 1 root root 7 Mar 5 11:37 file1
[root@linux~]# chattr +i file1
[root@linux~]# ls -l file1
-rw-r--r--. 1 root root 7 Mar 5 11:37 file1
增加隐藏属性后,查看文件属性没有任何变化,但是文件file1已经无法删除了,而file却可以
[root@linux~]# rm -rf file
[root@linux~]# rm -rf file1
rm: cannot remove ‘file1’: Operation not permitted
设置file2文件为+a属性“仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)”
[root@linux~]# chattr +a file2
[root@linux~]# vim file2
试着修改内容后,无法保存,只得放弃
[root@linux~]# echo "world" >> file2
[root@linux~]# echo "world" >> file2
[root@linux~]# cat file2
hellow
world
2. lsattr [参数] 文件
用于显示文件的隐藏权限
[root@linux~]# lsattr file*
----i----------- file1
-----a---------- file2
五、文件的隐藏属性
1. setfacl [参数] 文件名称”
管理文件的ACL 规则。
setfacl 命令可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。其中,针对目录文件需要使用-R 递归参数;针对普通文件则使用-m 参数;如果想要删除某个文件的ACL,则可以使用-b 参数。
例如:普通用户linux无法访问root用户的/root目录
[root@linux~]# su - linux
[linux@linux~]$ cd /root
-bash: cd: /root: Permission denied
使用root用户设置
[root@linux~]# setfacl -Rm u:linux:wrx /root
[root@linux~]# su - linux
[linux@linux~]$ cd /root
2. getfacl 文件名称
查看root用户的/root目录
[root@linux~]# 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 命令与sudo 服务
1. su命令
切换用户身份
su user
su - user 表示完全身份变更,包括环境变量
2. sudo 服务
sudo 命令把root的特定命令的执行权限赋予给指定用户,这样既可保证普通用户能够完成特定的工作,也可以避免泄露root 管理员密码。
让普通用户临时拥有root指定权限有2种sudo服务方法,例如让普通用户可以reboot
方法1:编辑 /etc/sudoers
方法2:visudo
修改/etc/sudoers
97 ## Allow root to run any commands anywhere
98 root ALL=(ALL) ALL
99 linux ALL=(ALL) /usr/sbin/reboot
说明:
上面的第一个ALL可以设置为来访IP,第二个(ALL)可以为(root)
reboot命令必须是全路径,不知道的话可以通过whereis reboot查询获得
[root@linux~]# vim /etc/sudoers
[root@linux~]# vim /etc/sudoers
[root@linux~]# su - linux
[linux@linux~]$ reboot
执行失败
[linux@linux~]$ sudo reboot
提示输入linux用户的密码