在用WinSCP上传本地文件到/var/www
的时候,出现了一个错误:
Permission denied.
Error code: 3
Error message from server: Permission denied
很明显,权限错误。
也就是说,我登陆的这个账号,不能往这个文件夹里面写东西。解决方法也有很多种,无非就是更改权限,或者更改文件归属了。
最暴力的方法:
sudo chmod 777 -R /var/www
其中,-R
代表www
下的子文件的权限也被更改
或者可以更改文件夹的归属:
sudo chown -R username /var/www/
其中username
更改为你登陆WinSCP的用户名即可。
问题是解决了,但是以上方法并不是最好的方法,最好的方法是要根据自己服务器的安全策略,然后给文件夹设定对应的权限,这就涉及到linux的跟权限有关的知识了,这里也整理一下。
文件权限
以以下这个文件为例:
drwxrwxr-x 2 ubuntu ubuntu 4.0K Jul 26 11:58 testdir
一个一个解释。
drwxrwxr-x:有10个字母,第一个字母代表文件的类型,-代表文件,d代表文件夹,l代表链接;剩下9个字母,三个字母分为一组,共有三组。第一组代表文件所有者的相应权限,第二组代表与文件所有者同一组的用户的相应权限,第三组代表其他用户的权限。r代表读权限,w代表写权限,x代表执行权限。
2:代表链接的文件数,有2个。
ubuntu:文件所有者
第二个ubuntu:文件所有者所在组
再后面就是时间和文件名了。
更改文件权限
更改文件权限的基本命令是chmod
,这里抛出一个规定,那就是每种权限对应一个数字:r=4,w=2,x=1,所以rwx可以表示为7(4+2+1),rw-可以表示为6(4+2),就是简单的加法。有了这个规定,我们来看命令就很明白了。
chmod 751 abc
:赋予abc权限rwxr-x–x
chmod u=rwx,g=rx,o=x abc
:同上,u=用户权限,g=组权限,o=不同组其他用户权限
chmod u-x,g+w abc
:给abc去除用户执行的权限,增加组写的权限,减号代表去除权限,加号代表增加权限
chmod a+r abc
:a代表所有用户,这里是给所有用户添加读的权限
chmod a=rwx abc
:这条命令等价于chmod 777 abc