linux系统学习笔记

http://c.biancheng.net/view/728.html

用户管理

用户的增删改查,一个用户可以拥有多个组,一个组可以拥有多个用户,一个文件只能拥有一个用户和用户组

增加一个用户

增加新用户,默认会自动创建一个和用户相同的用户组

1
useradd newuser

查看一个用户

1
2
[root@local]# id newuser
uid=1001(newuser) gid=1001(newuser) groups=1001(newuser)

删除一个用户

加上-r参数会删除这个用户名,若只是使用userdel命令删除该用户时,并不能删除该用户的所有信息,只是删除了/etc/passwd、/etc/shadow、/etc/group/、/etc/gshadow四个文件里的该账户和组的信息。默认情况下创建一个用户账号,会创建一个家目录和一个用户邮箱(在/var/spool/mail目录以用户名命名)

1
userdel newuser

修改一个用户名

1
2
3
4
5
6
[root@localhost witt]# usermod -l moduser newuser
[root@localhost witt]# id newuser
id: ‘newuser’: no such user
[root@localhost witt]# id moduser
uid=1001(moduser) gid=1001(newuser) groups=1001(newuser)
[root@localhost witt]#

增加一个用户组

1
2
3
[root@localhost ~]# groupadd newgroup
[root@localhost ~]# cat /etc/group grep newgroup
newgourp:x:1000:

修改一个用户组

1
2
3
[root@localhost ~]# groupmod -n newgroup1 newgroup
[root@localhost ~]# cat /etc/group grep newgroup
newgroup1:x:1001:

删除一个用户组

1
2
[root@localhost ~]# groupdel newgroup1
[root@localhost ~]# cat /etc/group grep newgroup

将一个用户加入到用户组

1
2
3
4
5
6
7
8
9
[root@localhost ~]# gpasswd -a newuser1 newgroup1 
Adding user newuser1 to group newgroup1
[root@localhost ~]# gpasswd -a newuser2 newgroup1
Adding user newuser2 to group newgroup1
[root@localhost ~]# cat /etc/group grep newgroup
newgroup2:x:1001:
newgroup1:x:1002:newuser1,newuser2
newgroup3:x:1003:
[root@localhost ~]#

将一个用户从组中删除

1
2
3
4
5
6
7
[root@localhost ~]# gpasswd -d newuser2 newgroup1
Removing user newuser2 from group newgroup1
[root@localhost ~]#
[root@localhost ~]# cat /etc/group grep newgroup
newgroup2:x:1001:
newgroup1:x:1002:newuser1
newgroup3:x:1003:

查看一个用户的所属组

1
2
3
4
5
6
root@localhost ~]# cat /etc/group  grep newgroup
newgroup2:x:1001:newuser1
newgroup1:x:1002:newuser1,newuser2
newgroup3:x:1003:
[root@localhost ~]# groups newuser1
newuser1 : newuser1 newgroup2 newgroup1

文件权限

字母简写

对应的单词

u

user

a

all

o

other

g

group

w

write

x

execute

r

read

查看文件权限

1
2
3
4
5
6
7
[root@localhost etc]# ls -al
total 1160
drwxr-xr-x. 87 root root 8192 Jul 28 04:39 .
dr-xr-xr-x. 17 root root 224 Jul 27 22:34 ..
-rw-r--r--. 1 root root 16 Jul 27 22:38 adjtime
-rw-r--r--. 1 root root 1529 Mar 14 2021 aliases
drwxr-xr-x. 2 root root 143 Jul 27 22:37 alternatives

r w x参考上表说明

  1. d ⽬录
  2. b 块设备 /dev/sda /dev/sda1 /dev/sr0
  3. c 字符设备 /dev/pts/0 /dev/tty0
  4. tty //查看字符设备名称
  5. l symbolic link 符号链接 软链接(快捷⽅式)
  6. s socket 套接字 ⽹络进程间通信的⼀种⽅式
  7. p pipe 管道 本地进程间通信的⼀种⽅

文件权限的增和减

a u o g 参考上表说明

1
2
3
4
5
6
7
# 所有加执行权限
[root@localhost ~]# chmod a+x text.txt
# 所有加读权限,其他删执行权限
[root@localhost ~]# chmod a+r,o-x text.txt
[root@localhost ~]# ls -al text.txt
-rwxr-xr--. 1 root root 0 Jul 28 23:31 text.txt
[root@localhost ~]#

文件拥有者和群组的更改

chown -R dir 可以递归目录下的所有文件

1
2
3
4
5
6
7
8
9
10
11
12
# 改拥有者
[root@localhost ~]# chown newuser1 text.txt
[root@localhost ~]# ls -al text.txt
-rwxr-xr--. 1 newuser1 root 0 Jul 28 23:31 text.txt
# 改拥有群组
[root@localhost ~]# chown .newgroup1 text.txt
[root@localhost ~]# ls -al text.txt
-rwxr-xr--. 1 newuser1 newgroup1 0 Jul 28 23:31 text.txt
# 拥有者和群组一起改
[root@localhost ~]# chown newuser2:newgroup2 text.txt
[root@localhost ~]# ls -al text.txt
-rwxr-xr--. 1 newuser2 newgroup2 0 Jul 28 23:31 text.txt

查看单个命令详细信息和文件数据类型

1
2
3
4
5
[root@localhost ~]# file Firefox-full-latest.exe
Firefox-full-latest.exe: PE32 executable (GUI) Intel 80386, for MS Windows
[root@localhost ~]# type ls
ls is aliased to `ls --color=auto'
[root@localhost ~]#

chattr和lsattr命令 文件隐藏属性

1
2
3
4
5
6
7
8
9
[root@qfedu.com ~]# lsattr a.txt
[root@qfedu.com ~]# chattr +a a.txt
[root@qfedu.com ~]# chattr -a a.txt
[root@qfedu.com ~]# chattr +i a.txt
[root@qfedu.com ~]# chattr -i a.txt
+A:Atime,告诉系统不要修改对这个⽂件的最后访问时间
+S:Sync,⼀旦应⽤程序对这个⽂件执⾏了写操作,使系统⽴刻把修改的结果写到磁盘。
+d:No dump,在进⾏⽂件系统备份时,dump程序将忽略这个⽂件。
chattr命令不能保护/、/dev、/tmp、/var⽬录

chattr命令选项 -R 递归地作用于所有子目录及文件(默认不递归)。 -V 将chattr命令的输出变得详细些,并且会打印出chattr命令的版本。 -f 不打印错误信息。 -v version 给文件设置一个版本号。

命令用法 命令格式如下:

1
chattr [ -RVf ] [ -v version ] [ mode ] files…

即,对文件’files’设置为属性’mode’。其中mode可以设置为 “+-=[acdeijstuADST]” 。 例如:

1
[jc_gbd@ubuntu]test:$ sudo chattr +a main.c

上述mode中:

  1. ‘+’ 表示在文件的现有属性上增加后面的属性。
  2. ‘-’ 表示在文件的现有属性上删除后面属性。
  3. ‘=’ 不管原有属性,直接设置为后面的属性。

相关的可改变的属性详细说明:

  1. ‘A’ 文件的atime(access time)记录不可被修改。
  2. ‘a’ 将文件设置为append-only-file,即只可向文件追加内容,而不能覆盖和删除。只有特权用户或者拥有CAP_LINUX_IMMUTABLE的普通用户可以设置这个属性。
  3. ‘c’ 文件会自动在内核中压缩后存储。读取文件操作会得到未压缩的数据,而写入文件操作会先把数据压缩再存到磁盘中。
  4. ‘D’ 有这个属性的目录被修改时,其更改会同步写到磁盘上。相当于mount命令的dirsync选项。
  5. ‘d’ 文件不会成为dump程序的备份目标。
  6. ‘e’ 文件使用extents来映射磁盘上的块。chattr可能无法删除这个属性。
  7. ‘i’ 文件不能被修改,包括写入、删除、重命名和建立符号链接等。只有特权用户或者拥有CAP_LINUX_IMMUTABLE的普通用户可以设置这个属性。
  8. ‘j’ 对于日志文件系统ext3,如果挂载时使用”data=ordered”或者”data=writeback”选项,’j’属性会增加”data=journal”的作用,即,向文件写入的新数据会先写到日志,再写到文件里。如果挂载时本来就使用了”data=journal”,则’j’没有作用。只有特权用户或者拥有CAP_LINUX_IMMUTABLE的普通用户可以设置这个属性。
  9. ’s’ 当文件被删除时,它占用的block会被清零并回收,即完全删除,保护你的隐私。
  10. ‘S’ 当文件被修改时,修改会同时写到磁盘。相当于mount时的sync选项。
  11. ‘T’ 设置该属性的目录,会被认为是Orlov block allocator机制的顶层目录,它告诉ext3/ext4,它的各个子目录是没有关系的,在为子目录分配磁盘块时也应尽量分离来。而在没有设置该属性的目录下,子目录通常会分配相近的块。该属性很适用于设置到/home目录,来隔离各用户文件夹。
  12. ‘t’ 文件在于其他文件合并(tail-merging)时,不会产生尾部块碎片。
  13. ‘u’ 文件在被删除后,其内容仍被保存,允许用于请求数据恢复。
  14. 另外,还有一些文件固有或只读的属性,chattr无法更改,但仍可以通过lsattr命令查看到

SUDO 提权

1
2
3
4
5
6
7
8
9
[root@qfedu.com ~]# visudo
#别名的定义
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping,
/sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm,
/usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool
开放个别命令使⽤权:
huxulong ALL=/usr/bin/passwd, /bin/cat, NETWORKING
开放所有命令使⽤权:
huxulong ALL=(ALL) ALL

权限掩码 unmask

1
2
3
4
5
6
7
8
查看umask
[root@qfedu.com ~]#umask
0022 root账户默认
0002 普通⽤户默认
修改umask
[root@qfedu.com ~]#umask 0111
计算⽅法:
先把掩码做取反操作,然后在与原始权限做与运算