tobotras: (unix)
[personal profile] tobotras
А я-то думал, что в «базовом» юниксе меня удивить нечем. Но что для «mv a/ b/» каталог «a» должен быть доступен на запись — меня сегодня удивило.

Ответ «почему» — в man rename(2) :)

Date: 2009-07-10 01:58 pm (UTC)
elentin: ((anti) ski)
From: [personal profile] elentin
elentin@falcon:~$ mkdir test
elentin@falcon:~$ chmod 100 test 
elentin@falcon:~$ ls -ld test 
d--x------ 2 elentin 1002 4096 Июл 10 17:55 test
elentin@falcon:~$ 
elentin@falcon:~$ mv test test_mv
elentin@falcon:~$ ls -ld test_mv/
d--x------ 2 elentin 1002 4096 Июл 10 17:55 test_mv/
elentin@falcon:~$ uname -a
Linux falcon 2.6.26-1-openvz-686 #1 SMP Fri Mar 13 20:20:40 UTC 2009 i686 GNU/Linux
elentin@falcon:~$ cat /etc/debian_version 
5.0.1

Date: 2009-07-10 02:00 pm (UTC)
elentin: (morda)
From: [personal profile] elentin
перепутала chmod 400 и chmod 100, но только с флагом на чтение всё то же самое, дают move.

Date: 2009-07-10 02:12 pm (UTC)
elentin: (petite théière)
From: [personal profile] elentin
О, совсем другое дело :-)

elentin@falcon:~/test$ ls -l
итого 4
dr-------- 2 elentin 1002 4096 Июл 10 18:09 a
elentin@falcon:~/test$
elentin@falcon:~/test$ mv a ../b
mv: невозможно переместить `a' в `../b': Отказано в доступе

Date: 2009-07-10 02:34 pm (UTC)
From: [identity profile] svv.livejournal.com
Остроумно :-)

Вот и первоисточник http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob_plain;f=fs/namei.c;hb=HEAD
	/*
	 * If we are going to change the parent - check write permissions,
	 * we'll need to flip '..'.
	 */
	if (new_dir != old_dir) {
		error = inode_permission(old_dentry->d_inode, MAY_WRITE);
		if (error)
			return error;
	}

Date: 2009-07-10 02:48 pm (UTC)
From: [identity profile] ivlad.livejournal.com
И если разобраться - логично. Если нам надо сменить родителя, надо же изменить ".." в каталоге.

Но если про это не думать, то неочевидно. :)

Date: 2009-07-10 03:09 pm (UTC)
From: [identity profile] shaman007.livejournal.com
mac:~ apple$ mkdir a
mac:~ apple$ chmod 000 a
mac:~ apple$ mv a/ b/
mv: rename a/ to b/a/: Permission denied
mac:~ apple$ uname -a
Darwin mac.local 10.0.0b2 Darwin Kernel Version 10.0.0b2: Tue Jun 23 18:38:45 PDT 2009; root:xnu-1456.1.8~1/RELEASE_I386 i386
mac:~ apple$

Логично.

Date: 2009-07-10 02:35 pm (UTC)
From: [identity profile] avnik.livejournal.com
Я подозреваю чтобы обновить ".." внутри a/

Date: 2009-07-10 03:44 pm (UTC)
From: [identity profile] dado.livejournal.com
ну и желательно на той же файловой системе :)

Date: 2009-07-10 04:08 pm (UTC)
From: [identity profile] bish0nen.livejournal.com
зачем топ-менеджерам юникс? «Windows 7» такая хорошая, и цифра счастилвая, и .. секретарше не видно! ты уэ совсем прям как гик какой-то!

Date: 2009-07-10 04:26 pm (UTC)
From: [identity profile] bish0nen.livejournal.com
ответ "почему" в man link(2) конечно же. только там этого почти не написано Ж)

Date: 2009-07-10 04:33 pm (UTC)
From: [identity profile] bish0nen.livejournal.com
да, и "должен" к root'у, как всегда, не относится.

Date: 2009-07-10 04:52 pm (UTC)
From: [identity profile] bish0nen.livejournal.com
да-да, и я про на Administrator намекаю!

Date: 2009-07-10 04:51 pm (UTC)
From: [identity profile] bish0nen.livejournal.com
хаха. операция rename(2) по сути неатомарна, она либо 1) модификация dir entry напрямую либо (переименование) 2) транслируется в link(2). право на запись в dir entries для "." и ".." насильно отобрано у всех, кроме root'а, а то так и / можно не пойми в куда замкнуть.

Date: 2009-07-14 12:54 am (UTC)
From: [identity profile] bish0nen.livejournal.com
на самом деле очень даже имеет. rename(2), как я уже поведал, неатомарный и сводится к link(2) в твоём случае в mv. у link(2) две функции - увеличить счётчик link count или обновить ".." для случая mv, если mv делается в пределах той же самой файловой системы. причина, по которой для случая (2) используется link(2) такая, что не-руту в явном виде запрещены манипуляции (на запись) с "." и ".." (через opendir, seekdir & write). проверка на разрешение записи здесь вторична и есть следствие униформности прав доступа в юниксе. я не возражаю, я дополняю Ж)

Date: 2009-07-30 08:53 am (UTC)
From: [identity profile] dserv.livejournal.com
экий ты зануда, однако.. :)

Date: 2009-07-10 09:50 pm (UTC)
From: [identity profile] kamiram.livejournal.com
вобще невсегда.
но! ежели(а это 99%) происходит запись в данные нода, значит должен

Date: 2009-07-11 06:00 am (UTC)
From: [identity profile] ex-xaocuc.livejournal.com
круто, никогда не задумывался. виндовз-админ в жизни не догадается =)

Profile

tobotras: (Default)
tobotras

December 2024

S M T W T F S
123 4567
891011121314
15161718192021
22232425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 23rd, 2025 11:27 am
Powered by Dreamwidth Studios