我尝试使用ls
访问目录,但我只能使用sudo ls
访问用户hduser
,而对于用户avp
,我可以在没有sudo的情况下访问它。
如何在不使用sudo的情况下为用户hduser
访问该目录及其所有子目录?
以下是文件权限:
avp@avp-HP-ENVY:~$ ll /media/avp/
total 24
drwxr-xr--+ 4 root root 4096 Mar 20 12:50 ./
drwxr-xr-x 3 root root 4096 Aug 5 2015 ../
drwxrwxrwx 1 root root 12288 Mar 20 11:40 study/
hduser@avp-HP-ENVY:~$ mkdir /media/avp/test
mkdir: cannot create directory ‘/media/avp/test’: Permission denied
hduser@avp-HP-ENVY:~$ sudo mkdir /media/avp/test
hduser@avp-HP-ENVY:~$ ls /media/avp/test
ls: cannot access /media/avp/test: Permission denied
hduser@avp-HP-ENVY:~$ ls /media/avp/
ls: cannot access /media/avp/study: Permission denied
ls: cannot access /media/avp/test: Permission denied
study test
hduser@avp-HP-ENVY:~$ sudo ls /media/avp/
study test
PS:我已经阅读了关于在没有密码的情况下执行sudo命令的帖子,但我不想首先使用sudo命令来获取文件访问命令(例如ls,mkdir等) 。 我已经使用Ubuntu几年了,但我遗漏了一些非常基本的东西,我想清楚地理解,所以我在这里问这个问题。
答案 0 :(得分:1)
Linux的一个原则是:all是一个文件。这意味着必须将进程和目录视为文件,并且所有文件都具有三组权限:用户,组和其他用户。
权限是:1执行,4执行,2写入。所以,当你看到一个带有权限的文件" 644"这意味着用户可以在其中进行读写,同时该组和其他用户只能读取它。如果你看到一个文件con权限" 777" (MS Windows方式)这意味着所有人都可以使用该文件执行他们想要的操作,相反,具有权限的文件""被锁定了#34;即使是该文件的所有者。更改权限的命令是" chmod",例如,创建一个新文件:
$ touch test.txt
$ ls -l test.txt
你会看到类似的东西:
-rw-r--r-- 1 manuel manuel 0 Mär 20 12:41 test.txt
这意味着:"所有者用户manuel可以读取和写入此文件,组manuel的用户成员只能读取此文件,其余用户只能读取它。"
这些权限来自哪里?好吧,它们是为" umask"定义的,默认情况下,umask对于您创建或复制的新文件为644,对于dirs,当您使用" mkdir"创建目录时为755。命令,键入" ls -la"你可以看到一个" d"在一些行的开头指示"文件"是目录,需要为用户访问执行权限:在linux目录中是具有执行权限的文件。
每次使用以下命令将新用户添加到系统时:
$sudo adduser thomas
该命令会自动创建组" thomas"并在/ home目录中为他创建一个目录。当您安装apache或mysql或postgresql时,apt-get还会创建一个唯一的用户和一个组来处理这些进程,因为这样的方法是危险的,其中所有进程都是由单个管理员用户处理的,如果有人攻击该用户那个人将完全控制所有系统。当然在Linux中用户" root"必须运行尽可能少的进程。
您可以使用以下命令查看系统中的当前组:
$ cat /etc/group
现在,假设用户" thomas"我想编辑我们刚刚创建的文件test.txt,他不能因为该文件属于用户" manuel"和小组" manuel"。您有几个选项,可以使用命令chown更改文件的所有者:
$ chown thomas.thomas test.txt
现在该文件归用户所有" thomas"和小组" thomas",但这是一个问题,因为可能你想稍后编辑文件,现在你不能。而不是更改所有者,您可能只需要向文件添加写入权限:
$chmod 666 test.txt
现在用户thomas可以写入该文件,你也可以。但现在您遇到了任何用户可以在文件中写入的问题。真正的解决方案是为用户和组提供写入权限:
$chmod 664 test.txt
然后将用户添加到组:
$sudo useradd -G manuel thomas
现在"托马斯"是该组织的成员" manuel" (用户可以是许多组的成员)然后他可以在文件中写入,但其他用户不能。
现在你了解你的目录:
drwxr-xr--+ 4 root root 4096 Mar 20 12:50 ./
是"文件"由root用户和root组拥有,而hduser没有权限执行它。你可以做几件事,比如递归整个目录到hduser:
$ sudo chown -R hduser /media/avp/
或者您可以将hduser添加到组" root"但那会很危险。