文章目录
  1. 1. Linux 用户及文件管理权限
    1. 1.1. Linux用户管理
      1. 1.1.1. 查看用户
      2. 1.1.2. 创建用户
        1. 1.1.2.1. su命令
    2. 1.2. 用户组
    3. 1.3. Linux文件权限
    4. 1.4. ls命令补充
    5. 1.5. 变更文件所有者
    6. 1.6. 修改文件权限

The Matrix-chose

2016-4-14周四
天阴,有小雨,湿漉
在线学习: 实验楼

Linux 用户及文件管理权限

Linux用户管理

Linux是一个可以实现多用户登入的操作系统,不同用户可以同时登入一台主机,共享一些主机的资源但他们分别有自己的用户空间,用于存放各自的文件。但实际上他们的文件都是放在同一个物理磁盘上的甚至同一个物理分区或者目录里,但是由于Linux的用户管理和权限机制,不同用户不可以轻查看、修改彼此的文件。

查看用户

who am i或者who mom likes

1
2
3
4
root@acer:~# who am i
takethat pts/0 2016-04-14 03:47 (192.168.190.1)
root@acer:~# who mom likes
takethat pts/0 2016-04-14 03:47 (192.168.190.1)

第二列的 pts/0 中 pts 表示伪终端,所谓伪是相对于 /dev/tty 设备而言的。

使用[Ctrl]+[Alt]+[F1]~[F7]进行切换的 /dev/tty 设备,这是真终端,伪终端就是当你在图形用户界面使用 /dev/tty7 时每打开一个终端就会产生一个伪终端, pts/0 后面那个数字就表示打开的伪终端序号。

输入的第一列表示打开当前伪终端的用户的用户名;

查看当前用户名:whoami

1
2
root@acer:~# whoami
root

who命令其它常用参数

参数 说明
-a 打印能打印的全部
-d 打印死掉的进程
-q 打印当前登入用户数及用户名
-u 打印当前登入用户登入信息
-r 打印运行等级

创建用户

在Linux系统里,root账户用户拥有最高权限;
root 权限,系统权限的一种,与SYSTEM 权限可以理解成一个概念,但高于 Administrator 权限,root 是 Linux 和 UNIX 系统中的超级管理员用户帐户,该帐户拥有整个系统至高无上的权力,所有对象他都可以操作,所以很多黑客在入侵系统的时候,都要把权限提升到 root 权限.

我们一般登录系统时都是以普通账户的身份登录的,要创建用户需要 root 权限,这里就要用到 sudo 这个命令了。不过使用这个命令有两个大前提,一是你要知道当前登录用户的密码二是当前用户必须在 sudo 用户组。shiyanlou 用户也属于 sudo 用户组(稍后会介绍如何查看和添加用户组)。

su命令

susu-sudo

  1. su <user>可以切换到用户user,执行时需要输入目标用户的密码

  2. sudo <cmd>可以以特权级别运行cmd命令,需要当前用户属于sudo组,且需要输入当前用户密码

  3. su - <user>命令也是切换用户,同时环境变量也会跟着改变成目标用户的环境变量

使用sudo adduser新建一个用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
takethat@acer:~$ sudo adduser test
[sudo] password for takethat:
Adding user `test' ...
Adding new group `test' (1001) ...
Adding new user `test' (1001) with group `test' ...
Creating home directory `/home/test' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for test
Enter the new value, or press ENTER for the default
Full Name []: 123test
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]

该命令新建test用户到系统同时也为test用户新建了home目录:

1
2
takethat@acer:~$ ls /home
takethat test

主意如果在创建一个新的用户没有设置密码,则应该使用sudo passwd <用户>设置密码才能切换用户

切换用户

1
2
3
takethat@acer:~$ su -l test
Password:
test@acer:~$

密码请填写目标用户的密码

删除用户
sudo deluser test --remove-home

删除某用户,请退出该用户再删除该用户。

1
2
3
4
5
6
7
8
takethat@acer:~$ sudo deluser test --remove-home
[sudo] password for takethat:
Looking for files to backup/remove ...
Removing user `test' ...
Warning: group `test' has no more members.
Done.
takethat@acer:~$

用户组

在 Linux 里面每个用户都有一个归属(用户组),用户组简单地理解就是一组用户的集合,它们共享一些资源和权限,同时拥有私有资源,就跟家的形式差不多,你的兄弟姐妹(不同的用户)属于同一个家(用户组),你们可以共同拥有这个家(共享资源),爸妈对待你们都一样(共享权限),你偶尔写写日记,其他人未经允许不能查看(私有资源和权限)。当然一个用户是可以属于多个用户组的,正如你既属于家庭,又属于学校或公司。

查看用户所在的方法

  1. groups命令

    1
    2
    3
    4
    5
    6
     test@acer:~$ groups takethat
    takethat : takethat adm cdrom sudo dip plugdev lpadmin sambashare libvirtd
    test@acer:~$ groups root
    root : root kvm
    test@acer:~$ groups test
    test : test

    其中冒号之前表示用户,后面表示该用户所属的用户组。这里可以看到 takethat是属于takethat adm cdrom sudo dip plugdev lpadmin sambashare libvirtd;

    root用户属于kvm,test属于test组

  2. 查看/etc/group文件

cat /etc/group | sort

| sort 表示将读取的文本进行一个字典排序再输出,然后你将看到如下一堆输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
takethat@acer:~$ cat /etc/group | sort
adm:x:4:syslog,takethat
audio:x:29:
backup:x:34:
bin:x:2:
cdrom:x:24:takethat
crontab:x:103:
daemon:x:1:
dialout:x:20:
dip:x:30:takethat
disk:x:6:
fax:x:21:
floppy:x:25:
fuse:x:105:
games:x:60:
gnats:x:41:
irc:x:39:

筛选信息:

cat /etc/group | grep -E “takethat”

1
2
3
4
5
6
7
8
9
10
takethat@acer:~$ cat /etc/group | grep -E "takethat"
adm:x:4:syslog,takethat
cdrom:x:24:takethat
sudo:x:27:takethat
dip:x:30:takethat
plugdev:x:46:takethat
takethat:x:1000:
lpadmin:x:110:takethat
sambashare:x:111:takethat
libvirtd:x:113:takethat

etc/group文件格式说明

/etc/group 的内容包括用户组(Group)用户组口令GID 及该用户组所包含的用户(User),每个用户组一条记录。格式如下:
:password:GID:user_list

上面的 password 字段为一个 ‘x’ 并不是说密码就是它,只是表示密码不可见而已。


将其它用户加入 sudo 用户组

默认情况下新创建的用户是不具有 root 权限的,也不在 sudo 用户组,可以让其加入sudo用户组从而获取 root 权限。
可执行sudo ls进行验证:

1
2
3
test@acer:~$ sudo ls
[sudo] password for test:
test is not in the sudoers file. This incident will be reported

会提示 test不在 sudoers 文件中,意思就是 test 不在 sudo 用户组中。

使用usermod命令为用户添加用户组

使用takethat用户执行sudo将test用户添加到sudo用户组里,让它也可以用sudo命令获得root权限;

1
2
takethat@acer:~$ groups test
test : test

takethat@acer:~$ sudo usermod -G sudo test

1
2
3
[sudo] password for takethat: 
takethat@acer:~$ groups test
test : test sudo

Linux文件权限

查看权限ls -l

你必需时刻牢记Linux 里面一切皆文件,正因为这一点才有了设备文件( /dev 目录下有各种设备文件,大都跟具体的硬件设备相关)这一说。

1
2
3
4
5
6
7
8
9
10
root@acer:~# ls -l
total 28
-rw-r--r-- 1 root root 0 Apr 14 05:57 22
drwxr-xr-x 2 root root 4096 Mar 14 11:35 bin
drwxr-xr-x 2 root root 4096 Mar 15 08:23 c-282
drwxr-xr-x 3 root root 4096 Mar 17 14:48 ncre2-c
drwxr-xr-x 2 root root 4096 Mar 15 09:15 point-on-c
drwxr-xr-x 2 root root 4096 Mar 16 01:32 shell-memo
drwxr-xr-x 2 root root 4096 Apr 12 00:15 test
drwxr-xr-x 2 root root 4096 Apr 12 00:25 test2

文件权限详解
文件解析2

一个目录要同时具有读权限执行权限才可以打开,而一个目录要有写权限才允许在其中创建其它文件,这是因为目录文件实际保存着该目录里面的文件的列表等信息。

ls命令补充

  1. ls -a或者ls -A查看以.开头的隐藏文件。

    ls -al 亦可查看更多信息

  2. $ ls -dl <目录>查看目录的完整属性(不是目录里面的文件)

1
2
root@acer:~# ls -dl test
drwxr-xr-x 2 root root 4096 Apr 12 00:15 test
  1. 显示文件大小,并以普通人类能看懂的方式呈现::
1
2
3
4
5
root@acer:~# ls -AsSh
total 220K
152K .tes.swp 8.0K .viminfo 4.0K c-282 4.0K .gnupg 4.0K point-on-c 4.0K test 4.0K .vim 4.0K .profile
12K .bash_history 4.0K bin 4.0K .cache 4.0K ncre2-c 4.0K shell-memo 4.0K test2 4.0K .bashrc 0 22
root@acer:~#

其中小 s 为显示文件大小,大 S 为按文件大小排序,h参数是 –human-readabl,若需要知道如何按其它方式排序,请使用“man”命令查询。


变更文件所有者

在test用户下创建sziit文件

1
2
3
test@acer:~$ touch sziit
test@acer:~$ ll sziit
-rw-rw-r-- 1 test test 0 Apr 14 09:52 sziit

切换至takethat用户
su -l takethat并进入test用户的home目录下

1
2
3
takethat@acer:/home/test$ sudo chown takethat sziit 
takethat@acer:/home/test$ ll sziit
-rw-rw-r-- 1 takethat test 0 Apr 14 09:52 sziit

修改文件权限

  1. 二进制数字表示

变更文件权限-二进制表示方法

每个文件的三组权限(拥有者所属用户组其他用户,记住这个顺序是一定的)就对应这一个 “rwx”,也就是一个 ‘7’ ,所以如果我要将文件“sziit”的权限改为只有我自己可以用那么就这样:

为了方便实验,现在文件增加点内容:

1
takethat@acer:/home/test$ echo "echo \"hello world\"" > sziit 

修改文件权限:

1
2
3
4
5
6
takethat@acer:/home/test$ ll sziit 
-rw-rw-r-- 1 takethat test 19 Apr 14 10:00 sziit
takethat@acer:/home/test$ chmod 700 sziit
takethat@acer:/home/test$ ll sziit
-rwx------ 1 takethat test 19 Apr 14 10:00 sziit*
takethat@acer:/home/test$

切换test用户并尝试查看sziit文件

1
2
3
4
5
takethat@acer:/home/test$ su test
Password:
test@acer:~$ cat sziit
cat: sziit: Permission denied
test@acer:~$
  1. 加减赋值操作

chomod ugo-rw sziit

1
2
3
4
5
6
takethat@acer:/home/test$ ll sziit 
-rwx------ 1 takethat test 19 Apr 14 10:00 sziit*
takethat@acer:/home/test$ chmod gou-rw sziit
takethat@acer:/home/test$ ll sziit
---x------ 1 takethat test 19 Apr 14 10:00 sziit*
takethat@acer:/home/test$
文章目录
  1. 1. Linux 用户及文件管理权限
    1. 1.1. Linux用户管理
      1. 1.1.1. 查看用户
      2. 1.1.2. 创建用户
        1. 1.1.2.1. su命令
    2. 1.2. 用户组
    3. 1.3. Linux文件权限
    4. 1.4. ls命令补充
    5. 1.5. 变更文件所有者
    6. 1.6. 修改文件权限